基于51單片機電子鬧鐘的設計1_第1頁
基于51單片機電子鬧鐘的設計1_第2頁
基于51單片機電子鬧鐘的設計1_第3頁
基于51單片機電子鬧鐘的設計1_第4頁
基于51單片機電子鬧鐘的設計1_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機原理與接口技術課程設計題目:多功能電子鬧鐘 院 系:電氣與電子工程系 專 業:電氣工程及其自動化 班 級:電氣工程1503 姓 名: 學 號: 指導教師: 二零一七年十二月多功能電子鬧鐘摘 要 單片機自20世紀70年代問世以來,以其極高的性能價格比,受到人們的重視和關注,應用很廣、發展很快。而51單片機是各單片機中最為典型和最有代表性的一種。本設計以AT89C51芯片為核心,輔以必要的外圍電路,設計了一個結構簡單,功能齊全的電子時鐘,它由5V直流電源供電。在硬件方面,除了CPU外,使用八個七段LED數碼管來進行顯示,LED采用的是動態掃描顯示,使用74LS245芯片進行驅動。通過LED能

2、夠較為準確地顯示時、分、秒。四個簡單的按鍵實現對時間的調整。軟件方面采用C語言編程。整個電子鐘系統能完成時間的顯示、調時、校時和三組定時鬧鐘的功能。選用單片機最小系統應用程序,添加比較程序、時間調整程序及蜂鳴程序,通過時間比較程序觸發蜂鳴,實現鬧鐘功能,完成設計所需求的軟件環境。介紹并使用Keil單片機模擬調試軟件,測試程序的可行性并用Proteus進行仿真。關鍵詞:單片機 定時器 中斷 鬧鐘 LED 目 錄 第1章 方案的選擇和論證11.1 單片機型號的選擇11.2 按鍵的選擇11.3 顯示器的選擇11.4 計時部分的選擇11.5 發音部分的設計21.6 顯示器驅動電路21.7 電源的選擇2

3、第2章 數字電子鐘的設計原理和方法32.1 設計原理32.2 硬件電路的設計32.2.1 AT89C51單片機簡介32.2.2 鍵盤電路的設計32.2.3 段碼驅動電路42.2.4 蜂鳴器驅動電路42.3 軟件部分的設計52.3.1 主程序部分的設計52.3.2 中斷定時器的設置52.3.3 鬧鐘子函數62.3.4 計時函數72.3.5 鍵盤掃描函數82.3.6 時間和鬧鐘的設置8第3章 實驗結果10總 結11致 謝12參考文獻13附 錄14第1章 方案的選擇和論證1.1 單片機型號的選擇通過對多種單片機性能的分析,最終認為AT89C51是最理想的電子時鐘開發芯片。AT89C51是一種帶4K字

4、節閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,而且它與MCS-51兼容,且具有4K字節可編程序存儲器和1000次擦寫循環,數據保留時間為10年,是最好的選擇。1.2 按鍵的選擇方案一:44矩陣式鍵盤。如果選擇此方案,那么在修改時鐘或設置鬧鈴時間時就可以直接從鍵盤輸入,方便、快捷,但程序較為復雜。 方案二:獨立式按鍵。如果設置過多按鍵,將會占用較多I/O口,而且會給布線帶來不便,因此

5、,此方案適用于按鍵較少的情況。如果選擇此方案,由于按鍵較少,在修改時間或設置鬧鈴時間時就不能直接輸入,只能通過加或減完成,稍為麻煩一些,但其程序簡單。 由于并不需要經常修改時間和設置鬧鈴時間,而且方案二的程序簡單,按鍵少、成本低,因此,選擇方案二。1.3 顯示器的選擇方案一:液晶顯示器。如果選擇此方案,將會降低系統的功耗,這樣就可以用電池供電,便于攜帶。但液晶顯示器的驅動電路復雜,使用起來有一定的難度。 方案二:用數碼管作為顯示器。數碼管的驅動電路簡單,使用方便,如果選擇了此方案,那么在夜間看時間的時候就不需要有光源,非常方便。其缺點是功耗較大。由于數碼管使用起來較為方便,在夜間看時間也很方便

