单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:388|回复:5
打印上一主题下一主题

解决了DS1302时钟点按秒闪烁的问题,不用定时器也不用延时函数,只需函数内计数

[复制链接]
跳转到指定楼层
楼主
ID:796012发表于 2024-3-8 13:19|只看该作者回帖奖励
void md()/*秒点准确无误,不多不少,刚好亮灭60次*/
{
       unsigned int d,s,i;
       i=1500;/*亮点时长,晶振不同,数值不同*/
   if(TIME[0]%2==1)/*单秒*/
       {
           d++;
           if(d<i)
           {
     COM2_DC_L=dm[disp[9]]+0x80;
           }
           else
           {
             COM2_DC_L=dm[disp[9]];
           }
       }
       if(TIME[0]%2==0)/*双秒*/
       {
   d=0;
       s++;
       if(s<i)
       {
     COM2_DC_L=dm[disp[9]]+0x80;
       }
       else
           {
             COM2_DC_L=dm[disp[9]];
           }      
       }
       if(TIME[0]%2==1)/*单秒*/
       {
           s=0;/*因为时序问题,清零需要放在自加后面*/
       }
}

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:161164发表于 2024-3-8 16:52|只看该作者
为啥不用定时器?
板凳
ID:796012发表于 2024-3-9 10:53|只看该作者
lkc8210 发表于 2024-3-8 16:52
为啥不用定时器?

这是在函数内计数了。只是不用另外设置定时器
地板
ID:401564发表于 2024-3-9 22:42|只看该作者
用处不大
定时器作为单片机常用功能之一,你肯定得学会用
一旦你会用了,封装成一个函数,后期的代码复制就行了
而对于时钟秒闪这种东西,0.8秒一次和1秒一次,其实区别不大,给人感觉都是"1秒"闪一次,差不多就行
而你这个方法,也没感觉比定时器好到哪里去,反而是增加了代码的逻辑,让代码更复杂而已
5#
ID:213173发表于 2024-3-10 06:41|只看该作者
玉萌业余发展 发表于 2024-3-9 10:53
这是在函数内计数了。只是不用另外设置定时器

用定时器设定一个时长,通常0.5s。当TIME[0]发生变化即触发闪秒。
6#
ID:796012发表于 2024-3-10 11:26|只看该作者
Y_G_G 发表于 2024-3-9 22:42
用处不大
定时器作为单片机常用功能之一,你肯定得学会用
一旦你会用了,封装成一个函数,后期的代码复制就 ...

哦。好吧

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网