找回密码
 立即注册

QQ登录

只需一步,快速开始

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

四位数码管共阴极的带闹钟时钟仿真,历时四天终于成功

[复制链接]
跳转到指定楼层
楼主
四天终于成功,分享在附件里
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. unsigned char code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
  3. unsigned int num,tt;
  4. unsigned char ALARM,ALA_SWITCH,ALA_SHI,ALA_FEN,SHI,FEN,num1,num2,num3,num4;  
  5. sbit K1=P1^0;
  6. sbit K2=P1^1;
  7. sbit K3=P1^2;
  8. sbit K4=P1^3;
  9. sbit GLED=P0^0;
  10. sbit RLED=P0^1;
  11. sbit CLOCK_ADJ=P0^2;
  12. void delay(unsigned int a);
  13. void display(unsigned char a,unsigned char b);
  14. void readkey();
  15. void main()
  16. {      
  17.         RLED=0;
  18.         ALARM=0;
  19.         ALA_SWITCH=0;
  20.         CLOCK_ADJ=1;
  21.         ALA_SHI=12;
  22.         ALA_FEN=0;
  23.         SHI=0;
  24.         FEN=0;
  25.         num=0;
  26.         tt=0;
  27.         TMOD=0x01;      
  28.         EA=1;
  29.         ET0=1;
  30.         TR0=1;
  31.         TH0=(65536-50000)/256;//50ms
  32.         TL0=(65536-50000)%256;
  33.         while(1)
  34.         {               
  35.                 if(tt>=10)  
  36.                 {        RLED=!RLED;
  37.                         tt=0;
  38.                         num++;
  39.                         if(num>=120)
  40.                                 {
  41.                                  num=0;
  42.                                  FEN++;
  43.                                  }
  44.                         if(FEN>=60)
  45.                                 {
  46.                                  FEN=0;
  47.                                  SHI++;
  48.                                  }
  49.                         if(SHI>=24) SHI=0;               
  50.                 }
  51.                 if(ALA_SHI>=24)ALA_SHI=0;
  52.                 if(ALA_FEN>=60)ALA_FEN=0;
  53.                 if(SHI==ALA_SHI&&FEN==ALA_FEN)ALARM=1;
  54.                 else ALARM=0;
  55.                 readkey();
  56.                 if(CLOCK_ADJ==1)display(SHI,FEN);
  57.                 if(CLOCK_ADJ==0)display(ALA_SHI,ALA_FEN);      
  58.         }
  59. }
  60. void delay(unsigned int a)
  61. {
  62.         unsigned int x,y;
  63.         for(x=a;x>0;x--)
  64.                 for(y=100;y>0;y--);
  65. }        
  66. void time0() interrupt 1
  67. {
  68.         TH0=(65536-50000)/256;
  69.         TL0=(65536-50000)%256;
  70.         tt++;
  71.         if(ALARM==1&&ALA_SWITCH==1)GLED=!GLED;
  72.                
  73. }

  74. void display(unsigned char a,unsigned char b)
  75. {               
  76.         num1=a/10;
  77.         num2=a%10;
  78.         num3=b/10;
  79.         num4=b%10;
  80.       
  81.         P3=0xFF;
  82.         P2=table[num1];
  83.         P3=0x0E;                                             
  84.         delay(2);
  85.       
  86.         P3=0xFF;
  87.         if(num%2==0)
  88.         P2=table[num2]|0x80;
  89.         else P2=table[num2];
  90.         P3=0X0D;
  91.         delay(2);
  92.       

  93.         P3=0xFF;
  94.         P2=table[num3];
  95.         P3=0X0B;
  96.         delay(2);      
  97.       
  98.         P3=0xFF;
  99.         P2=table[num4];
  100.         P3=0X07;
  101.         delay(2);      
  102. }

  103. void readkey()
  104. {
  105.                 if(K1==0)
  106.                 {
  107.                         delay(5);
  108.                         delay(5);
  109.                         if(K1==0)CLOCK_ADJ=!CLOCK_ADJ;
  110.                         while(!K1) ;     
  111.                         delay(5);
  112.                         delay(5);                       
  113.                 }      
  114.                 if(K2==0)
  115.                 {
  116.                         delay(5);
  117.                         delay(5);
  118.                         if(K2==0)
  119.                         {
  120.                                 if(CLOCK_ADJ==1)SHI++;
  121.                                 if(CLOCK_ADJ==0)ALA_SHI++;
  122.                         }
  123.                         while(!K2);
  124.                         delay(5);
  125.                         delay(5);
  126.                 }
  127.                 if(K3==0)
  128.                 {
  129.                         delay(5);
  130.                         delay(5);
  131.                         if(K3==0)
  132.                         if(CLOCK_ADJ==1)FEN++;
  133.                         if(CLOCK_ADJ==0)ALA_FEN++;
  134.                         while(!K3) ;
  135.                         delay(5);
  136.                         delay(5);      
  137.                 }
  138.                 if(K4==0)
  139.                 {
  140.                         delay(5);
  141.                         delay(5);
  142.                         if(K4==0)
  143.                         {
  144.                         GLED=1;
  145.                         ALA_SWITCH=!ALA_SWITCH;
  146.                         }
  147.                         while(!K4);
  148.                         delay(5);
  149.                         delay(5);
  150.                 }               
  151. }
复制代码

所有资料51hei提供下载:
不成功便成仁之终极ojbk无敌小霸王时钟.zip (37.88 KB, 下载次数: 84)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:348345 发表于 2018-12-27 21:37 | 只看该作者
回复

使用道具 举报

板凳
ID:391591 发表于 2019-1-8 16:08 | 只看该作者
你这用mcu直接驱动数码管合适不?
回复

使用道具 举报

地板
ID:476064 发表于 2019-4-2 18:01 来自手机 | 只看该作者
这个程序是怎么设置小时的?另外那个闹钟也没法设置小时。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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