今天在编写1602程序的时候发现一个奇怪的问题:
void main()
{ while(1)
{ uchar ch[8] = {0x53,0x54,0x43,0x38,0x39,0x43,0x35,0x32};
uchar i;
lcd_init();
for(i = 0;i < 8;i++)
display_lcd(0x80+i,ch);
}
} while语句这么使用的时候,1602显示正常
但是
当void main()
{ uchar ch[8] = {0x53,0x54,0x43,0x38,0x39,0x43,0x35,0x32};
uchar i;
lcd_init();
for(i = 0;i < 8;i++)
display_lcd(0x80+i,ch);
while(1);
} 此时,1602就不显示了数组的内容了。很奇怪!!
[ 本帖最后由 lalaone 于 2012-1-17 13:03 编辑 ]引用: 原帖由 lalaone 于 2012-1-17 12:40 发表 今天在编写1602程序的时候发现一个奇怪的问题: void main() { while(1) { uchar ch[8] = {0x53,0x54,0x43,0x38,0x39,0x43,0x35,0x32}; uchar i; lcd_init(); for(i = 0;i < 8;i++) display ...
除了楼上说的while(1)的区别外,一般来说LCD1602是不用动态扫描的,写入字符显示后进入while(1);应该也是可以显示的。
楼主对1602的操作函数,也应该检查一下,看看是不是关显示了。
引用: 原帖由 lalaone 于 2012-1-17 14:36 发表 你的意思是说,void main() { led0 = 0; while(1); } 这条语句是一直停留在while里了,而不是一直点亮led0呗!!
led=0执行一次,输出就一直是0了,不用循环执行的
引用: 原帖由 孤獨の快樂 于 2012-1-17 15:15 发表 按理说1602显示一次就会一直存在的,第二种写法也没啥问题才是把lcd_init(); 和display_lcd();函数贴出来吧
问题解决了,就是延时不够呵呵。。
引用: 原帖由 lalaone 于 2012-1-17 20:12 发表 那这条while语句有什么作用呢?不用它,led0是不是也一直等于0呢?
作用就是使程序停留在while(1);
引用: 原帖由 孤獨の快樂 于 2012-1-17 15:15 发表 按理说1602显示一次就会一直存在的,第二种写法也没啥问题才是 把lcd_init(); 和display_lcd();函数贴出来吧
引用: 原帖由 marco515 于 2012-1-18 17:08 发表 第1种循环体一直执行,数据一直在刷新,第2种执行一次,while(1)死循环了,数据不刷新,LCD不会亮的。
还有需要不断刷新的1602吗?