久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17352|回復: 0
打印 上一主題 下一主題
收起左側

51單片機八位數碼管顯示的數字鐘代碼及仿真

[復制鏈接]
跳轉到指定樓層
樓主
數字鐘設計:
(1)硬件部分主要分以下電路模塊:顯示電路用8個共陰數碼管分別顯示
(2)星期(年份),小時、分鐘(月份)和秒(日)
(3)通過動態掃描進行顯示

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;
  4. unsigned char code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};          //顯示0~F的值
  5. unsigned char Time;                                                                                     //用來存放定時時間

  6. //--聲明全局函數--//
  7. void DigDisplay();                                                                           //動態顯示函數
  8. void DigDisplay1();                                                                          //動態顯示函數
  9. void Timer0Cofig(void);
  10. void delay(u16 i);
  11. u8 m,f,s;
  12. u8 nian=19,yue=3,ri=17;
  13. sbit K4=P1^3;
  14. sbit K3=P1^2;
  15. sbit K2=P1^1;
  16. sbit K1=P1^0;
  17. u8 x;                                                                                        //切換顯示界面
  18. u8 x1;                                                                                       //暫停時間,進入調時
  19. void main(void)
  20. {               
  21.         P2=0X00;
  22.         Timer0Cofig();
  23.         P1=0XFF;
  24.         while(1)
  25.         {
  26.       if(!K4)                                                                                     //切換顯示界面
  27.           {
  28.           delay(10);
  29.           if(!K4)
  30.           x=!x;
  31.           while(!K4);                                                                            //等待按鍵松開
  32.           }
  33.      if(!K1)
  34.           {
  35.           delay(10);
  36.           if(!K1)
  37.           {
  38.           TR0=!TR0;
  39.           x1=!x1;
  40.           }
  41.           while(!K1);                                                                             //等待按鍵松開
  42.           }
  43.            if(!K2&&x1)
  44.           {
  45.           delay(10);
  46.           if(!K2&&x1)
  47.           f++;
  48.           while(!K2&&x1);                                                                         //等待按鍵松開
  49.           }
  50.            if(!K3&&x1)
  51.           {
  52.           delay(10);
  53.           if(!K3&&x1)
  54.           s++;
  55.           while(!K3&&x1);                                                                         //等待按鍵松開
  56.           }
  57.                 if(m==60)                                                                             //秒進位
  58.                 {
  59.                 m=0;
  60.                 f++;
  61.                 }
  62.                 if(f==60)                                                                             //分鐘進位
  63.                 {
  64.                 f=0;
  65.                 s++;
  66.                 }
  67.                 if(s==24)                                                                             //小時進位
  68.                 {
  69.                 s=0;
  70.                 ri++;
  71.                 }
  72.                 if(!x)
  73.                 DigDisplay();
  74.                 if(x)
  75.                 DigDisplay1();                                               
  76.    }
  77. }
  78. void delay(u16 i)
  79. {
  80.         while(i--);       
  81. }
  82. void DigDisplay()                                                                            //顯示秒分時函數
  83. {
  84.    u16 i,i1;                                                                                 //顯示秒
  85.    i=m%10;
  86.    i1=(m/10)%10;
  87.    P2=0X80;
  88.    P0=smgduan[i];
  89.    delay(1);                                                                                 //間隔一段時間掃描
  90.    P2=0X40;
  91.    P0=smgduan[i1];
  92.    delay(1);                                                                                 //間隔一段時間掃描
  93.    P2=0X20;                                                                                         //分隔符
  94.    P0=0xBF;
  95.    delay(1);
  96. //////////////////////////////顯示分鐘
  97.    i=f%10;
  98.    i1=(f/10)%10;
  99.    P2=0X10;
  100.    P0=smgduan[i];
  101.    delay(1);                                                                                 //間隔一段時間掃描
  102.    P2=0X08;
  103.    P0=smgduan[i1];
  104.    delay(1);                                                                                 //間隔一段時間掃描
  105.    P2=0X04;          
  106.    P0=0xBF;
  107.    delay(1);
  108.    //////////////////////////////顯示小時
  109.    i=s%10;
  110.    i1=(s/10)%10;
  111.    P2=0X02;
  112.    P0=smgduan[i];
  113.    delay(1);                                                                                 //間隔一段時間掃描
  114.    P2=0X01;
  115.    P0=smgduan[i1];
  116.    delay(1);
  117. ///////////////////////////////
  118.         delay(80);                                                                               //間隔一段時間掃描       
  119. }
  120. void DigDisplay1()                                                                           //顯示年月日函數
  121. {
  122.    u16 i,i1;                                                                                 //顯示日
  123.    i=ri%10;
  124.    i1=(ri/10)%10;
  125.    P2=0X80;
  126.    P0=smgduan[i];
  127.    delay(1);                                                                                 //間隔一段時間掃描
  128.    P2=0X40;
  129.    P0=smgduan[i1];
  130.    delay(1);                                                                                 //間隔一段時間掃描
  131.    P2=0X20;                                                                                        
  132.    P0=0xBF;
  133.    delay(1);
  134. //////////////////////////////顯示月
  135.    i=yue%10;
  136.    i1=(yue/10)%10;
  137.    P2=0X10;
  138.    P0=smgduan[i];
  139.    delay(1);                                                                                 //間隔一段時間掃描
  140.    P2=0X08;
  141.    P0=smgduan[i1];
  142.    delay(1);                                                                                 //間隔一段時間掃描
  143.    P2=0X04;       
  144.    P0=0xBF;
  145.    delay(1);
  146.    //////////////////////////////顯示年
  147.    i=nian%10;
  148.    i1=(nian/10)%10;
  149.    P2=0X02;
  150.    P0=smgduan[i];
  151.    delay(1);                                                                                //間隔一段時間掃描
  152.    P2=0X01;
  153.    P0=smgduan[i1];
  154.    delay(1);
  155. ///////////////////////////////
  156.         delay(80);                                                                              //間隔一段時間掃描       
  157. }
  158. void Timer0Cofig(void)
  159. {
  160.         TMOD = 0x01;     //定時器0選擇工作方式1
  161.     TH0  = 0x3C;         //設置初始值,定時50MS
  162.     TL0  = 0xB0;
  163.     EA   = 1;             //打開總中斷
  164.     ET0  = 1;                 //打開定時器0中斷
  165.     TR0  = 1;                 //啟動定時器0       
  166. }
  167. void Timer0() interrupt 1
  168. {
  169.         TH0 = 0x3C;             //設置初始值
  170.         TL0 = 0xB0;
  171.         Time++;
  172.         if(Time == 20)
  173.         {
  174.                 m++;
  175.                 Time = 0;
  176.         }
  177. }
復制代碼

所有資料51hei提供下載:
數字鐘.zip (73.9 KB, 下載次數: 118)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 偷拍自拍在线观看 | 九色网址 | 国产高清视频 | 久久久久久久久久久国产 | 精品亚洲一区二区三区 | av中文在线播放 | 国产日韩一区二区三区 | 国产在线观看一区二区三区 | 天堂一区二区三区四区 | 精品九九| 精品一区久久 | 久久久久国产 | 日本h片在线观看 | 午夜小影院 | 羞羞视频网站免费看 | 玖玖久久 | 欧美1区 | 91精品国产综合久久国产大片 | 国产精品一区二区三区久久 | 亚洲精品视 | 日韩欧美亚洲 | 欧美成年网站 | 国产视频精品在线观看 | 91精品国产欧美一区二区成人 | 国产91丝袜在线播放 | 午夜影院 | 在线免费观看黄网 | 成人精品在线视频 | 性生生活大片免费看视频 | 91在线网站 | 国产精品视频999 | 亚洲三级视频 | 欧美网址在线观看 | 午夜影院在线观看 | 久久久激情 | 91极品视频| 成人免费观看视频 | 国产精品永久免费视频 | 日日天天| 国产精久久久久久久 | 国产婷婷综合 |