欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1897|回復: 1
收起左側

數碼管時鐘 單片機c程序 時鐘DIY

[復制鏈接]
ID:609063 發表于 2019-9-11 12:17 | 顯示全部樓層 |閱讀模式
六位數碼管時鐘,時、分、秒。附件里有程序和電路圖,喜歡DIY的朋友可以自己動手做一個數碼管鐘表。電路簡單,使用的是89c51或89c52單片機。
電路原理圖如下:
IMG_20190911_120341.jpg

單片機源程序如下:

  1. uv3編譯生成hex文件燒入單片機
  2. 六位數碼管顯示時分秒
  3. 二十四小時制和十二小時制可切換

  4.        
  5. **************************************************************
  6. #include<reg52.h>
  7. #define uc unsigned char
  8. #define ui unsigned int
  9. sbit LED=P3^2;
  10. sbit key0=P3^3;
  11. sbit key1=P3^4;
  12. sbit key2=P3^5;
  13. sbit key3=P3^6;
  14. sbit wan=P3^7;
  15. uc min,hour,sec,num;
  16. bit bdata zhi;
  17. uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*

  18. void delay(ui x)
  19. {
  20.         ui i,j;
  21.         for(i=0;i<x;i++)
  22.         for(j=0;j<121;j++);
  23. }
  24. void display()
  25. {
  26.         P0=tab[hour/10];
  27.         P2=0xdf;//11011111
  28.         delay(1);
  29.         P2=0xff;

  30.         P0=(tab[hour%10])|0x80;//給第二位后加“點
  31.         P2=0xef;//11101111
  32.         delay(1);
  33.         P2=0xff;

  34.         P0=tab[min/10];
  35.         P2=0xf7;//11110111
  36.         delay(1);
  37.         P2=0xff;

  38.         P0=(tab[min%10])|0x80;
  39.         P2=0xfb;//11111011
  40.         delay(1);
  41.         P2=0xff;

  42.         P0=tab[sec/10];
  43.         P2=0xfd;//11111101
  44.         delay(1);
  45.         P2=0xff;

  46.         P0=tab[sec%10];
  47.         P2=0xfe;//11111110
  48.         delay(1);
  49.         P2=0xff;
  50. }

  51. void keyscan()
  52. {
  53.         if(key0==0)
  54.         {
  55.                 delay(5);
  56.                 if(key0==0)
  57.                 {
  58.                         LED=~LED;
  59.                         zhi=~zhi;
  60.                         if((hour>=12)&&(zhi==0))
  61.                         {       
  62.                                 hour=hour-12;
  63.                         }
  64.                         if((zhi==1)&&(wan==1))
  65.                         {
  66.                                 hour=hour+12;
  67.                         }                                          
  68.                 }
  69.                 while(!key0) display();
  70.         }
  71.         if(key1==0)
  72.         {
  73.                 delay(5);
  74.                 if((key1==0)&&(zhi==0))
  75.                 {
  76.                         hour++;
  77.                         if(hour==12)
  78.                         {
  79.                                 hour=0;
  80.                                 wan=~wan;
  81.                         }
  82.                 }
  83.                 if((key1==0)&&(zhi==1))
  84.                 {
  85.                         hour++;
  86.                         if(hour==24)
  87.                         hour=0;
  88.                 }
  89.                 while(!key1) display();
  90.         }
  91.         if(key2==0)
  92.         {
  93.                 delay(5);
  94.                 if(key2==0)
  95.                 {
  96.                         min++;
  97.                         if(min==60)
  98.                         min=0;
  99.                 }
  100.                 while(!key2) display();
  101.         }
  102.         if(key3==0)
  103.         {
  104.                 delay(5);
  105.                 if(key3==0)
  106.                 {sec=0;}
  107.                 while(!key3) display();
  108.         }
  109. }

  110. void init()
  111. {
  112.         sec=0;
  113.         min=30;
  114.         hour=12;
  115.         LED=1;
  116.         zhi=1;
  117.         wan=1;
  118.         TMOD=0x01;
  119.         TH0=(65536-50000)/256;
  120.         TL0=(65536-50000)%256;
  121.         EA=1;
  122.         ET0=1;
  123.         TR0=1;
  124. }

  125. void shizhi()
  126. {
  127.         if(hour>=12)
  128.         wan=1;
  129.         if((hour<12)&&(zhi==1))
  130.         wan=0;
  131. }

  132. void main()//主函數
  133. {
  134.         init();
  135.         while(1)
  136.         {
  137.                 display();
  138.                 keyscan();
  139.                 shizhi();
  140.         }
  141. }
  142. void time0() interrupt 1
  143. {
  144.         TH0=(65536-50000)/256;
  145.         TL0=(65536-50000)%256;
  146.         num++;
  147.         if(num==20)
  148.         {
  149.                 num=0;
  150.                 sec++;
  151.                 if(sec==60)
  152.                 {
  153.                         sec=0;
  154.                         min++;
  155.                         if(min==60)
  156.                         {
  157.                                 min=0;
  158.                                 hour++;
  159.                                 if((hour==12)&&(zhi==0))
  160.                                 {
  161.                                         wan=~wan;
  162.                                         hour=0;
  163.                                 }
  164.                                 if((hour==24)&&(zhi==1))
  165.                                 {
  166.                                         hour=0;       
  167.                                 }
  168.                         }
  169.                 }
  170.         }
  171. }
復制代碼

所有資料51hei提供下載:
六位數碼管時鐘.zip (68.79 KB, 下載次數: 13)


回復

使用道具 舉報

ID:386381 發表于 2019-9-14 23:14 來自觸屏版 | 顯示全部樓層
應該定時器用8位自動重裝模定在0.2ms然后++5000次這樣走時更準確
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表