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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的電子時鐘設計文檔與源碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:313242 發表于 2018-4-21 19:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
摘 要
20世紀末,電子技術獲得了飛速的發展,在其推動下,現代電子產品幾乎滲透了社會的各個領域,有力地推動了社會生產力的發展和社會信息化程度的提高,同時也使現代電子產品性能進一步提高,產品更新換代的節奏也越來越快。
單片機模塊中最常見的是電子時鐘,電子時鐘是一種用數字電路技術實現時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。
本課題主要研究的是基于單片機的電子時鐘設計,采用AT89C51單片機作為系統的主控芯片,外接LED顯示電路,按鍵電路,晶振電路,復位電路模塊構成一個簡單的電子時鐘。通過按鍵電路能對時、分、秒分別進行設置和實時調整,并將結果顯示在數碼管上。
1



目 錄

1 引 言              3
2 單片機介紹              4
3 電子時鐘硬件設計              4
3.1系統方案的確定              4
3.2功能分析              4
3.3電子時鐘設計原理              5
3.3.1鍵盤控制電路              5
3.3.2晶振電路              6
3.3.3復位電路              7
3.3.4數碼顯示電路              7
4.電子時鐘的軟件設計              8
4.1程序設計內容              8
4.2源程序              9

1



                                                                                                                     

1
在單片機技術日趨成熟的今天,其靈活的硬件電路和軟件電路的設計,讓單片機得到廣泛的應用,幾乎是從小的電子產品,到大的工業控制,單片機都起到了舉足輕重的作用。單片機小的系統結構幾乎是所有具有可編程硬件的一個縮影,可謂是“麻雀雖小,肝膽俱全”,單片機的學習和研究是對微機系統學習和研究的簡捷途徑;趩纹瑱C的定時和控制裝置在許多行業有著廣泛的應用,而電子時鐘是其中最基本的,也是最具有代表性的一個例子[1] ,用數字電路實現對時、分、秒數字顯示的計時裝置。因為機具有體積小、功耗低、功能強、性價比高、易于推廣應用的優點,在自動化裝置、智能儀器表、過程控制、通信、家用電器等許多領域得到日益廣泛的應用[2],因此具有很大的研究價值。










2 單片機介紹
單片機是一種集成在電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的計算機系統[3]。由于單片機的這種結構形式及它所采取的半導體工藝[4],使其具有很多顯著的特點,因而在各個領域都得到了迅猛的發展。單片機主要有如下特點[5]:(1)性價比高;(2)集成度高、體積小、可靠性強。機把各功能部件集成在一塊芯片上,內部采用總線結構,減少了各芯片之間的連線,大大提高了單片機的可靠性與抗干擾能力。另外,其體積小,對于強磁場環境易于采取屏蔽措施,適合在惡劣環境下工作;(3)控制功能強;(4)功耗小、電壓低、便于生產的攜式產品。;(5)外部總線采用串行總線連接,以此縮小了體積;(6)單片機的系統擴展和系統配置典型、規范,容易構成各種規模的應用系統。
3 電子時鐘硬件設計3.1 系統方案的確定
硬件電路是一個系統的重要部分,在本次設計中主要是以AT89C51為核心控制器,外加一些控制電路來實現電子時鐘的基本功能。單片機芯片作為控制系統的核心部件,它除了具備微機CPU的數值計算功能外,還具有靈活強大的控制功能,以便實時檢測系統的輸入量、控制系統的輸出量,實現自動控制[6],外圍控制電路主要包括晶振電路模塊、復位電路模塊、按鍵電路模塊以及數碼管顯示電路模塊,通過這些控制電路的連接構成完整的電路,其結構框圖如圖1所示。

