单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:796|回复: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
共享资料的黑币奖励!

查看全部评分

  • 发表于 2024-3-8 16:52
    |
    为啥不用定时器?
    checkmgcmn('post_1194427')
  • 发表于 2024-3-9 10:53
    |
    为啥不用定时器?
    这是在函数内计数了。只是不用另外设置定时器
    checkmgcmn('post_1194492')
  • 发表于 2024-3-9 22:42
    |
    用处不大
    定时器作为单片机常用功能之一,你肯定得学会用
    一旦你会用了,封装成一个函数,后期的代码复制就行了
    而对于时钟秒闪这种东西,0.8秒一次和1秒一次,其实区别不大,给人感觉都是"1秒"闪一次,差不多就行
    而你这个方法,也没感觉比定时器好到哪里去,反而是增加了代码的逻辑,让代码更复杂而已
    checkmgcmn('post_1194569')
  • 发表于 2024-3-10 06:41
    |
    这是在函数内计数了。只是不用另外设置定时器
    用定时器设定一个时长,通常0.5s。当TIME[0]发生变化即触发闪秒。
    checkmgcmn('post_1194587')
  • 发表于 2024-3-10 11:26
    |
    用处不大
    定时器作为单片机常用功能之一,你肯定得学会用
    一旦你会用了,封装成一个函数,后期的代码复制就 ...
    哦。好吧
    checkmgcmn('post_1194613')

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

Powered by 单片机教程网