最近采用LCD1602模块做了一个简单项目,把STM32F103采集的信号显示出来,由于电路板采用现成的,只能使用IIC接口,因此直接采购了带IIC模块的LCD1602显示屏。期间遇到了一些问题,把它整理出来,供有缘人参考。
程序参照了wx1458084829发布的LCD1602模块-带IIC转接板文章,只不过改成了标准库,感谢原作者。
显示屏用5V供电,STM32F103接口电平是3.3V,注意初始化IIC时采用开漏输出。另外,使用SWD接口仿真器时,仿真器跟电路板之间不要连接3.3V,只连接JTCK、JTMS、GND3根线,否则调试时会碰到让人困惑的问题。
仿真时第一次运行显示正常,LCD初始化程序如下:
IIC_Init();
//设置4bit模式
delay_ms(50);
WriteHalfCommand(0x20);
delay_ms(10);
WriteFullCommand(0x28); //0x28 4线操作模式 0x38 8线模式
delay_ms(10);
WriteFullCommand(0x28);
WriteFullCommand(0x08);
WriteFullCommand(0x0C); //开启显示、不显示光标、不闪烁光标
WriteFullCommand(0x06); //文字不动,地址自动加1
WriteFullCommand(0x01); //清屏
delay_ms(1);
遇到的最大问题是STM32F103复位时显示屏显示不正常,此时LCD1602没有复位,再按上述程序对显示屏初始化,引起显示异常。经测试,改进程序如下:
IIC_Init();
//设置4bit模式
delay_ms(50);
WriteFullCommand(0x02);
delay_ms(10);
WriteFullCommand(0x28); //0x28 4线操作模式 0x38 8线模式
delay_ms(10);
WriteFullCommand(0x28);
WriteFullCommand(0x08);
WriteFullCommand(0x0C); //开启显示、不显示光标、不闪烁光标
WriteFullCommand(0x06); //文字不动,地址自动加1
WriteFullCommand(0x01); //清屏
delay_ms(1);
显示屏显示正常。
希望遇到此现象的朋友参考。