5650|17

90

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

请教while(1)循环的问题!! [复制链接]

今天在编写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 编辑 ]
此帖出自51单片机论坛

最新回复

还有需要不断刷新的1602吗?  详情 回复 发表于 2012-1-18 22:21
点赞 关注
 

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 

这个好理解

第一个while(1){}是有语句的即大括号里的语句,而第二个没有,当你还没看到显示是,已经在while(1);里死等了
此帖出自51单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
while(1);程序会将一直停留在这句无限循环,不会再回到前面执行 [ 本帖最后由 孤獨の快樂 于 2012-1-17 14:28 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

4
 

回复 沙发 ddllxxrr 的帖子

可是第一条语句是把整个初始化都括里面了,1602才能显示啊!!为什么呢?
此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

5
 

回复 板凳 孤獨の快樂 的帖子

你的意思是说,void main()
{
led0 = 0;
while(1);
}
这条语句是一直停留在while里了,而不是一直点亮led0呗!!
此帖出自51单片机论坛
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

6
 

原帖由 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的操作函数,也应该检查一下,看看是不是关显示了。

此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

7
 

回复 6楼 David_Lee 的帖子

好的、、但,为什么把初始化都放入while了,反而可以显示了呢?
此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

8
 

原帖由 lalaone 于 2012-1-17 14:36 发表 你的意思是说,void main() { led0 = 0; while(1); } 这条语句是一直停留在while里了,而不是一直点亮led0呗!!

led=0执行一次,输出就一直是0了,不用循环执行的

此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

9
 

按理说1602显示一次就会一直存在的,第二种写法也没啥问题才是

把lcd_init(); 和display_lcd();函数贴出来吧

此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

10
 

回复 8楼 孤獨の快樂 的帖子

那这条while语句有什么作用呢?不用它,led0是不是也一直等于0呢?
此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

11
 

原帖由 孤獨の快樂 于 2012-1-17 15:15 发表 按理说1602显示一次就会一直存在的,第二种写法也没啥问题才是把lcd_init(); 和display_lcd();函数贴出来吧

 

问题解决了,就是延时不够呵呵。。

此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

12
 

原帖由 lalaone 于 2012-1-17 20:12 发表 那这条while语句有什么作用呢?不用它,led0是不是也一直等于0呢?

作用就是使程序停留在while(1);

此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

13
 

原帖由 lalaone 于 2012-1-17 20:16 发表   问题解决了,就是延时不够呵呵。。

51写LCD需要延时吗?

难道不是通常的速率了·····

此帖出自51单片机论坛
 
 
 

回复

90

帖子

3

TA的资源

一粒金砂(中级)

14
 

回复 13楼 孤獨の快樂 的帖子

真的需要。当我加完延时后,真的可以正常显示了。
此帖出自51单片机论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

15
 

回复 4楼 lalaone 的帖子

你把初始化,就是lcd_Init放到while外面,只保留刷新数值的那个for在里头就好了,试试。

很可能,这玩意是不带锁存的。所以要不断刷新内容。
此帖出自51单片机论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

16
 
原帖由 孤獨の快樂 于 2012-1-17 15:15 发表 按理说1602显示一次就会一直存在的,第二种写法也没啥问题才是 把lcd_init(); 和display_lcd();函数贴出来吧
此帖出自51单片机论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

119

帖子

0

TA的资源

一粒金砂(高级)

17
 
第1种循环体一直执行,数据一直在刷新,第2种执行一次,while(1)死循环了,数据不刷新,LCD不会亮的。
此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

18
 

原帖由 marco515 于 2012-1-18 17:08 发表 第1种循环体一直执行,数据一直在刷新,第2种执行一次,while(1)死循环了,数据不刷新,LCD不会亮的。

还有需要不断刷新的1602吗?

此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表