圖1 電子時鐘系統結構圖
3.2功能分析
1.準確計時,以數字形式顯示時、分、秒的時間;2. 小時的計時為24小時制,分和秒的計時要求為60進位;3. 八位數碼管 顯示HH-MM-SS(時分秒),按鍵“模式鍵”依次選擇調整“時”,“分”,“秒”, 按鍵“加鍵”依次加1,按鍵“減鍵”依次減1 ;4.晶振電路起到減小誤差,提高精確度的作用;5.復位電路是對單片機的初始化操作。
3.3電子時鐘設計原理
電子時鐘的實現一般有兩種方法:其一是直接用單片機的定時計數器產生固定時間,這種方法的優點是可以省去一些外圍的芯片,其缺點是只能適用于一些要求不是十分精確、不作長期保留的場合;而對于要求較高的場合,則必須選用專用的芯片[7],本設計采用的是第一種方法。
直接用單片機的定時計數器產生固定時間,這種方法的工作原理是利用單片機芯片的定時器產生固定時間,模擬時鐘的時、分、秒;谶@一原理構成的電子時鐘系統主要由以下幾部分組成:89C51單片機控制器電路,按鍵開關電路,8位數碼管顯示電路,復位電路,晶振電路五部分構成。其工作原理電路圖如圖2所示。

圖2  電子時鐘設計原理圖

3.3.1鍵盤控制電路
電子時鐘最基本的功能除了能正常顯示時間外,還需要對時間進行設置和調整,所以要配以相應的鍵盤控制電路。該設計的鍵盤控制電路主要包括8個按鍵: P1.0控制系統時間暫停,P1.4控制系統時間繼續;P1.1、P1.2、P1.3作為增加時分秒調整時按鍵,P1.5、P1.6、P1.7作為增加時分秒調整時按鍵。鍵盤控制電路的硬件連接圖如圖3所示。
         圖3 鍵盤控制電路
3.3.2晶振電路
晶振的全稱叫晶體振蕩器,它在單片機系統里作用非常大,主要作用是產生單片機所需的時鐘頻率,單片機執行程序所需的時間完全取決于單片機晶振所提供的時鐘頻率,時鐘頻率越高,那么單片機運行速度就越快[8]。在通常工作條件下,普通的晶振頻率絕對精度可達百萬分之五十。高級的精度更高。有些晶振還可以由外加電壓在一定范圍內調整頻率,稱為壓控振蕩器(VCO)。晶振用一種能把電能和機械能相互轉化的晶體在共振的狀態下工作,以提供穩定,精確的單頻振蕩。晶振電路如圖4所示。
圖4 晶振電路
3.3.3復位電路
復位是單片機的初始化操作。單片機啟動運行時,都需要先復位,其作用是使CPU和系統中其他部件處于一個確定的初始狀態,并從這個狀態開始工作。因而,復位是一個很重要的操作方式。 當MCS-5l系列單片機的復位引腳RST(全稱RESET)出現2個機器周期以上的高電平時,單片機就執行復位操作:07H寫入堆棧指針SP,P0口—P3口均置1,程序計數器PC和其他特殊功能寄存器SFR全部清零。只要RST持續為高電平,單片機就處于循環復位狀態[9]。
單片機的復位方式有上電自動復位和手工復位兩種,本設計采用的是手動復位方式,其電路圖如圖5所示。
             圖5 復位電路
3.3.4數碼顯示電路
發光二極管顯示器驅動(點亮)的方法有兩種。一種是靜態驅動法,即給欲點亮的LED通以恒定的定流。這種驅動方法要有寄存器,譯碼器,驅動電路等邏輯部件。當需要顯示的位數增加時,所需的邏輯部件及連線也相應增加,成本也增加。另一種是動態驅動方法,這種方法是給欲點亮的LED通過通以電流,此時LED的亮度是通斷的平均亮度。為保證亮度,通過LED的脈沖電流應數倍于其額定電流值。利用動態驅動法可以減少需要的邏輯部件和連線,單片機應用系統中常采用動態驅動法[10]。數碼管有兩種接法即共陽極接法和共陰極接法。所謂共陽共陰,是針對數碼管的公共腳而言的。一個1位典型的數碼管,一般有10個腳,8個段碼(7段加1個小數點),剩下兩個腳接在一起。共陽指的是公共腳是正極(陽極),所有的段碼實際上是負極,當某一個或某幾個段碼位接低電平,公共腳接高電平時,對應的段碼位就能點亮,進而組合形成我們看到的數字或字母。共陰剛好相反,也就是公共腳是負極(陰極),段碼位是陽極,當公共腳接地,段碼位接高電平時,對應段碼位點亮,本次設計選擇共陰極數碼管,其中有6位顯示“時”,“分”,“秒”,剩下兩位顯示“—”數碼管A~DP接單片機P0端口用于段選,1~9接單片機P2端口用于位選。各個段碼實際上是一個發光二極管,既然是發光二極管,就有正負極,為了防止驅動數碼管電流過大而損壞,各端口接1K電阻。8位共陰極LED數碼顯示電路如圖6所示。

                    圖6 八位8段共陰極LED數碼顯示

