从现象来看,是LCD1602处于刚加电状态下的显示情况。说明你的驱动处理没有起作用。 建议: 1、检查接线情况是否正常 2、检查程序中IO口设置和硬件的实际连线是否一致 3、LCD1602的驱动部分,与LCD1602的技术要求是否一致(时序是否匹配、指令和数据的执行顺序是否正确) 看你的代码,在液晶初始化的处理中,指令之间没有必要的延时,恐怕是问题所在。 以下是我用过的代码: sbit rs=P0^7; sbit rw=P0^6; sbit ep=P0^5; void delay (ulong m) { while(m--); } BOOL lcd_bz() { BOOL result; rs=0; // 读忙信号 rw=1; ep=1; _nop_();_nop_();_nop_();_nop_(); result = (BOOL)(PDATA&0x80); ep=0; result ; } void lcd_wcmd (BYTE cmd) { while (lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); PDATA=cmd ; _nop_();_nop_();_nop_();_nop_(); ep=1; _nop_();_nop_();_nop_();_nop_(); ep=0; } //80H+ 地址码( 0-27H ,40H-67H) void lcd_pos (BYTE pos) { lcd_wcmd (pos|0x80); } void lcd_wdat (BYTE dat) { while (lcd_bz()); rs=1; rw=0; ep=0; _nop_();_nop_(); PDATA=dat ; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; } void lcd_init () { lcd_wcmd (0x38); delay(1200); lcd_wcmd (0x0c); delay(1200); lcd_wcmd (0x06); delay(1200); lcd_wcmd (0x01); delay(1200); } 主程序中: lcd_init(); delay (20); lcd_pos (0); // 定位第一行 i=0; while (dis1 [i]!='\0') { lcd_wdat (dis1 [i]); // 显示一行数据 i++; } lcd_pos (0x40); // 定位第二行 i=0; while (dis2 [i]!='\0') { lcd_wdat (dis2 [i]); // 显示一行数据 i++; } |
LCD1602显示数字 以及℃ 这种自定义符号 你可以看看我的贴子 http://www.51hei.com/bbs/dpj-200685-1.html |
来看一下51hei论坛里面解决此问题的痛苦经历吧: 搜索"1602 方块"或者"1602 黑块"或者"1602 白块"或者"1602 格": 这个是io口设置问题,最终搞定了:http://www.51hei.com/bbs/dpj-199732-1.html http://www.51hei.com/bbs/dpj-168643-1.html 既有可能是软件问题也有硬件问题 http://www.51hei.com/bbs/dpj-187378-1.html http://www.51hei.com/bbs/dpj-160754-1.html |