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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機制作電子鬧鐘設計方案及原理與實現過程

[復制鏈接]
跳轉到指定樓層
樓主
(一)設計任務
  1、采用四位LED動態顯示小時、分單元。
  2、具有自動整點報時功能。
  3、可以通過四個開關設定修改時間,保證準確性。
  4、通過LED燈的顯示,實現整點報時。
(二)設計方案
   顯示時、分,打開電源時,應當顯示的數據為00:00,秒鐘通過右邊的LED燈的閃爍來顯示,每閃爍一次代表計時一秒,然后電路會自動開始計時。電路中應當有時、分的時間調整按鈕。當顯示數據變為00:00時,而不是24:00。時間調整按鈕按下時間小于1s時,時鐘進入休眠狀態;大于1s時,進入時間調整狀態,每按1次,顯示值加1。K1~K4每按一下,開關狀態取反。當鬧鐘開關k1開啟,則顯示鬧鐘設置時間,且中間藍色LED指示燈亮(藍色LED滅則顯示時鐘時間),K2進行小時+1設置,K3進行分鐘+1設置,若開關k4開啟,則允許鬧鐘開啟,當時間到達鬧鐘設定時間時,左邊鬧鐘的綠色LED燈閃爍,進行報時,閃爍延時一分鐘后熄滅。
程序執行后工作LED指示燈閃動,表示程序開始執行,LCD顯示“00:00”,按下操作鍵K1~K4動作如下:
  (1) K1—顯示鬧鐘設置的時間。
  (2) K2—時調整
  (3) K3—分調整
  (4) K4—鬧鈴ON/OFF的狀態設置,ON鬧鐘開啟,OFF鬧鐘關閉。

(三)設計原理
  本設計中實現的是4位數的顯示。一般來說,控制多位數碼管常采用的方法是掃描顯示法,即各位數碼管共用輸入數據,但各數碼管的顯示控制線則單獨控制。  用掃描顯示法來完成多位數字顯示設計,程序執行時,先使要顯示的數字位數對應的數碼管允許點亮;然后,將要顯示的數據輸出到數碼管;顯示時間到了之后,再切換到下一個數碼管來顯示,秒鐘通過右邊LED閃爍來顯示,每一秒閃一下。  報時方面設計采取使用左邊的LED燈閃爍進行報時,燈閃爍一分鐘后熄滅。
(四)硬件電路設計
  電路設計:由以上的分析知,電路中除了單片機之外,還需要4個數碼管,4個開關按鈕,三個LED閃關燈和三個電阻
   





(五)程序設計及流程圖
流程圖:

單片機源程序如下:
  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. }
復制代碼

(六)設計方案的改進
  1、本系統只采用了4個數碼管,而是通過LED燈閃爍來實現秒的計數,電路中可多加兩個數碼管,來顯示秒的計時,來提高電子鬧鐘的準確性。
  2、我們可以把LED燈閃爍報時換成蜂鳴器音樂報時,這樣更能實現“鬧鐘”報時功能,使我們更能感知到。
  3、數碼顯示管可以外加一些三極管,電阻和電容,讓電路設計更合理。

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:243873 發表于 2017-10-29 15:47 | 只看該作者
謝謝
回復

使用道具 舉報

板凳
ID:243986 發表于 2017-10-29 19:44 | 只看該作者
好文章
回復

使用道具 舉報

地板
ID:244062 發表于 2017-10-30 00:25 來自手機 | 只看該作者
學習受教了
回復

使用道具 舉報

5#
ID:391591 發表于 2019-1-8 16:10 | 只看該作者
還是那句話, mcu直接驅動數碼管合適嗎?
回復

使用道具 舉報

6#
ID:476064 發表于 2019-4-2 16:38 來自手機 | 只看該作者
誰知道這個怎么設置時間的?沒看懂
回復

使用道具 舉報

7#
ID:505337 發表于 2019-4-5 15:01 來自手機 | 只看該作者
第一個元件是什么,求解
回復

使用道具 舉報

8#
ID:505337 發表于 2019-4-7 21:35 來自手機 | 只看該作者
仿真電路出現仿真線程已終止怎么回事啊,大神們,求解
回復

使用道具 舉報

9#
ID:505337 發表于 2019-4-25 13:07 來自手機 | 只看該作者
zsf333666 發表于 2019-4-2 16:38
誰知道這個怎么設置時間的?沒看懂

你多按幾次按鍵就明白,多試幾次
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久 | 狠狠爱免费视频 | 午夜亚洲 | 欧美一区成人 | 狠狠亚洲 | 91亚洲视频在线 | 81精品国产乱码久久久久久 | 日本久久福利 | 国产乱人伦精品一区二区 | 日韩欧美国产精品 | 中文字幕一区二区三区精彩视频 | 日韩精品在线一区 | 中国一级大毛片 | 精品国产精品一区二区夜夜嗨 | 色综合天天综合网国产成人网 | 性欧美hd | 日韩中文字幕在线观看 | 日本aⅴ中文字幕 | 欧美在线一区二区三区 | 天堂网av在线 | 欧美视频二区 | 国产在线精品一区二区 | 91在线视频免费观看 | 欧美日韩国产一区二区三区 | 亚洲人成人一区二区在线观看 | 国产精品成人一区二区三区夜夜夜 | 精品一区二区三区在线观看 | 国产成人精品久久 | 一级国产精品一级国产精品片 | 精品国产一区二区三区久久 | 午夜电影在线播放 | 中文字幕欧美日韩 | 看片国产| 羞羞视频免费观看 | 久久国产精品无码网站 | www.久草.com | 九九热这里只有精品在线观看 | 精品视频一区二区三区四区 | 日本三级电影在线观看视频 | 久久综合成人精品亚洲另类欧美 | 国产精品国产三级国产aⅴ中文 |