历史上的今天
返回首页

历史上的今天

今天是:2025年02月20日(星期四)

正在发生

2020年02月20日 | 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);

}


推荐阅读

史海拾趣

AUK Contractors Co Ltd公司的发展小趣事

随着公司业务的不断扩展,AUK Contractors Co Ltd意识到单一市场已无法满足其增长需求。于是,公司积极寻求国际合作,与多个国家的电子企业建立了战略伙伴关系。通过技术交流和资源共享,公司成功打开了新的市场,实现了业务的快速增长。

ETL [E-Tech Electronics LTD]公司的发展小趣事

在国内市场取得一定成功后,ETL开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户和合作伙伴建立了广泛的联系。同时,ETL还通过与国际知名企业的合作,不断提升自身的技术水平和产品质量。这些努力使得ETL的产品逐渐走向国际市场,为公司的发展注入了新的动力。

Gowanda Electronics公司的发展小趣事

随着市场竞争的加剧,ETL意识到只有不断创新才能在市场中立于不败之地。因此,公司加大了对研发的投入,积极引进先进技术和设备,不断推出具有创新性的电子产品。这些产品不仅具有更高的性能和更长的使用寿命,而且更符合市场需求,使得ETL在市场中的竞争力得到了显著提升。

Advanced Power Solutions公司的发展小趣事

随着公司的发展,Advanced Power Solutions开始寻求与行业内其他企业的合作。通过与一家知名电子设备制造商建立战略合作关系,公司成功将其电源管理解决方案集成到对方的产品中。这一合作不仅扩大了公司的市场份额,也提高了公司的品牌知名度。此后,公司陆续与多家企业建立了合作关系,进一步巩固了其在行业内的地位。

BEI Sensors公司的发展小趣事

Beckhoff Automation GmbH公司成立于1953年,总部设立在德国Verl市。公司自创立之初,便致力于工业自动化产品的研发与生产。在创始人的领导下,公司逐步建立起一套完整的工业自动化产品体系,包括工业PC、现场总线模块、驱动产品等。凭借卓越的产品质量和创新的技术理念,Beckhoff在行业内逐渐崭露头角,赢得了客户的广泛认可。

FUJI公司的发展小趣事

Beckhoff Automation GmbH公司成立于1953年,总部设立在德国Verl市。公司自创立之初,便致力于工业自动化产品的研发与生产。在创始人的领导下,公司逐步建立起一套完整的工业自动化产品体系,包括工业PC、现场总线模块、驱动产品等。凭借卓越的产品质量和创新的技术理念,Beckhoff在行业内逐渐崭露头角,赢得了客户的广泛认可。

问答坊 | AI 解惑

19264顯示屏

這是我自己做得程序用PIC彙編編寫的…

查看全部问答>

What is “Protocol Based“?

What is “Protocol Based“?…

查看全部问答>

AVR中IO输出频率的问题

在ICC AVR中如何编写一个管脚是对另一个管脚取反,  但取反后输出的端口的频率要比实际端口输出的频率低十几倍请问如何才能使他们同步? …

查看全部问答>

JLink+Keil的棘手问题

小弟最近使用JlinkV8+Keil调试2440,发现有如下问题,恳请高手赐教! 1、Keil对Jlink的支持有两种方式:RDI和AGDI,那种方式更好一些?(在我看来Jlink的RDI接口好像设置项更多一些) 2、单步调试时,当程序运行到某个子函数里,我按下Step Out时 ...…

查看全部问答>

wince下用.net C#,如何让按钮文字换行?

用vs.net 2008 C#开发wince程序,需要在一个按钮上显示两行文字,我用newline开始在本机调试是可以输出两行文字的,可在wince环境下竟然第二行不能显示,请教各位有什么办法可以让按钮文字显示两行的?谢谢了。…

查看全部问答>

gprs连接成功但是socket连接失败

连接上GPRS后,能打开网页(baidu.com),但是通过socket ,tcp连不上自己的服务器。为啥呢。…

查看全部问答>

Rectangle 画出的矩形怎么去掉边框

        HDC hdc;         hdc = GetDC (hWnd);                HBRUSH hBr;                  ...…

查看全部问答>

急求 ALTERA DSP_Builder9.1 sp1 破解文

如题急求 ALTERA DSP_Builder9.1 sp1 破解文件  哪位大侠有呀!…

查看全部问答>

关于Arria GX 系列EP1AGX的工作电流如何确定

EP1AGX20(484)中的工作电流如何确定,就是内核电流比较大一点,但是具体是多少,该如何确定?高手指导下呗…

查看全部问答>