打印
[51单片机]

DS1302时钟

[复制链接]
1688|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

使用特权

评论回复
5
限量_个性。| | 2013-11-25 13:41 | 只看该作者
3L正解哦~

使用特权

评论回复
6
chenyu988| | 2013-11-25 14:50 | 只看该作者
for(i=0;i<200;i++)
假设执行一条语句是1us,你这才多少时间呢?

使用特权

评论回复
7
chenjianmal| | 2013-11-25 16:29 | 只看该作者
如果使用for循环 将在循环结束后程序重新执行  等于再次初始化DS1302,如果DS1302在初始化时初始化了时间,依次时间只在一段范围内循环,so 使用while是常规的用法

使用特权

评论回复
8
yexinsuso|  楼主 | 2013-11-27 12:13 | 只看该作者
ayb_ice 发表于 2013-11-25 08:46
i

谢谢关注!为什么i<300永远为真??我觉得执行300次就完了,那按你的形式, i<200 也是永远为真啊??为什么就不能呢??我最纠结的是这里 200  和300为什么会产生这么大的反差效果

使用特权

评论回复
9
ayb_ice| | 2013-11-27 13:55 | 只看该作者
yexinsuso 发表于 2013-11-27 12:13
谢谢关注!为什么i

2^8=256

使用特权

评论回复
10
ningling_21| | 2014-3-31 11:36 | 只看该作者
yexinsuso 发表于 2013-11-27 12:13
谢谢关注!为什么i

uchar i;

这个i  最大只有255...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

26

帖子

0

粉丝