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

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

QQ登錄

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

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

51單片機(jī)做簡(jiǎn)易電子表程序及Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這周我做了一個(gè)用51單片機(jī)的時(shí)鐘,下面介紹一下具體實(shí)用功能 。仿真一開(kāi)始,時(shí)間顯示的是20:30:00   
當(dāng)按下第二個(gè)開(kāi)關(guān)時(shí)  即可調(diào)節(jié)"分"如圖,按一下便調(diào)整為31分。

再按一下第二個(gè)鍵,此時(shí)可調(diào)節(jié)"時(shí)"如圖。

按一下以后,時(shí)間為21時(shí)。

代碼放在附件,有需要可以下載。

單片機(jī)源程序如下:
  1. #include <reg51.h>

  2. sbit key1 = P1^0;
  3. bit flag1s = 0;
  4. bit KeySta = 1;
  5. unsigned char hour = 20;
  6. unsigned char minute = 30;
  7. unsigned char second = 00;
  8. unsigned char mode = 0;
  9. void FreshTime();
  10. void TimeInit();
  11. void IntInit();
  12. void InitLedBuff();
  13. void keyscan();
  14.   
  15. unsigned char code LedChar[] = {  //共陰數(shù)碼管顯示字符轉(zhuǎn)換表
  16.     0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  17.     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};
  18. unsigned char LedBuff[6] = {  //數(shù)碼管顯示緩沖區(qū)
  19.     0xff,0xff,0xff,0xff,0xff,0xff};

  20. void main()
  21. {
  22.   TimeInit();
  23.   IntInit();
  24.   InitLedBuff();
  25.   while(1)//顯示內(nèi)容處理
  26.   {
  27.     if(flag1s&&!mode) //時(shí)間顯示模式
  28.     {
  29.       flag1s = 0;
  30.       FreshTime();
  31.     }
  32.     else if(mode == 1)  //校準(zhǔn)分鐘
  33.     {
  34.       LedBuff[0] = 17;
  35.       LedBuff[1] = 17;
  36.       LedBuff[4] = 17;
  37.       LedBuff[5] = 17;//不顯示
  38.       LedBuff[2] = minute/10;
  39.       LedBuff[3] = minute%10;
  40.     }
  41.     else if(mode == 2)  //校準(zhǔn)小時(shí)
  42.     {
  43.       LedBuff[2] = 17;
  44.       LedBuff[3] = 17;
  45.       LedBuff[4] = 17;
  46.       LedBuff[5] = 17;//不顯示
  47.       LedBuff[0] = hour/10;
  48.       LedBuff[1] = hour%10;
  49.     }
  50.     else if(mode == 3)  //校準(zhǔn)完成重新顯示
  51.     {
  52.       InitLedBuff();
  53.       mode = 0;
  54.     }
  55.     keyscan();
  56.   }
  57. }

  58. void InitLedBuff()//初始化時(shí)間到顯示緩沖區(qū)
  59. {
  60.   LedBuff[0] = hour/10;
  61.   LedBuff[1] = hour%10;
  62.   LedBuff[2] = minute/10;
  63.   LedBuff[3] = minute%10;
  64.   LedBuff[4] = second/10;
  65.   LedBuff[5] = second%10;
  66. }
  67. void FreshTime()//刷新時(shí)間到顯示緩沖區(qū)
  68. {
  69.   second++;
  70.   if(second == 60)//進(jìn)位
  71.   {
  72.     second = 0;
  73.     minute++;
  74.     LedBuff[2] = minute/10;
  75.     LedBuff[3] = minute%10;
  76.     if(minute == 60)//進(jìn)位
  77.     {
  78.       minute = 0;
  79.       hour++;
  80.       if(hour == 24)
  81.         hour = 0;
  82.       LedBuff[0] = hour/10;
  83.       LedBuff[1] = hour%10;
  84.     }  
  85.   }
  86.   LedBuff[4] = second/10;
  87.   LedBuff[5] = second%10;
  88. }

  89. void TimeInit()//定時(shí)器初始化
  90. {
  91.   TMOD = 0X11;    //設(shè)置定時(shí)器為模式1
  92.   TL0 = 0xB0;
  93.   TH0 = 0x3C;     //定時(shí)初值 50ms
  94.   TL1 = 0x18;                //
  95.         TH1 = 0xFC;                //定時(shí)初值 1ms
  96.   TR0 = 1;    //定時(shí)器0開(kāi)始計(jì)時(shí)
  97.   TR1 = 1;    //定時(shí)器1開(kāi)始計(jì)時(shí)
  98.   ET1 = 1;    //使能定時(shí)器1
  99.   ET0 = 1;    //使能定時(shí)器0
  100.   PT0 = 1;    //提高計(jì)時(shí)準(zhǔn)確性,提高定時(shí)器0中斷優(yōu)先級(jí)
  101.   EA = 1;     //打開(kāi)總中斷
  102. }
  103. void IntInit()//外部中斷初始化
  104. {
  105.   IT0 = 1;     //下降沿觸發(fā)
  106.   EX0 = 1;    //使能外部中斷0
  107. }

  108. void keyscan() //按鍵掃描及處理
  109. {
  110.   static bit backup = 1;
  111.   if (KeySta != backup)  //當(dāng)前值與前次值不相等說(shuō)明此時(shí)按鍵有動(dòng)作
  112.   {
  113.     if (backup == 0)   //如果前次值為0,則說(shuō)明當(dāng)前是彈起動(dòng)作
  114.     {
  115.       if(mode == 1)   //校準(zhǔn)分鐘時(shí),分鐘加一
  116.       {
  117.         minute++;
  118.         if(minute==60)
  119.           minute = 0;
  120.       }
  121.       else if(mode == 2)    //校準(zhǔn)小時(shí),小時(shí)加一
  122.       {
  123.         hour++;
  124.         if(hour==24)
  125.           hour = 0;
  126.       }
  127.     }
  128.     backup = KeySta;   //更新備份為當(dāng)前值,以備進(jìn)行下次比較
  129.   }
  130. }
  131. void Int0() interrupt 0
  132. {
  133.   mode++;
  134.   if(mode == 4)
  135.   {
  136.     mode = 0;
  137.   }
  138. }
  139. void Ledfresh() //數(shù)碼管顯示刷新
  140. {
  141.   static unsigned char i = 0;
  142.   switch(i)
  143.   {
  144.     case 0 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  145.     case 1 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  146.     case 2 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  147.     case 3 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  148.     case 4 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  149.     case 5 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i=0;break;
  150.   }
  151. }
  152. void Time0() interrupt 1 //12MHz 50ms
  153. {
  154.   static unsigned char n = 0;
  155.   TL0 = 0xB0;
  156.   TH0 = 0x3C;
  157.   n++;
  158.   if(n==20)
  159.   {
  160.     n=0;
  161.     flag1s = 1;//1s標(biāo)志位
  162.   }
  163. }

  164. void Time1() interrupt 3  //12MHz 1ms
  165. {
  166.   static unsigned char keybuff = 0xff;
  167.   TL1 = 0x18;                //
  168.         TH1 = 0xFC;                //定時(shí)初值 1ms
  169.   Ledfresh();
  170.   keybuff = (keybuff<<1)|key1;
  171.   if (keybuff == 0x00)
  172.   {   //連續(xù)8次掃描值都為0,即16ms內(nèi)都只檢測(cè)到按下?tīng)顟B(tài)時(shí),可認(rèn)為按鍵已按下
  173.       KeySta = 0;
  174.   }
  175.   else if (keybuff == 0xFF)
  176.   {   //連續(xù)8次掃描值都為1,即16ms內(nèi)都只檢測(cè)到彈起狀態(tài)時(shí),可認(rèn)為按鍵已彈起
  177.       KeySta = 1;
  178.   }
  179.   else
  180.   {}  //其它情況則說(shuō)明按鍵狀態(tài)尚未穩(wěn)定,則不對(duì)KeySta變量值進(jìn)行更新
  181. }