4.電子時鐘的軟件設計4.1程序設計內容
單片機軟件設計主要包括執行軟件(完成各種實質性功能)的設計和監控軟件的設計。設計步驟如下所示。
1. 采用模塊化程序結構設計軟件,首先將整個軟件分成若干功能模塊;
2. 根據流程圖,編寫源程序;
3. 上機調試各模塊程序;
4. 與硬件一起聯調,最后完成全部調試工作。
4.2源程序
  1. #include<reg52.h>
  2. /*共陰數碼管編碼*/
  3. unsigned char code tab1[]={
  4. 0x3f,0x06,0x5b,0x4f,0x66,
  5. 0x6d,0x7d,0x07,0x7f,0x6f};
  6. /*共陽數碼管編碼
  7. unsigned char code tab1[]={
  8. 0xc0,0xf9,0xa4,0xb0,
  9. 0x99,0x92,0x82,0xf8,
  10. 0x80,0x90,0x88,0x83,
  11. 0xc6,0xa1,0x86,0x8e};
  12. */
  13. /*位選編碼*/
  14. unsigned char code tab2[]={            
  15. 0xfe,0xfd,0xfb,0xf7,
  16. 0xef,0xdf,0xbf,0x7f};
  17. sbit duanxuan=P1^0;

  18. /*按鍵位定義*/
  19. sbit key0=P1^0;
  20. sbit key1=P1^1;
  21. sbit key2=P1^2;
  22. sbit key3=P1^3;
  23. sbit key4=P1^4;
  24. sbit key5=P1^5;
  25. sbit key6=P1^6;
  26. sbit key7=P1^7;
  27. /*秒、分、時的初始化*/
  28. unsigned char tt=0;
  29. unsigned char miao=0;
  30. unsigned char fen=0;
  31. unsigned char shi=0;
  32. /*延時函數*/
  33. void delay(unsigned char t)
  34. {
  35.               unsigned i;
  36.               while(t--)
  37.               for(i=0;i<75;i++);
  38. }
  39. /*定時器0初始化函數*/
  40. void chushihua()
  41. {            
  42.               TMOD=0x01;
  43.               EA=1;
  44.               ET0=1;
  45.               TH0=(65535-50000)/256;
  46.               TL0=(65535-50000)%256;
  47.               TR0=1;
  48. }
  49. /*時分秒處理函數*/
  50. void timedeal()
  51. {
  52.               if(miao==60)
  53.               {
  54.                             miao=0;
  55.                             fen++;
  56.                             if(fen==60)
  57.                             {
  58.                                           fen=0;
  59.                                           shi++;
  60.                                           if(shi==24)
  61.                                           {
  62.                                                         shi=0;
  63.                                           }
  64.                             }

  65.               }
  66. }
  67. /*顯示函數*/
  68. void display()
  69. {            
  70.               P2=tab2[0];
  71.               P0=tab1[miao%10];
  72.               delay(1);
  73.               P0=0x00;//消影

  74.               P2=tab2[1];
  75.               P0=tab1[miao/10];
  76.               delay(1);
  77.               P0=0x00;//消影

  78.               P2=tab2[2];
  79.               P0=0x40;
  80.               delay(1);
  81.               P0=0x00;//消影

  82.               P2=tab2[3];
  83.               P0=tab1[fen%10];
  84.               delay(1);
  85.               P0=0x00;//消影

  86.               P2=tab2[4];
  87.               P0=tab1[fen/10];
  88.               delay(1);
  89.               P0=0x00;//消影

  90.               P2=tab2[5];
  91.               P0=0x40;
  92.               delay(1);
  93.               P0=0x00;//消影


  94.               P2=tab2[6];
  95.               P0=tab1[shi%10];
  96.               delay(1);
  97.               P0=0x00;//消影

  98.               P2=tab2[7];
  99.               P0=tab1[shi/10];
  100.               delay(1);
  101.               P0=0x00;//消影

  102. }
  103. /*按鍵設定函數*/
  104. void sheding()
  105. {
  106.               if(key0==0)
  107.               {
  108.                             delay(10);
  109.                             if(key0==0)
  110.                             {
  111.                                           EA=0;                           
  112.                             }                                         
  113.               }
  114.               if(key1==0)
  115.               {
  116.                             delay(10);
  117.                             if(key1==0)
  118.                             {
  119.                                           miao++;
  120.                                           if(miao==60)
  121.                                           miao=0;
  122.                                           while(!key1);
  123.                             }                                         
  124.               }
  125.               if(key2==0)
  126.               {
  127.                             delay(10);
  128.                             if(key2==0)
  129.                             {
  130.                                           fen++;
  131.                                           if(fen==60)
  132.                                           fen=0;
  133.                                           while(!key2);
  134.                             }                                         
  135.               }
  136.               if(key3==0)
  137.               {
  138.                             delay(10);
  139.                             if(key3==0)
  140.                             {
  141.                                           shi++;
  142.                                           if(shi==24)
  143.                                           shi=0;
  144.                                           while(!key3);
  145.                             }                                         
  146.               }
  147.               if(key5==0)
  148.               {
  149.                             delay(10);
  150.                             if(key5==0)
  151.                             {
  152.                                           miao--;
  153.                                           if(miao==0)
  154.                                           miao=59;
  155.                                           while(!key5);
  156.                             }                                         
  157.               }
  158.               if(key6==0)
  159.               {
  160.                             delay(10);
  161.                             if(key6==0)
  162.                             {
  163.                                           fen--;
  164.                                           if(fen==0)
  165.                                           fen=59;
  166.                                           while(!key6);
  167.                             }                                         
  168.               }
  169.               if(key7==0)
  170.               {
  171.                             delay(10);
  172.                             if(key7==0)
  173.                             {
  174.                                           shi--;
  175.                                           if(shi==0)
  176.                                           shi=23;
  177.                                           while(!key7);
  178.                             }                                         
  179.               }
  180.               if(key4==0)
  181.               {
  182.                             delay(10);
  183.                             if(key4==0)
  184.                             {
  185.                                           EA=1;
  186.                             }                                         
  187.               }
  188. }
  189. /*主函數*/
  190. void main()
  191. {
  192.               chushihua();
  193.               while(1)
  194.               {
  195.                             sheding();
  196.                             timedeal();
  197.                             display();
  198.               }                                         
  199. }
  200. /*定時器0中斷函數*/
  201. void time0() interrupt 1
  202. {
  203.               TH0=(65535-50000)/256;
  204.               TL0=(65535-50000)%256;
  205.               tt++;
  206.               if(tt==20)
  207.               {
  208.                             tt=0;
  209.                             miao++;
  210.               }
  211. }
