找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 4
打印 上一主题 下一主题
收起左侧

单片机数字电子钟 每秒led闪烁一次,整点报时 Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
实现功能:每秒led闪烁一次,整点报时Proteus仿真,数码管显示

源代码
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar sec1,sec2,min1,min2,hour1,hour2,num,num0;
  5. sbit fm=P1^0;
  6. sbit led0=P1^6;
  7. sbit key1=P3^0;
  8. sbit key2=P3^1;
  9. sbit key3=P3^2;
  10. unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  11. void delay(unsigned char z)
  12. {unsigned char x,y;
  13.   for(x=0;x<z;x++)
  14.    for(y=0;y<255;y++);
  15. }
  16. void time ()  interrupt 1
  17. {                num=num+1;
  18.         num0=num0+1;     
  19.   TH0=(65536-50000)/256;
  20.   TL0=(65536-50000)%256;   
  21. }
  22. void led()
  23. {         
  24.    if(num0>10)
  25.           {led0=1;
  26.           if(num0>20)
  27.           {led0=0;
  28.             num0=0;        }
  29.            }
  30. }
  31. void display()
  32. {
  33.         if(num>=20)   
  34.      {        num=0;
  35.          sec1=sec1+1;
  36.                       if(sec1>9)
  37.                      {sec1=0;
  38.                   sec2=sec2+1;
  39.                   }
  40.                            if(sec2>5)
  41.                     {sec2=0;
  42.                    min1=min1+1;
  43.                     }
  44.                  if(min1>9)
  45.                          {min1=0;
  46.                        min2=min2+1;
  47.                       }
  48.                    if(min2>5)
  49.                         {min2=0;
  50.                         hour1=hour1+1;
  51.                                 fm=1;
  52.                                         delay(50);
  53.                                         fm=0;  
  54.                         }
  55.             if(hour1>9)
  56.                           {           
  57.                              hour1=0;
  58.                                  hour2=hour2+1;         
  59.                            }
  60.                    if(hour2>1&&hour1>3)
  61.                           { hour2=0;
  62.                             hour1=0;
  63.                                           }        
  64.          }
  65.          P2=0xfe;
  66.      P0=table[sec1];           
  67.          delay(5);
  68.      P2=0xfd;
  69.          P0=table[sec2];                  
  70.          delay(5);
  71.          P2=0xfb;
  72.          P0=0x40;
  73.      delay(5);
  74.      P2=0xf7;
  75.      P0=table[min1];
  76.      delay(5);
  77.      P2=0xef;
  78.      P0=table[min2];
  79.      delay(5);
  80.      P2=0xdf;
  81.      P0=0x40;
  82.      delay(5);
  83.      P2=0xbf;
  84.      P0=table[hour1];
  85.      delay(5);
  86.      P2=0x7f;
  87.      P0=table[hour2];
  88.      delay(5);
  89. }
  90. void key()
  91. { if(key1==0)
  92.    { delay(10);
  93.     sec1=sec1+1;
  94.    }
  95.    while(key1==0)
  96.   display();
  97.    if(key2==0)
  98.    { delay(10);
  99.     min1=min1+1;
  100.    }
  101.    while(key2==0)
  102.   display();
  103.    if(key3==0)
  104.     {delay(10);
  105.         hour1=hour1+1;
  106.         fm=1;
  107.         delay(50);
  108.         fm=0;
  109.         }
  110.         while(key3==0)
  111.   display();
  112. }
  113. void main()
  114. { fm=0;
  115.   TMOD=1;
  116.   TH0=(65536-50000)/256;
  117.   TL0=(65536-50000)%256;
  118.   EA=1 ;ET0=1;TR0=1;
  119.     while(1)
  120.    {   led();
  121.          display();         
  122.          key();
  123.    }
  124. }
复制代码
数字电子钟.zip (80.34 KB, 下载次数: 45)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2021-5-10 20:46 | 只看该作者
按楼主的意图改成这样试试。
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar sec,min,hour,num,num1,t;
  5. bit sign=0;
  6. sbit fm=P1^0;
  7. sbit led0=P1^6;
  8. sbit key1=P3^0;
  9. sbit key2=P3^1;
  10. sbit key3=P3^2;
  11. unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12. unsigned char a[]={0,0,0x40,0,0,0x40,0,0};
  13. /*
  14. void delay(unsigned char z)
  15. {
  16.         unsigned char x,y;
  17.         for(x=0;x<z;x++)
  18.                 for(y=0;y<255;y++);
  19. }*/
  20. void time ()  interrupt 1
  21. {
  22.         TH0=(65536-50000)/256;
  23.         TL0=(65536-50000)%256;
  24.         num++;
  25.         if(num>=20)   
  26.         {
  27.                 num=0;
  28.                 sec++;
  29.                 if(sec>=60)
  30.                 {
  31.                         sec=0;
  32.                         min++;
  33.                         if(min>=60)
  34.                         {
  35.                                 min=0;
  36.                                 hour++;
  37.                                 if(hour>=24)
  38.                                         hour=0;  
  39.                         }
  40.                 }
  41.         }              
  42. }

  43. void led()
  44. {         
  45.         if(num>10)
  46.                 led0=1;
  47.         else
  48.                 led0=0;
  49.         if(min==0&&sec<=5)//整点报时5秒
  50.                 fm=1;
  51.         else fm=0;
  52. }

  53. void display()
  54. {
  55.         a[0]=table[hour/10];
  56.         a[1]=table[hour%10];
  57.         a[3]=table[min/10];
  58.         a[4]=table[min%10];
  59.         a[6]=table[sec/10];
  60.         a[7]=table[sec%10];
  61.         P0=0x00;
  62.         P2=~(0x01<<t);
  63.         P0=a[t];
  64.         t=++t%8;
  65. }
  66. void key()
  67. {       
  68.         if(!key1||!key2||!key3)
  69.         {
  70.                 if(++num1>=250&&sign==0)
  71.                 {
  72.                         sign=1;
  73.                         if(!key1)sec=++sec%60;
  74.                         if(!key2)min=++min%60;
  75.                         if(!key3)hour=++hour%24;
  76.                 }
  77.         }
  78.         else
  79.         {
  80.                 num1=0;
  81.                 sign=0;
  82.         }
  83. }
  84. void main()
  85. {
  86.         fm=0;
  87.         TMOD=1;
  88.         TH0=(65536-50000)/256;
  89.         TL0=(65536-50000)%256;
  90.         EA=1;
  91.         ET0=1;
  92.         TR0=1;
  93.         while(1)
  94.         {
  95.                 led();
  96.                 display();
  97.                 key();
  98.         }
  99. }
复制代码



评分

参与人数 1黑币 +5 收起 理由
2823126132 + 5 赞一个!

查看全部评分

回复

使用道具 举报

板凳
ID:889094 发表于 2021-5-10 21:26 | 只看该作者
通篇无注释,高手
回复

使用道具 举报

地板
ID:139866 发表于 2021-5-12 09:53 | 只看该作者
birdzhyli 发表于 2021-5-10 21:26
通篇无注释,高手

我最讨厌的事情有两件,一件是别人的程序不写注释,另一件是让我敲代码的时候写注释
回复

使用道具 举报

5#
ID:939260 发表于 2021-6-17 12:23 | 只看该作者
wulin 发表于 2021-5-10 20:46
按楼主的意图改成这样试试。

厉害啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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