[51单片机] DS1302时钟

[复制链接]
2027|10
 楼主| yexinsuso 发表于 2013-11-24 19:34 | 显示全部楼层 |阅读模式
我的那个开发板配套的用数码管显示时间程序,最后几句是这样的

main()

{

    ds1302_init();

    while(1)

      {

         read_time();

         display();

      }

一开始我不明白为什么要用while死循环,所以我尝试把while程序改成这样

for(i=0;i<200;i++)

{

   read_time();

   display();

}

结果,数码管上秒钟从0变到1,又立即变回0,又变到1,又变到0,如此循环;当我把i<200改成i<300,数码管显示又正常了。这是什么原因呢,怎么解释??好像要有个最小起振时间似的。

另外,我的6位数码管是连接了两个HC573锁存器,程序则是采取轮流打开位选,段选的方式。
ZG11211 发表于 2013-11-24 21:50 | 显示全部楼层
那不叫死循环,那叫大循环,你不循环,怎么能将时钟数据读出来,for200次连1秒都管不了。
ayb_ice 发表于 2013-11-25 08:46 | 显示全部楼层
i<300这个条件永远为真,与while(1)效果一样
kyzb001 发表于 2013-11-25 08:51 | 显示全部楼层
你什么编译器,编译没警告吗?  我猜测你的  i 是char型  或者 usnigned char
限量_个性。 发表于 2013-11-25 13:41 | 显示全部楼层
3L正解哦~
chenyu988 发表于 2013-11-25 14:50 | 显示全部楼层
for(i=0;i<200;i++)
假设执行一条语句是1us,你这才多少时间呢?
chenjianmal 发表于 2013-11-25 16:29 | 显示全部楼层
如果使用for循环 将在循环结束后程序重新执行  等于再次初始化DS1302,如果DS1302在初始化时初始化了时间,依次时间只在一段范围内循环,so 使用while是常规的用法
 楼主| yexinsuso 发表于 2013-11-27 12:13 | 显示全部楼层
ayb_ice 发表于 2013-11-25 08:46
i

谢谢关注!为什么i<300永远为真??我觉得执行300次就完了,那按你的形式, i<200 也是永远为真啊??为什么就不能呢??我最纠结的是这里 200  和300为什么会产生这么大的反差效果
ayb_ice 发表于 2013-11-27 13:55 | 显示全部楼层
yexinsuso 发表于 2013-11-27 12:13
谢谢关注!为什么i

2^8=256
ningling_21 发表于 2014-3-31 11:36 | 显示全部楼层
yexinsuso 发表于 2013-11-27 12:13
谢谢关注!为什么i

uchar i;

这个i  最大只有255...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部