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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)用8位數(shù)碼管-顯示時(shí)鐘Proteus仿真+代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
程序要求如下:
   1、使用定時(shí)器中斷
         2、數(shù)碼管顯示:時(shí)-分-秒
         3、三個(gè)按鍵控制:MOD鍵、+鍵,-鍵
       在正常計(jì)時(shí)時(shí),按MOD鍵一次,時(shí)間暫停,如果這時(shí)按+鍵或鍵-鍵,秒的數(shù)量就加1或減一;再按MOD鍵(兩次),如果這時(shí)按+鍵或鍵-鍵,分                 的數(shù)量就加1或減一;再按MOD鍵(三次),如果這時(shí)按+鍵或鍵-鍵,時(shí)的數(shù)量就加1或減一;再按MOD鍵(四次),啟動(dòng)計(jì)時(shí)(恢復(fù)正常計(jì)時(shí))。
    4、12小時(shí)制或24小時(shí)制。
廢話不多說(shuō),直接上圖


單片機(jī)源程序如下:
  1. //------------------------------------------------------------------------
  2. //名稱:按鍵調(diào)節(jié)數(shù)碼管顯示
  3. //------------------------------------------------------------------------
  4. //說(shuō)明:
  5. //     按MOD鍵一次,時(shí)間暫停,如果這時(shí)按+鍵或鍵-鍵,
  6. //     秒的數(shù)量就加1或減一;再按MOD鍵(兩次),如果這時(shí)按+鍵或鍵-鍵,
  7. //     分的數(shù)量就加1或減一;再按MOD鍵(三次),如果這時(shí)按+鍵或鍵-鍵,
  8. //     時(shí)的 數(shù)量就加1或減一;再按MOD鍵(四次),啟動(dòng)計(jì)時(shí)(恢復(fù)正常計(jì)時(shí))。   
  9. //------------------------------------------------------------------------

  10. #include <reg51.h>                            //調(diào)用含有51專用寄存器的頭文件
  11. #define uchar unsigned char            //用uchar代替unsigned char
  12. #define uint unsigned int                //用uint代替unsigned int

  13. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //共陽(yáng)極數(shù)碼管斷碼表
  14. //uchar code  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數(shù)碼管斷碼表

  15. sbit mode = P1^0;         //模式調(diào)節(jié)
  16. sbit s1 = P1^1;             //加
  17. sbit s2 = P1^2;             //減

  18. int sec=20,min=5,hour=12;           //顯示初值
  19. uint temp;                                           //臨時(shí)變量
  20. uchar m,n;


  21. /***********************************
  22.            延時(shí)子函數(shù)
  23. *************************************/
  24. void delayms(uint xms)
  25. {
  26.    uint i,j;
  27.    for(i=xms;i>0;i--)
  28.          for(j=120;j>0;j--);
  29. }

  30. /*******************************
  31.           顯示子函數(shù)
  32. ********************************/
  33. void display(void)
  34. {
  35.    P2=0x80;
  36.    P0=table[sec%10];                   //顯示秒個(gè)位
  37.    delayms(5);

  38.    P2=0x40;
  39.    P0=table[sec/10];                  //顯示秒十位
  40.    delayms(5);

  41.    P2=0x20;                                  //顯示橫線
  42.    P0=0xbf;
  43.    delayms(5);

  44.    P2=0x10;                                          //顯示分個(gè)位
  45.    P0=table[min%10];
  46.    delayms(5);

  47.    P2=0x08;                                          //顯示分十位
  48.    P0=table[min/10];
  49.    delayms(5);

  50.    P2=0x04;                              //顯示橫線
  51.    P0=0xbf;
  52.    delayms(5);

  53.    P2=0x02;                                           //顯示時(shí)個(gè)位
  54.    P0=table[hour%10];
  55.    delayms(5);

  56.    P2=0x01;                                          //顯示時(shí)十位
  57.    P0=table[hour/10];
  58.    delayms(5);
  59. }

  60. /*****************************************
  61.                           按鍵子函數(shù)
  62. *******************************************/
  63. void key()                             
  64. {
  65. if(mode==0)                 //第一次判斷"模式"按鍵按下
  66. {
  67.   delayms(5);                //延時(shí)消抖
  68.   if(mode==0)                //第二次判斷"模式"按鍵按下
  69.   { TR0=0;n++; }                     //暫停計(jì)時(shí),并且記錄按鍵按下的次數(shù)
  70.    while(!mode)              //等待按鍵釋放
  71.    {display();}              //調(diào)用顯示函數(shù)消除數(shù)碼管閃爍
  72. }                                                                 
  73.   if(n>3)                                         //如果第四次按下mode鍵則繼續(xù)計(jì)時(shí),并且重新記錄按下的按鍵次數(shù)
  74. {TR0=1;n=0;}                
  75. /********************************
  76.                調(diào)整+
  77. *********************************/
  78.          if (s1==0)                                 //第一次判斷"+"按鍵按下
  79.          {                                                 
  80.          {delayms(10);                         //延時(shí)消抖
  81.          if (s1==0)                                 //第二次判斷"模式"按鍵按下
  82.          {
  83.          switch(n)                                 //根據(jù)"模式"按鍵按下的次數(shù),執(zhí)行對(duì)應(yīng)程序
  84.          {
  85.            case 1:sec++;if(sec>59)sec=0;                 //秒遞增,最大顯示59,若59繼續(xù)遞增則顯示00
  86.            break;
  87.            case 2:min++;if(min>59)min=0;                 //分遞增,最大顯示59,若59繼續(xù)遞增則顯示00
  88.            break;
  89.            case 3:hour++;if(hour>23)hour=0;                 //時(shí)遞增,最大顯示59,若23繼續(xù)遞增則顯示00
  90.            break;
  91.          }
  92.          }
  93.         }
  94.          while(!s1)              //等待"+"按鍵釋放
  95.           {display();}           //調(diào)用顯示函數(shù)消除數(shù)碼管閃爍
  96.          }
  97. /******************************
  98.                 調(diào)整-
  99. *******************************/
  100. if (s2==0)                                         //第一次判斷"-"按鍵按下
  101. {
  102. {delayms(10);                                 //延時(shí)消抖
  103.   if(s2==0)                                         //第二次判斷"模式"按鍵按下
  104.   {
  105.    switch(n)                                 //根據(jù)"模式"按鍵按下的次數(shù),執(zhí)行對(duì)應(yīng)程序
  106.          {
  107.            case 1:sec--;if(sec<=0)sec=59;                //秒遞減,最小顯示00,若00繼續(xù)遞減則顯示59
  108.            break;
  109.            case 2:min--;if(min<=0)min=59;                //分遞減,最小顯示00,若00繼續(xù)遞減則顯示59
  110.            break;
  111.            case 3:hour--;if(hour<=-1)hour=23;        //時(shí)遞減,最小顯示00,若00繼續(xù)遞減則顯示23
  112.            break;
  113.          }
  114.   }
  115.   }
  116.         while(!s2)//等待按鍵釋放
  117.   {display();}//調(diào)用顯示函數(shù)消除數(shù)碼管閃爍
  118. }

  119. }

  120. /*************主函數(shù)************/
  121. void main(void)   
  122. {         
  123.    TMOD=0x11;                              //設(shè)置工作方式
  124.    ET0=1;                                             //使能定時(shí)器0
  125.    TH0=(65536-50000)/256;           //定時(shí)器的初值
  126.    TL0=(65536-50000)%256;
  127.    TR0=1;                             //停止開(kāi)啟定時(shí)器0   
  128.    EA=1;                             //使能中斷
  129.     while(1)
  130.         {
  131.          display();                                 //調(diào)用顯示函數(shù)
  132.          key();                                         //調(diào)用按鍵處理函數(shù)
  133.         }
  134. }
  135. /************定時(shí)器0中斷計(jì)時(shí)**********/         
  136. void  Time0() interrupt 1
  137. {
  138.   TH0=(65536-50000)/256;            //重裝初值50ms;
  139.   TL0=(65536-50000)%256;
  140.   m=m+1;
  141.   key();
  142.   if(m>20)                          // m=20說(shuō)明1秒時(shí)間到
  143.   {
  144.     m=0;
  145.         sec++;       
  146.     if(sec>59)                         //判斷到達(dá)60s
  147.     {
  148.      min++;                                 //分鐘加1
  149.          sec=0;
  150.           if(min>59)                     //判斷到達(dá)60分
  151.          {
  152.           hour=hour+1;                         //小時(shí)加1
  153.           min=0;
  154.          }
  155.          if(hour==24)hour=0;         
  156.     }
  157.    }  
  158. }
