找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1339|回复: 3
收起左侧

51单片机定时器时钟程序,我通过按键调时间的时候,为什么数码管会一起闪动啊?

[复制链接]
ID:850105 发表于 2020-11-27 10:58 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. char code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6. static unsigned int count,sec=57,min=59,hou=23;

  7. void delay(unsigned int time)
  8. {
  9.         unsigned int j=0;
  10.         for(;time>0;time--)
  11.         for(j=0;j<125;j++);
  12. }                                                  //延时


  13. void displaypro()
  14. {
  15. uchar i;
  16.           {i=sec%10;P2=0x80;P0=led[i];delay(1);}
  17.           {i=sec/10;P2=0x40;P0=led[i];delay(1);}
  18.           {P2=0x20;P0=0xbf;delay(1);}                                                                                
  19.           {i=min%10;P2=0x10;P0=led[i];delay(1);}
  20.           {i=min/10;P2=0x08;P0=led[i];delay(1);}
  21.           {P2=0x04;P0=0xbf;delay(1);}
  22.           {i=hou%10;P2=0x02;P0=led[i];delay(1);}
  23.           {i=hou/10;P2=0x01;P0=led[i];delay(1);}


  24. }
  25. void timer60() interrupt 1
  26. {
  27.         TH0=(65536-50000)/256;
  28.         TL0=(65536-50000)%256;
  29.         ++count;
  30.         if(count==20)
  31.         {
  32.                 count=0;
  33.                 ++sec;
  34.                 if(sec>=60)
  35.                 {sec=0;
  36.                 ++min;        
  37.                 if(min>=60)
  38.                 {
  39.                 min=0;
  40.                 hou++;
  41.                 if(hou>=24)
  42.                 {
  43.                 hou=0;
  44.                 }
  45.                 }
  46.                 }
  47.         }
  48. }                                                                 
  49. void main()
  50. {
  51.         TMOD=0x01;
  52.         TH0=(65536-50000)/256;
  53.         TL0=(65536-50000)%256;
  54.         EA=1;
  55.         ET0=1;
  56.         TR0=1;


  57.         while(1)
  58.         {
  59.           displaypro();
  60.           if(P1==0XF7)
  61.           {
  62.            delay(100);

  63.            if(P1==0xf7)
  64.            {
  65.            hou++;
  66.            if(hou==24)
  67.            hou=0;
  68.            displaypro();}
  69.           }
  70.           if(P1==0Xbf)
  71.           {
  72.            delay(100);
  73.            if(P1==0xbf)
  74.            {
  75.            min++;
  76.            if(min==60)
  77.            {min=0;
  78.            hou++;
  79.            while(hou==24)
  80.            {hou=0;}
  81.            }
  82.            displaypro();
  83.          }
  84.         
  85.         
  86.         }
  87.         
  88.          }
  89.          }
复制代码
回复

使用道具 举报

ID:211814 发表于 2020-11-27 14:16 | 显示全部楼层
用定时器扫描数码管
回复

使用道具 举报

ID:277550 发表于 2020-11-27 15:00 | 显示全部楼层

轮询刷新显示的,中间有延时中断了,数码管必然闪

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:180919 发表于 2020-11-27 17:20 | 显示全部楼层


轮询刷新显示的,调后数据更新

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表