6、,因此我選擇了方案二。1.4 計時部分的選擇如果使用時鐘芯片,系統就不怕掉電且時間精確。但這種芯片比較貴,況且,設計本系統主要是為了學習單片機程序的編寫和調試以及設計硬件電路的一些方法,因此采用軟件的方法來計時而沒有采用價格較高的時鐘芯片。1.5 發音部分的設計通過三極管放大后驅動蜂鳴器工作,再通過軟件這時產生等時時間方波驅動蜂鳴器發出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。1.6 顯示器驅動電路由于通過數碼管公共及的電流較大且避免過多地使用分立元件,采用了一片74LS245來驅動段碼,用P3口作位碼驅動。1.7 電源的選擇如果是用電池供電,就比較方便攜帶,但是本系統,采用了數碼管作為

7、顯示器,功耗較大,需要經常更換電池。況且,本系統的體積較大,即使使用電池供電也不能隨身攜帶,因此,用電池供電不大合適,所以用5V外部穩壓電源來供電。第2章 數字電子鐘的設計原理和方法2.1 設計原理 系統原理圖圖2-1 系統原理圖2.2 硬件電路的設計2.2.1 AT89C51單片機簡介AT89C51是一款單片封裝的微控制器,適合于許多要求高集成度、低成本的場合。可以滿足多方面的性能要求。AT89C51采用了高性能的處理器結構,指令執行時間只需2到4個時鐘周期。6倍于標準51單片機器件。AT89C51集成了許多系統級的功能,這樣可大大減少元件的數目和電路板面積并降低系統的成本。AT89C51單

8、片機內部主要有以下部件:8031CPU、振蕩電路、總線控制部件、中斷控制部件、片內Flash存儲器、并行I/O接口、定時器和串行I/O接口。圖2-2 AT89C51單片機2.2.2 鍵盤電路的設計鍵盤采用4個獨立按鍵配以4個上拉電阻實現對時鐘和鬧鐘的設定及修改。 圖2-3 獨立按鍵 圖2-4 鍵盤輸入電路2.2.3 段碼驅動電路由于通過數碼管公共及的電流較大且避免過多地使用分立元件,采用了一片74LS245來驅動段碼,用P3口作位碼驅動。圖2-5 段碼驅動器74LS2452.2.4 蜂鳴器驅動電路發音部分是通過三極管放大驅動蜂鳴器工作,再通過軟件這時產生等時時間方波驅動蜂鳴器發出間斷嘀聲,這樣

9、就可以省去硬件振蕩電路,降低成本。圖2-6 蜂鳴器驅動電路2.3 軟件部分的設計2.3.1 主程序部分的設計程序部分主要采用了程序結構的模塊化設計,避免了一些函數的不必要的重復書寫,使程序變得單間易懂。程序在執行時,主程序要須通過調用子函數就可完成相應的功能 。主程序流程圖如下圖2-7。圖2-7 主程序流程圖2.3.2 中斷定時器的設置數字電子鐘設計中主要使用定時器T0中斷ET0,利用ET0中斷進行計時時間的自增,從而實現計時功能。AT89C51有兩個通用定時/計數器。兩者均可配置為定時器或事件計數器。另外增加了定時器T0/T1,溢出時T0/T1腳自動翻轉的功能選項。 用作“定時器”功能時,每

10、經過一個機器周期,寄存器值加1。 用作“計數器”功能時,寄存器在對應的外部輸入管腳T0/T1上每發生一次1到0的跳變時加1。使用該功能時,外部輸入每個機器周期被采樣一次。 圖2-8 定時器工作原理1設計中采用了中斷方式1作為定時中斷,其定時計數初值的設置可由以下公式計算得到,中斷服務流程圖如下圖2-9。X:計數初值 t:定時時間 :機器周期 1圖2-9 中斷服務流程圖2.3.3 鬧鐘子函數鬧鐘時間的判別主要是通過設定時間與實時時間對逐位對比確定是否進行鬧鈴。其工作流程圖如下圖2-10。圖2-10 鬧鈴判斷流程圖2.3.4 計時函數計時函數部分,主要是通過單片機定時中斷來計時,每產生一次中斷標志

