单片机
返回首页

STM8 4线驱动1602乱码

2020-02-20 来源:eefocus

近段时间用STM8驱动1602,采用4线方式,首次上电出现乱码,现在网上找到解决方法,做此总结。


网上大佬分析,出现乱码原因是在单片机发送0x28初始化时,高4位发送就已经完成初始化,低4位发送导致出现乱码,需要延时后再初始化可解决。这位大佬提供的方法确实可以解决问题,但感觉问题应该不在这,具体原因还没得出。


#include

#define u8  uint8_t

#define u16 uint16_t

#define u32 uint32_t

typedef unsigned char    uint8_t;

typedef unsigned short   uint16_t;

typedef unsigned long    uint32_t;

#define  LCDRS          PB_ODR_ODR0     

#define  LCDRW          PB_ODR_ODR1    

#define  LCDEN          PB_ODR_ODR2     

#define  LCDDATA        PC_ODR          

u8 table1[]='====LCD 1602===='; //第一行显示数据

u8 table2[]='****************'; //第二行显示数据

void delay(u16 Count);

void LCD1602_Write(u8 cmdordata,u8 writetype);

void LCD1602_init(void);

void LCD1602_DIS(void);

int main(void)

{

  PB_DDR_DDR0=1;       

  PB_CR1_C10=1;         

  PB_CR2_C20=0;         

  PB_DDR_DDR1=1;        

  PB_CR1_C11=1;        

  PB_CR2_C21=0;         

  LCDRW=0;              

  PB_DDR_DDR2=1;        

  PB_CR1_C12=1;         

  PB_CR2_C22=0;         

  PC_DDR=0xFF;          

  PC_CR1=0xFF;          

  PC_CR2=0x00;          

  LCDDATA=0xFF;          

  LCD1602_init();       

  LCD1602_DIS();        

  while(1);

}

void delay(u16 Count)

{

  u8 i,j;

  while (Count--)

  {

    for(i=0;i<50;i++)

      for(j=0;j<20;j++);

  }

}

void LCD1602_init(void)

{

  LCD1602_Write(0x28,0);

/*区间内为加入延时,初始化部分*/

  LCDEN=1;delay(5);

  LCDEN=0;delay(5);

  LCD1602_Write(0x28,0);

/*区间内为加入延时,初始化部分*/

  LCD1602_Write(0x0C,0);

  LCD1602_Write(0x06,0);

  LCD1602_Write(0x01,0);

}

void LCD1602_DIS(void)

{

  u8 i;

  LCD1602_Write(0x80,0);

  for(i=0;i<16;i++)

  {

      LCD1602_Write(table1[i],1);

      delay(2);

  }

  LCD1602_Write(0xC0,0);

  for(i=0;i<16;i++)

  {

      LCD1602_Write(table2[i],1);

      delay(2);

  }

}

void LCD1602_Write(u8 cmdordata,u8 writetype)

{

    LCDRS=writetype;

    delay(5);

    LCDDATA &= 0x0F;   

    LCDDATA|=cmdordata & 0xF0; 

    LCDEN=1;delay(5);

    LCDEN=0;delay(5);

    cmdordata=cmdordata << 4;   

    LCDDATA &= 0x0F;   

    LCDDATA |= cmdordata & 0xF0;  

    LCDEN=1;delay(5);

    LCDEN=0;delay(5);

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 基于IC555的可变PWM振荡器电路

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

    相关电子头条文章