復(fù)制代碼

所有資料51hei提供下載:
可調(diào)時(shí)鐘.zip (59.2 KB, 下載次數(shù): 184)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:743615 發(fā)表于 2020-5-4 10:17 來(lái)自手機(jī) | 只看該作者
請(qǐng)問(wèn)如果再加個(gè)蜂鳴器整點(diǎn)報(bào)時(shí),程序要怎么寫(xiě)呢
回復(fù)

使用道具 舉報(bào)

板凳
ID:781711 發(fā)表于 2020-6-17 15:25 | 只看該作者
您好,能問(wèn)一下怎么把時(shí)鐘上最開(kāi)始的值設(shè)為十二點(diǎn)整?
回復(fù)

使用道具 舉報(bào)

地板
ID:293363 發(fā)表于 2020-6-26 21:12 | 只看該作者
huang452 發(fā)表于 2020-6-17 15:25
您好,能問(wèn)一下怎么把時(shí)鐘上最開(kāi)始的值設(shè)為十二點(diǎn)整?

修改顯示初值 sec min hour 的值
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩欧美 | 国产精品69av | 成人福利网站 | 国产免费一区二区三区最新6 | 欧美国产视频 | 国产精品精品视频一区二区三区 | 黑色丝袜三级在线播放 | 久久精品亚洲国产 | 久久久一区二区三区 | 毛片电影 | 亚洲精品高清视频 | 国产激情在线看 | 美日韩视频 | 91伊人网 | 男女羞羞视频在线免费观看 | 日韩欧美在线不卡 | 久久精品一区 | 日韩有码在线观看 | 国产精品jizz在线观看老狼 | 国产三级大片 | 久草成人 | 国产精品久久久久久久久久免费看 | 国产亚洲精品一区二区三区 | 欧美寡妇偷汉性猛交 | 欧美中文字幕一区二区三区亚洲 | 亚洲国产精品一区二区久久 | 成人三级视频 | 国产精品视频久久 | 久草网站 | 成人免费视频网站在线观看 | 欧美一二三四成人免费视频 | 久久久久久九九九九 | 欧美久久大片 | 久久久久黄| 中文字幕 国产 | 超黄毛片| 99精品国产一区二区青青牛奶 | 中文字幕二区 | 亚洲成人av| 亚洲人成人一区二区在线观看 | 久久久久亚洲精品 |