STM8 4线驱动1602乱码

发布者:cloudsousou6最新更新时间:2020-02-20 来源: eefocus关键字:STM8  4线驱动  1602乱码 手机看文章 扫描二维码
随时随地手机看文章

近段时间用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);

}


关键字:STM8  4线驱动  1602乱码 引用地址:STM8 4线驱动1602乱码

上一篇:STM8 LCD液晶
下一篇:STM8S105K6T6单片机的IIC配置问题

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved