找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5138|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

四位數(shù)碼管共陰極的帶鬧鐘時鐘仿真,歷時四天終于成功

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:350812 發(fā)表于 2018-6-15 11:32 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
四天終于成功,分享在附件里
仿真原理圖如下(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. }
復(fù)制代碼

所有資料51hei提供下載:
不成功便成仁之終極ojbk無敵小霸王時鐘.zip (37.88 KB, 下載次數(shù): 84)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:348345 發(fā)表于 2018-12-27 21:37 | 只看該作者
回復(fù)

使用道具 舉報

板凳
ID:391591 發(fā)表于 2019-1-8 16:08 | 只看該作者
你這用mcu直接驅(qū)動數(shù)碼管合適不?
回復(fù)

使用道具 舉報

地板
ID:476064 發(fā)表于 2019-4-2 18:01 來自手機 | 只看該作者
這個程序是怎么設(shè)置小時的?另外那個鬧鐘也沒法設(shè)置小時。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表