发布时间:2022-12-28 19:30
1602按下后会有乱码的问题,其实根本上是硬件引起的。某些最小系统般的复位电路没做好,按下复位键后,就会产生乱码
但是出现这种现象,是可以用软件后期修正的。
由于LCD复位后默认是8线输入,如果函数LCD_write_command是一个按四线输入写入的函数,那么执行LCD_write_command(0x28);等效为先写入8线指令0x20;写入后LCD已经改为了四线模式,再写入4线指令8x的高四位,但是不再有低四位写入,所以之后写入其他数据时,LCD仍在等待上一个指令的低四位。这样就导致了不能正常的进行后面的操作。
解决方法:先执行LCD_write_command(0x02)(0x20应该也是可以的),先是写入了8线指令2,再写入8线指令0`,这样就将LCD改为4线传输,在紧跟这步之后,写入0x32,之后按4线写数据时,就没有高低错乱的问题,
以下为用IIC_1602写的代码。普通1602的解决思路是一样的。
void LCD_init(void)
{
LCD_write_command(0x20);//执行20,先是写入8线指令2x,这时才将LCD改为4线传输
LCD_write_command(0x32);//将8位转成四位
delay_nus(40);
LCD_write_command(0x28);
delay_nus(40);
Enable_LCD_write();
delay_nus(40);
LCD_write_command(0x28); //4位显示!!!!!!!!!!!!!!!!!!
LCD_write_command(0x0c); //显示开
LCD_write_command(0x01); //清屏
delay_nms(2);
}