復制代碼


Word格式文檔51黑下載地址:
基于51單片機的電子時鐘設計.doc (136.5 KB, 下載次數: 207)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:357979 發表于 2018-6-24 20:17 | 只看該作者
很好 很有用
回復

使用道具 舉報

板凳
ID:360819 發表于 2018-6-28 10:05 | 只看該作者
非常有幫助
回復

使用道具 舉報

地板
ID:409029 發表于 2018-10-13 14:34 | 只看該作者
很有幫助,非常感謝樓主。!
回復

使用道具 舉報

5#
ID:408168 發表于 2018-10-18 14:20 | 只看該作者

很有幫助,非常感謝樓主!
回復

使用道具 舉報

6#
ID:422939 發表于 2018-11-8 13:33 | 只看該作者
很好,很給力
回復

使用道具 舉報

7#
ID:422939 發表于 2018-11-8 13:34 | 只看該作者
很好,很感謝樓主
回復

使用道具 舉報

8#
ID:430837 發表于 2018-11-21 21:11 | 只看該作者
很感謝,感謝樓主
回復

使用道具 舉報

9#
ID:430978 發表于 2018-11-22 09:32 | 只看該作者
非常有幫助,,謝謝大佬
回復

使用道具 舉報

10#
ID:430837 發表于 2018-11-22 12:39 | 只看該作者
很感謝樓主
回復