復(fù)制代碼
請(qǐng)自行畫(huà)圖

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:762381 發(fā)表于 2020-5-27 12:41 | 只看該作者
請(qǐng)問(wèn)有沒(méi)有Proteus的工程文件啊
回復(fù)

使用道具 舉報(bào)

板凳
ID:1033811 發(fā)表于 2022-6-13 18:16 來(lái)自觸屏版 | 只看該作者
你這個(gè)圖不全啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产美女一区二区 | 97久久精品午夜一区二区 | 亚洲国产在 | 中文字幕一区二区不卡 | 国产小视频在线看 | 久久久久久久综合色一本 | 一区二区三区在线免费观看视频 | 久久专区| 一区二区三区国产 | 国产一区二区免费在线 | 国产成人精品一区二区三区四区 | 精品一区av| 国产馆 | 日韩综合网 | 黄色激情毛片 | 在线观看中文字幕一区二区 | 国产精品视频综合 | 亚洲国产一区二区三区, | 奇米超碰在线 | 丁香婷婷久久久综合精品国产 | 视频国产一区 | 日韩精品一区二区三区在线播放 | 久久精品国产久精国产 | av天天澡天天爽天天av | 国产一区二区三区久久久久久久久 | 无码一区二区三区视频 | 91成人 | 韩日精品视频 | www久久久| 91精品福利 | 日韩第一页 | 日韩中文字幕免费在线 | 久久成人久久 | 涩涩视频网站在线观看 | 黄色电影在线免费观看 | 黄色一级电影免费观看 | 久久精品久久精品久久精品 | www国产成人免费观看视频,深夜成人网 | 国产高清区| 请别相信他免费喜剧电影在线观看 | 亚洲天堂一区 |