11、位flag加1,當flag加滿20次為1秒,然后把flag清0把秒存儲單元加1。然后再依次判斷分、時。其流程圖如下圖2-11。圖2-11 計時流程圖2.3.5 鍵盤掃描函數這些函數主要是判斷是否有按鍵按下,并根據相應按鍵按下的情況調用相關函數執行,其相關流程圖如下圖2-12。圖2-12 鍵盤掃描流程圖2.3.6 時間和鬧鐘的設置此部分主要是通過判斷cnt在不同值時通過調用加1、減1子函數對時間和鬧鐘的時、分、秒進行設置。在鬧鐘設置時,判斷按鍵S4按下情況后,進行鬧鐘的開啟與關閉,相關流程圖如下圖2-13。圖2-13 時間/鬧鐘設置流程圖第3章 實驗結果此電子鬧鐘設計是利用Proteus仿真軟件

12、進行仿真,基本上實現了課程設計要求實現的功能。硬件部分設置了的三個按鍵S1、S2、S3、S4。當按鍵S1第一次按下時,停止計時進入鬧鐘1的秒設置,當按鍵S1第二、第三次按下時,分別進入鬧鐘1的分設置和時設置,當按S1第四 、第五、第六次按下時分別進入鬧鐘2的秒、分、時設置,當按S1第七 、第八、第九次按下時分別進入鬧鐘3的秒、分、時設置,當按S1第十 、第十一、第十二次按下時分別進入時間的秒、分、時設置,在S1按下的各階段,可用按鍵S2、S3進行時間和鬧鈴時間的時、分、秒進行加減設置;當按鍵S1第十三次按下時恢復到時間顯示功能。當顯示的時間和定時設置的時間一致時,蜂鳴器發出等時間斷蜂鳴聲,鬧鈴

13、時間設置為60秒。在各個鬧鐘設置階段,如果有S4按下,則相應鬧鐘功能關閉或開啟;如在鬧鈴時有S4按下則提前停止鬧鈴。圖2-14 運行仿真圖總 結通過自己的不懈努力,我終于完成了畢業設計任務書上的任務要求。功能上基本達標:時鐘的顯示,調時功能、校時功能、鬧鈴功能、鬧鐘設置功能。其精確度完全可以滿足日常生活顯示時間的需要;調時功能,方便快捷;校時功能保證了時鐘準確和可靠性,鬧鐘響鈴還有擴展成音樂鬧鐘的余地。硬件設施合乎要求,軟件設計可以配合硬件實現要求的功能。但是由于時間比較短,前期設計出現部分不足:如位選閃爍功能不能實現、鬧鐘的開啟與關閉、間斷蜂鳴聲等。這些只是軟件設計時相應功能部分還不完善造成

14、。不過經仔細思考和程序的完善,最終將軟件設計改進,并完全可以很好實現所有要求的功能。可見技術在不斷進步,機械式時鐘已經被淘汰,取而代之的是具有高度準確性和直觀性且無機械裝置,具有更長的使用壽命等優點的數字時鐘。數字時鐘更具人性化,更能提高人們的生活質量,更受人們歡迎。 無可否認機械時代已經過去,電子時代已經到來。做為新時代的我們,更應該提高自身能力,適應新時代的發展。知識來自實踐,多去生活中探詢所需要的。對于上述所提到的研究課題,我們應盡量考慮到人的因素,增強時鐘的實用性和操作性,為使用者提供切實的方便,營造一種舒適的生活氛圍。所以,在設計的時候,應該從多方面、多角度去考慮問題,而且應該進一步

15、提高時鐘的質量。另外,在本次設計的過程中,我發現很多的問題,雖然以前沒有做過這樣的設計但通過這次設計我學會了很多東西,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,比如寫一個程序看其功能很少認為編寫程序簡單,但到編程的時候才發現一些細微的知識或低級錯誤經常犯做不到最后常常失敗,所以有些東西只有學精弄懂并且要細心才行,只學習理論有些東西是很難理解的,更談不上掌握。從這次的課程設計中,我們真真正正的意識到,在以后的學習中,要理論聯系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經常的練習的過程

16、中才能提高,我想這就是我在這次課程設計中的最大收獲。致 謝經過一周的實習調查收集數據資料、整理材料、寫作論文,我終于可以順利的完成論文了。 首先要感謝我的指導老師鄧老師,他指引我論文的寫作的方向和架構,并對本文初稿進行仔細批閱,指正出其中不當之處,使我有了思考的方向,他的循循善誘的教導和不拘一格的思路給予我無盡的啟迪,他的嚴謹細致、一絲不茍的作風,將一直是我工作、學習中的榜樣。通過此次的論文,我學到了很多知識,在論文的寫作過程中,我不僅收集到了論文所需的資料數據,而且學到了很多書本上沒有的知識。并且由原先的被動的接受知識轉換為主動的尋求知識,我想這可以說是學習方法上的一個很大的突破。 在論文的

17、寫作過程中也學到了做任何事情所要有的態度和心態,首先做學問要一絲不茍,對于發展過程中出現的任何問題和偏差都不要輕視,要通過正確的途徑去解決,在做事情的過程中要有耐心和毅力,不要一遇到困難就打退堂鼓,只要堅持下去就可以找到思路去解決問題的。總之,此次論文的寫作過程,我收獲了很多。再次感謝我的大學和所有幫助過我并給我鼓勵的老師和同學,謝謝你們! 2017年12月參考文獻1 全利、 遲榮強,單片機原理及接口技術M,北京:高等教育出版社,20042 玉華,單片機原理及應用系統設計M,長沙:中南大學出版社,20063 毅剛,MCS-51單片機應用設計M,哈爾賓:哈爾賓工業大學出版社,1997 4 漢才,

18、單片機原理及應用M,北京:清華大學出版社,20045 立明,單片機應用系統設計M,北京:北京航空航天大學出版社,19906 榮良,計算機接口技術M,北京:電子工業出版社,20037 光東,單片機微型計算機原理與接口技術M,武漢:華中理工大學出版社,1998 8張靖武、周靈彬,單片機系統的Proteus設計與仿真M,北京:電子工業出版社,2007附 錄相關的程序代碼:#include /頭文件 #include#define uchar unsigned char /宏定義#define uint unsigned intsbit key1=P10; /位聲明 sbit key2=P11;sbi

19、t key3=P12;sbit key4=P13;sbit fmq=P21;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xbf,0x0ff; /數碼管顯示的數值void jia(); /函數聲明 void jian(); uchar table18,table28,table38,table48; /數組定義,數組內含有8個數值uchar shi=12,fen=0,miao=0; /時間顯示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3

20、; /定義全局變量uchar shi4,fen4,miao4;uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;/ 1秒 等時 位閃 次數 校時 鬧1 鬧2 鬧3uint flag2;/ 蜂鳴 void delay(uchar i) / 延時函數,用于動態掃描數碼管 uchar x,y; for(x=i;x0;x-) for(y=120;y0;y-); void init() / 初始化函數 TMOD=0x01; /工作方式1 TH0=0x3c; /定時時間為:50ms(65536-50000)/256 TL0=0x0b0; /(65536

21、-50000)%256 ET0=1; /打開定時器 EA=1; /開總中斷 TR0=1; /啟動定時器 void display() / 顯示子函數,用于顯示時間數值 uchar i,j; if(cnt!=10|wss=0) table10=miao%10; /分離秒的個位與十位 table11=miao/10; else table10=table11=11;if(cnt!=11|wss=0) table13=fen%10; /分離分的個位與十位 table14=fen/10; else table13=table14=11;if(cnt!=12|wss=0) table16=shi%10;

22、 /分離時的個位與十位 table17=shi/10; else table16=table17=11; table12=table15=10; j=0x7f; for(i=0;i=7;i+) /從秒到時的掃描 P3=j; P0=tabletable1i; /顯示數值 delay(10); j=_cror_(j,1); /循環右移 void display1() / 顯示子函數,用于顯示定時1時間 uchar i,j; if(alm1=0) if(cnt!=1|wss=0) table20=miao1%10; /以下含義同上 table21=miao1/10; else table20=tab

23、le21=11; if(cnt!=2|wss=0) table23=fen1%10; table24=fen1/10; else table23=table24=11; if(cnt!=3|wss=0) table26=shi1%10; table27=shi1/10; else table26=table27=11; else table20=table21=table23=table24=table26=table27=10; table22= table25=10; j=0x7f; for(i=0;i=7;i+) P3=j; P0=tabletable2i;delay(10); j=_c

24、ror_(j,1); void display2()/ 顯示子函數,用于顯示定時2時間 uchar i,j; if(alm2=0) if(cnt!=4|wss=0) table30=miao2%10; /以下含義同上 table31=miao2/10; else table30=table31=11; if(cnt!=5|wss=0) table33=fen2%10; table34=fen2/10; else table33=table34=11;if(cnt!=6|wss=0) table36=shi2%10; table37=shi2/10; else table36=table37=1

25、1; else table30=table31=table33=table34=table36=table37=10; table32= table35=10; j=0x7f; for(i=0;i=7;i+) P3=j; P0=tabletable3i;delay(10); j=_cror_(j,1); void display3() / 顯示子函數,用于顯示定時3時間數值 uchar i,j; if(alm3=0) if(cnt!=7|wss=0) table40=miao3%10; /分離秒的個位與十位 table41=miao3/10; else table40=table41=11;i

26、f(cnt!=8|wss=0) table43=fen3%10; /分離分的個位與十位 table44=fen3/10;else table43=table44=11;if(cnt!=9|wss=0) table46=shi3%10; /分離時的個位與十位 table47=shi3/10;else table46=table47=11; else table40=table41=table43=table44=table46=table47=10; table42= table45=10; j=0x7f; /從秒到時的掃描 for(i=0;i=20) /判斷是否到一秒 wss=wss; fla

27、g=0; /到了,則標志位清零 if(cnt1!=0) miao4+; /秒加1 if( miao459) /判斷秒是否到60s miao4=0; /到了,則清零 fen4+; /分加1 if(fen459) /以下含義同上 fen4=0; shi4+; if(shi423) shi4=0; else miao+; /秒加1 if( miao59) /判斷秒是否到60s miao=0; /到了,則清零 fen+; /分加1 if(fen59) /以下含義同上 fen=0; shi+; if(shi23) shi=0; void key_scan()/ 鍵盤掃描子函數 if(key1=0) wh

28、ile(!key1) /防止掉顯 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); cnt+; /記下按鍵key1按下的次數 if(cnt=10&cnt1=0) miao4=miao; fen4=fen;shi4=shi;cnt1+;if(cnt=13) cnt=0; if(cnt1=1) miao=miao4; fen=fen4; shi=sh

29、i4; cnt1=0; if(key2=0) /判斷key2是否按下 while(!key2) /防止掉顯 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); jia(); if(key3=0) /判斷key3是否按下 while(!key3) /防止掉顯 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt

30、=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); jian(); /調用減1子函數 if(key4=0) /判斷key4是否按下 while(!key4) /防止掉 if(cnt=1|cnt=2|cnt=3) alm1=alm1; display1(); if(cnt=4|cnt=5|cnt=6) alm2=alm2; display2(); if(cnt=7|cnt=8|cnt=9) alm3=alm3; display3(); if

31、(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); void jia() / 加1子函數 if(cnt=1) /判斷key1按下的次數是否為1 miao1+; /是,則秒加1 if(miao159) /判斷秒是否大于60,是,則秒清零 miao1=0; if(cnt=2) /以下含意同上 fen1+; if(fen159) fen1=0; if(cnt=3) shi1+; if(shi123) shi1=0; if(cnt=4) miao2+; if(miao259) miao2=0; if(cnt=5) fen2+; if(fen259) fen2=

32、0; if(cnt=6) shi2+; if(shi223) shi2=0; if(cnt=7) miao3+; if(miao359) miao3=0; if(cnt=8) fen3+; if(fen359) fen3=0; if(cnt=9) shi3+; if(shi323) shi3=0; if(cnt=10) miao+; if(miao59) miao=0;cnt1+; if(cnt=11) fen+; if(fen59) fen=0;cnt1+; if(cnt=12) shi+; if(shi23) shi=0;cnt1+; void jian() / 減1子函數 if(cnt=1)/判斷key1按下的次數是否為1,是則秒減1 miao1-; if(miao1=255)/判斷秒是否減到255,是,則秒置59 miao1=59; if(cnt=2)/以下含意同上 fen1-; if(fen1=255) fen1=59; if(cnt=3) shi1-; if(shi1=255) shi1=23; if(cnt=4) miao2-; if(miao2=255) miao2=59; if(cnt=5) fen2-; if(fen2=255) fen2=59; if(cnt=6) shi2-; if(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論