使用道具 舉報

11#
ID:434567 發表于 2018-11-27 21:49 | 只看該作者
很感謝大佬
回復

使用道具 舉報

12#
ID:337883 發表于 2018-12-2 15:07 | 只看該作者
很有用感謝樓主
回復

使用道具 舉報

13#
ID:438992 發表于 2018-12-4 09:54 來自手機 | 只看該作者
開封彭于晏 發表于 2018-11-22 12:39
很感謝樓主

能不能加我 我有關于電子方面的問題,問一下你
回復

使用道具 舉報

14#
ID:439767 發表于 2018-12-5 09:42 來自手機 | 只看該作者
感謝感謝
回復

使用道具 舉報

15#
ID:454501 發表于 2018-12-25 16:44 | 只看該作者
有清晰的原理圖嗎
回復

使用道具 舉報

16#
ID:530516 發表于 2019-5-9 18:59 | 只看該作者
雖然沒有整點報時功能,但是簡單的功能可以實現,給你點贊
回復

使用道具 舉報

17#
ID:627964 發表于 2019-10-21 23:10 | 只看該作者
好用 給你點贊
回復

使用道具 舉報

18#
ID:633645 發表于 2019-12-18 21:43 來自手機 | 只看該作者
如果再加個鬧鐘功能就好了
回復

使用道具 舉報

19#
ID:772389 發表于 2020-6-8 08:39 | 只看該作者
很棒的程序啊解決了燃眉之急
回復

使用道具 舉報

20#
ID:1082311 發表于 2023-6-7 10:08 來自手機 | 只看該作者
這個采用的仿真軟件是什么版本
回復

使用道具 舉報

21#
ID:1126493 發表于 2024-7-5 15:33 | 只看該作者
程序是不是有點問題,為什么我自己仿真錄入程序顯示不出來時間
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美5区 | 国产高清在线视频 | 国产三级| 中文字幕免费视频 | 特黄特色大片免费视频观看 | 综合一区二区三区 | 日韩有码一区二区三区 | 日本不卡高字幕在线2019 | 久久久久网站 | 国产日韩视频 | 国产精品成人一区 | 国产9 9在线 | 中文 | 久久不卡 | 国产九九精品视频 | 精品免费国产一区二区三区四区介绍 | 欧美精品一区久久 | 一区二区精品 | 免费av观看 | 国产成人精品在线 | 日韩精品激情 | eeuss国产一区二区三区四区 | 成人免费视频观看 | 免费观看羞羞视频网站 | 国产在线1区 | 国产亚洲精品精品国产亚洲综合 | 人人射人人草 | 精品一区二区不卡 | 91精品久久久久久久久中文字幕 | 成人亚洲视频 | 亚洲免费在线视频 | 四虎影院在线观看av | 日韩电影免费在线观看中文字幕 | 久久精品久久久 | 狠狠干五月天 | 久久精品国产免费 | 真人女人一级毛片免费播放 | 黄色av网站在线观看 | h片免费在线观看 | 中文字幕第十一页 | 永久网站 | 日韩一区精品 |