2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  單片機(jī)課程設(shè)計(jì)</b></p><p><b>  定時(shí)鬧鐘設(shè)計(jì)</b></p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  題目: 基于單片機(jī)的定時(shí)鬧鐘 </p>

2、<p>  課程: 單片機(jī)課程設(shè)計(jì) </p><p>  課程設(shè)計(jì)時(shí)間 2013年 10月28 日 至2013年11 月 10 日 共 2 周</p><p>  課程設(shè)計(jì)工作內(nèi)容與基本要求(設(shè)計(jì)要求、設(shè)計(jì)任務(wù)、工作計(jì)劃、所需相關(guān)資料)(紙張不夠可加頁(yè))</p&

3、gt;<p>  1.設(shè)計(jì)要求:利用單片機(jī)AT89C51設(shè)計(jì)定時(shí)鬧鐘,并利用LCD顯示器的背光模塊可以在黑暗的場(chǎng)合下應(yīng)用。時(shí)間到發(fā)出聲音。</p><p>  2. 設(shè)計(jì)任務(wù)與要求</p><p>  2.1系統(tǒng)硬件電路設(shè)計(jì)</p><p>  根據(jù)該系統(tǒng)設(shè)計(jì)的功能要求選擇所用元器件,設(shè)計(jì)硬件電路。要求用Proteus繪制整個(gè)系統(tǒng)電路原理圖。</

4、p><p><b>  2.2軟件設(shè)計(jì)</b></p><p>  根據(jù)該系統(tǒng)要求的功能進(jìn)行軟件設(shè)計(jì),繪制整個(gè)系統(tǒng)的軟件流程圖;根據(jù)流程圖編寫程序并匯編調(diào)試通過;列出軟件清單,軟件清單要求逐條加以注釋。</p><p>  2.3 Proteus仿真</p><p>  用Proteus對(duì)系統(tǒng)軟硬件進(jìn)行仿真調(diào)試并通過。<

5、;/p><p>  2.4 編寫設(shè)計(jì)說明書</p><p>  內(nèi)容包括任務(wù)書、設(shè)計(jì)方案分析、硬件部分設(shè)計(jì)、軟件部分設(shè)計(jì)、調(diào)試結(jié)果整理分析、設(shè)計(jì)調(diào)試的心得體會(huì)等,字?jǐn)?shù)不少于5000字;硬件部分設(shè)計(jì)要繪制整個(gè)系統(tǒng)電路原理圖,對(duì)各部分電路設(shè)計(jì)原理做出說明;軟件設(shè)計(jì)部分要(用visio2002畫圖軟件)繪制整個(gè)系統(tǒng)及各部分的軟件流程圖,列出程序清單,逐條加以注釋,并注明各程序功能塊的功能。</

6、p><p>  3.工作計(jì)劃 </p><p><b>  4.主要參考資料</b></p><p>  單片機(jī)課程設(shè)計(jì)指導(dǎo)書 皮大能 北京理工大學(xué)出版社2012.7</p><p>  8051單片機(jī)實(shí)踐與應(yīng)用 吳金戎 清華大學(xué)出版社2003.8</p><p>  單片機(jī)技術(shù)基

7、礎(chǔ)教程與實(shí)踐 夏路易 電子工業(yè)出版社 2008.1</p><p>  單片機(jī)原理及應(yīng)用張毅剛 高等教育出版社 2012.11</p><p>  基于Proteus的單片機(jī)系統(tǒng)設(shè)計(jì)與仿真實(shí)例 蔣輝平 機(jī)械工業(yè)出版社 </p><p><b>  2007.7</b></p><p><b&

8、gt;  指導(dǎo)老師簽字:</b></p><p>  日 期:</p><p><b>  目錄</b></p><p>  1. LCD電子鬧鐘的特點(diǎn)和功能介紹..............................1</p><p>  2. 設(shè)計(jì)實(shí)現(xiàn)方案................

9、.......................2</p><p>  2.1原理................................................2</p><p>  2.2 原理及工作過程說明.................................2</p><p>  3. 硬件設(shè)計(jì)...................

10、........................4</p><p>  3.1主控芯片AT89C51的設(shè)計(jì)...................................4</p><p>  3.2 時(shí)鐘電路部分設(shè)計(jì).........................................4</p><p>  3.3 LCD顯示電路部分......

11、....................................5</p><p>  3.4啟動(dòng)電路部分........................................7</p><p>  3.5鬧鈴驅(qū)動(dòng)電路..............................................................................

12、...8</p><p>  4. 軟件設(shè)計(jì).....................................................9</p><p>  4.1軟件設(shè)計(jì)概述..............................................9</p><p>  4.2 主函數(shù)的設(shè)計(jì)....................

13、.........................10 4.3.1程序初始化.............................................10</p><p>  4.3.2鬧鐘的實(shí)現(xiàn).......................................10</p><p>  4.3.3顯示程序..........................

14、...............11</p><p>  5.定時(shí)鬧鐘仿真結(jié)果.......................................12</p><p>  電路原理圖及仿真.......................................12</p><p>  設(shè)計(jì)總結(jié)..............................

15、................13</p><p>  參文獻(xiàn)考..............................................14</p><p>  附錄 定時(shí)鬧鐘程序代碼...................................15</p><p>  1、LCD電子鬧鐘的特點(diǎn)和功能介紹</p><

16、p>  時(shí)鐘是將小時(shí)、分鐘、秒鐘顯示于人的肉眼的計(jì)時(shí)裝置。而單片機(jī)模塊中最常見的正是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更長(zhǎng)的使用壽命,因此得到了廣泛的使用。而LCD電子定時(shí)鬧鐘是以單片機(jī)為基礎(chǔ)的數(shù)字電路實(shí)現(xiàn)對(duì)時(shí)、分、秒的數(shù)字顯示的數(shù)字計(jì)時(shí)裝置,它的計(jì)時(shí)周期為24小時(shí),另外應(yīng)有校時(shí)功能和一些顯示日期、鬧鐘等附加功能。一個(gè)基本的數(shù)字鐘電路主要由譯碼顯

17、示器、“時(shí)”,“分”,“秒”,“星期”計(jì)數(shù)器、校時(shí)電路、報(bào)時(shí)電路和振蕩器組成。目前電子鐘廣泛用于各種私人和公眾場(chǎng)合,成為我們生活、工作和學(xué)習(xí)中不可缺少的好幫手。</p><p>  由于時(shí)鐘的實(shí)用性和在人們生活中的重要性,所以嘗試設(shè)計(jì)以單片機(jī)為核心的數(shù)字時(shí)鐘是很有意義的。鐘表原先的報(bào)時(shí)功能已經(jīng)原不能滿足人們?nèi)找嬖鲩L(zhǎng)的要求,現(xiàn)代的電子時(shí)鐘多帶有類似自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、通

18、斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等功能,本設(shè)計(jì)中LCD電子時(shí)鐘采用LCD顯示時(shí)間和日期年月,直觀實(shí)用,而且可以方便的校調(diào),附帶的萬年歷和定時(shí)功能也是很方便和實(shí)用的。</p><p><b>  2、設(shè)計(jì)實(shí)現(xiàn)方案</b></p><p><b>  2.1原理</b></p><p>  本LCD定時(shí)鬧鐘,是以單片機(jī)及

19、外圍接口電路為核心硬件,輔以其他外圍硬件電路,用匯編語言設(shè)計(jì)的程序來實(shí)現(xiàn)的。根據(jù)C51單片機(jī)的外圍接口特點(diǎn)擴(kuò)展相應(yīng)的硬件電路,然后根據(jù)單片機(jī)的指令設(shè)計(jì)出數(shù)字鐘相應(yīng)的軟件,再利用軟件執(zhí)行一定的程序來實(shí)現(xiàn)數(shù)字鐘的功能。由于采用集成芯片性的單片機(jī)來制作電子鐘,這樣設(shè)計(jì)制作簡(jiǎn)單而且功能多、精確度高,也可方便擴(kuò)充其他功能,實(shí)現(xiàn)也十分簡(jiǎn)單。本設(shè)計(jì)是利用AT89C51單片機(jī)為主控芯片,由LCD、晶振、電阻、電容、發(fā)光二極管、開關(guān)、喇叭等元件組成硬件電

20、路,通過編寫軟件程序來實(shí)現(xiàn)和控制的數(shù)字定時(shí)鬧鐘。如圖2.1所示。</p><p><b>  圖2.1系統(tǒng)框架圖</b></p><p>  2.2 原理及工作過程說明</p><p> ?。?)定時(shí)鬧鐘的基本功能如下 :</p><p> ?。╝)啟動(dòng)仿真軟件,使用LCD液晶顯示器來顯示現(xiàn)在的時(shí)間 。</p>

21、;<p>  (b)程序執(zhí)行之后顯示“Time:00:00:00”; 時(shí)間顯示的秒開始變化,并且LED閃爍,表示開始已經(jīng)計(jì)時(shí)。</p><p>  (c)由LED閃動(dòng)來做秒計(jì)數(shù)表示。</p><p> ?。╠)當(dāng)設(shè)定的鬧鐘時(shí)間到達(dá)后,鬧鈴開始發(fā)出“噠噠噠”的聲音。</p><p> ?。?)按鍵功能如下 :</p><p>  

22、按鍵K1設(shè)置現(xiàn)在的時(shí)間和時(shí)調(diào)整;按鍵K2顯示鬧鐘設(shè)置的時(shí)間和分調(diào)整;按鍵K3設(shè)置鬧鈴的時(shí)間和設(shè)置完成;按鍵K4鬧鈴ON/OFF的狀態(tài)設(shè)置,設(shè)置為ON時(shí)連續(xù)三次發(fā)出“嘩”的一聲,設(shè)置為OFF發(fā)出“嘩”的一聲和鬧鐘時(shí)間到時(shí),發(fā)出一陣聲響,按下本鍵可以停止聲響。</p><p> ?。?)調(diào)整計(jì)時(shí)器時(shí)間如下 :</p><p>  按下K1鍵,然后按K1調(diào)整小時(shí),K2調(diào)整分鐘,按下K3表示時(shí)間設(shè)

23、置完成。</p><p> ?。?)調(diào)整鬧鐘時(shí)間設(shè)置如下 :</p><p>  按下K3開始鬧鐘設(shè)置,LCD下一行顯示“Alarm:00:00”按下K1設(shè)置小時(shí),按一下K2設(shè)置分鐘,再次按下K3設(shè)置完成,并且設(shè)置時(shí)間消失,當(dāng)再次按一下K2時(shí)“Alarm:00:00再次顯示并馬上消失。按一下K4關(guān)閉鬧鐘,再次按下打開鬧鐘。</p><p><b>  3、

24、硬件設(shè)計(jì)</b></p><p>  3.1 主控芯片AT89C51的設(shè)計(jì)</p><p>  在本LCD電子鬧鐘設(shè)計(jì)中就是采用利用我們熟悉的AT89C51單片機(jī)為主控芯片。AT89C51單片機(jī)由微處理器,存儲(chǔ)器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲(chǔ)器在物理上設(shè)計(jì)成程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)獨(dú)立的空間,片內(nèi)程序存儲(chǔ)器的容量為4KB,片內(nèi)數(shù)據(jù)存儲(chǔ)器為128個(gè)字節(jié)。

25、89C51單片機(jī)有4個(gè)8位的并行I/O口:P0口,P1口,P2口和P3口。各個(gè)接口均由接口鎖存器,輸出驅(qū)動(dòng)器,和輸入緩沖器組成。P1口是唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí),P0可作為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為A

26、T89C51的一些特殊功能口,同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào).</p><p>  3.2 時(shí)鐘電路部分設(shè)計(jì)</p><p>  AT89C51系列的單片機(jī)的時(shí)鐘方式分為內(nèi)部方式和外部方式。內(nèi)部方式就是在單片機(jī)的XTAL1和XTAL2的兩引腳外接晶振,就夠成了自激振蕩器在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號(hào)。外部時(shí)鐘方式是把外部已經(jīng)有的時(shí)鐘信號(hào)引入到單片機(jī)內(nèi)部。時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著

27、非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間。</p><p>  本LCD電子鬧鐘設(shè)計(jì)是采用內(nèi)部時(shí)鐘方式,用一個(gè)12MHz晶振和兩個(gè)30Pf瓷片電容組成,為單片機(jī)提供標(biāo)準(zhǔn)時(shí)鐘,其中兩個(gè)瓷片電容起微調(diào)作用.其電路圖見圖3.1。

28、</p><p><b>  圖3.1時(shí)鐘電路</b></p><p>  而之所以采用高性能的振蕩電路,因?yàn)椋?lt;/p><p>  1.單片機(jī)電子鐘的計(jì)時(shí)脈沖基準(zhǔn)是由外部晶振的頻率經(jīng)過12分頻后提供,采用內(nèi)部的定時(shí)/計(jì)數(shù)器來實(shí)現(xiàn)計(jì)時(shí)功能。所以,外接晶振頻率精確度直接影響電子鐘計(jì)時(shí)的準(zhǔn)確性。 </p><p>  2.

29、單片機(jī)電 子鐘利用內(nèi)部定時(shí)/計(jì)數(shù)器溢出產(chǎn)生中斷(12M晶振一般為50ms)再乘以相應(yīng)的倍率來實(shí)現(xiàn)秒、分、時(shí)的轉(zhuǎn)換。大家都知道從定時(shí)/計(jì)數(shù)器產(chǎn)生中斷請(qǐng)求到響 應(yīng)中斷需要3-8個(gè)機(jī)器周期,定時(shí)中斷子程序中的數(shù)據(jù)入棧和重裝定時(shí)/計(jì)數(shù)器的初值還需要占用數(shù)個(gè)機(jī)器周期,還有從中斷入口轉(zhuǎn)到中斷子程序也要占用一定的 機(jī)器周期。</p><p>  3.3 LCD顯示電路部分</p><p>  為了獲得

30、更好的效果本設(shè)計(jì)并沒有采用常見的LED,而是采用了型號(hào)為1602的 LCD。LCD有LED數(shù)碼顯示更好的更的直觀效果,也更加經(jīng)久耐用。液晶顯示模塊體積小功耗低、顯示內(nèi)容豐富,現(xiàn)在字符型液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件之一了。本LCD是2行16列液晶 可顯示2行16列英文字符,有8位數(shù)據(jù)總線D0-D7,RS,R/W,EN三個(gè)控制端口(共14線),工作電壓為5V。沒背光,和常用的1602B功能和引腳一樣(除了調(diào)背光的二

31、個(gè)線腳). 該模塊也可只用D4-D7作為四位數(shù)據(jù)分兩次傳送。這樣的話可以節(jié)省MCU的I/O口資源。LED的現(xiàn)實(shí)電路如圖3.2.</p><p><b>  圖3.2顯示電路圖</b></p><p>  引腳說明,見表3.1。VDD:電源正極,4.5-5.5V,通常使用5V電壓;</p><p>  VL:LCD對(duì)比度調(diào)節(jié)端,電壓調(diào)節(jié)范圍為0-

32、5V。接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,但對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,因此通常使用一個(gè)10K的電位器來調(diào)整對(duì)比度或者直接串接一個(gè)電阻到地;</p><p>  RS:MCU寫入數(shù)據(jù)或者指令選擇端。MCU要寫入指令時(shí),使RS為低電平;MCU要寫入數(shù)據(jù)時(shí),使RS為高電平;</p><p>  R/W:讀寫控制端。R/W為高電平時(shí),讀取數(shù)據(jù);R/W為低電平時(shí),寫入數(shù)據(jù);</p&g

33、t;<p>  E:LCD模塊使能信號(hào)控制端。寫數(shù)據(jù)時(shí),需要下降沿觸發(fā)模塊。</p><p>  D0-D7:8位數(shù)據(jù)總線,三態(tài)雙向。如果MCU的I/O口資源緊張的話,該模塊也可以只使用4位數(shù)據(jù)線D4-D7接口傳送數(shù)據(jù)。本充電器就是采用4位數(shù)據(jù)傳送方式;</p><p>  BLA: LED背光正極。需要背光時(shí),BLA串接一個(gè)限流電阻接VDD,BLK接地,實(shí)測(cè)該模塊的背光電流

34、為50mA左右;</p><p>  BLK: LED背光地端.</p><p>  表3.1 LCD顯示屏引腳說明</p><p><b>  3.4啟動(dòng)電路部分</b></p><p>  在單片機(jī)應(yīng)用系統(tǒng)中,有時(shí)只需要幾個(gè)簡(jiǎn)單的按鍵向系統(tǒng)輸入信息。這時(shí),可將每個(gè)按鍵接在一根I/O接口線上,這種方式的連接稱為獨(dú)立式

35、鍵盤。每個(gè)獨(dú)立式按鍵單獨(dú)占有一根 I/O接口線,每根I/O接口線的工作狀態(tài)不 會(huì)影響到其他 I/O接口線 。這種按鍵接口電路配置靈活,硬件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O接口線,I/O接口線浪費(fèi)較大。故只在按鍵數(shù)量不多時(shí)采用這種按鍵電路。啟動(dòng)電路如圖3.3. </p><p><b>  圖 3.3啟動(dòng)電路</b></p><p><

36、b>  3.5鬧鈴驅(qū)動(dòng)電路</b></p><p>  發(fā)音部分是通過引腳P2.5連接一個(gè)電阻驅(qū)動(dòng)蜂鳴器工作,再通過軟件這時(shí)產(chǎn)生等時(shí)時(shí)間方波驅(qū)動(dòng)蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。電路如圖3.4.</p><p><b>  圖3.4鬧鐘電路圖</b></p><p><b>  4、軟件設(shè)計(jì)&

37、lt;/b></p><p>  4.1 軟件設(shè)計(jì)概述</p><p>  這里用匯編的單片機(jī)程序構(gòu)成了本LCD電子鬧鐘的軟件系統(tǒng)。該程序?qū)崿F(xiàn)時(shí)間及定時(shí)(時(shí)間以0點(diǎn)0分0秒為基準(zhǔn)計(jì)算,鬧鈴定時(shí)以0時(shí)0分為基準(zhǔn)計(jì)算)的顯示,有外中斷0和五個(gè)開關(guān)實(shí)現(xiàn)校時(shí),鬧鐘功能。其中程序的晶振頻率為12MHz,最小計(jì)時(shí)單位為1/20秒。</p><p>  主芯片p0.1-p

38、0.7輸出數(shù)據(jù)到LCD數(shù)據(jù)總線,p3.0-2.2輸出LCD控制信號(hào),P2.1輸出聲音信號(hào),.P1.0-P1.3輸入外部控制信號(hào),整個(gè)軟件系統(tǒng)也是根據(jù)這個(gè)關(guān)系連接成一個(gè)完整的系統(tǒng)。</p><p>  4.2 主函數(shù)的設(shè)計(jì)</p><p>  本LCD電子鬧鐘的的主程序流程圖如圖4.1所示:</p><p>  圖4.1主程序流程圖 </p>&l

39、t;p><b>  系統(tǒng)主程序見附錄</b></p><p>  4.3.1 程序初始化</p><p>  在系統(tǒng)開始上電時(shí),需要.首先初始化液晶:</p><p>  void TimeInit()</p><p><b>  {</b></p><p>  wr

40、ite_com(0x01); //初始化1602液晶</p><p>  write_com(0x80); //設(shè)置現(xiàn)實(shí)初始坐標(biāo)</p><p>  for(num=0;num<9;num++) //顯示年月日</p><p><b>  {</b></p><p>  write_date(tab

41、le[num]); </p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  write_com(0x80+0x40+6); //寫出時(shí)間顯示部分的兩個(gè)冒號(hào)</p><p>  write_date(':');<

42、/p><p><b>  delay(5);</b></p><p>  write_com(0x80+0x40+9);</p><p>  write_date(':');</p><p><b>  delay(5);</b></p><p>  write_

43、sfm(4,shi); //分別送去液晶顯示</p><p>  write_com(0x80+0x40+4);</p><p>  write_sfm(7,fen);</p><p>  write_com(0x80+0x40+7);</p><p>  write_sfm(10,miao);</p><p>

44、;  write_com(0x80+0x40+10)</p><p>  4.3.2 鬧鐘的實(shí)現(xiàn)</p><p>  鬧鐘功能的實(shí)現(xiàn)涉及到兩個(gè)方面:鬧鈴時(shí)間設(shè)定和是否鬧鈴判別與相應(yīng)處理。鬧鈴時(shí)間設(shè)定模塊的設(shè)計(jì)可參照時(shí)間設(shè)定模塊,這里著重闡述鬧鈴判別與處理模塊的設(shè)計(jì)問題。鬧鈴判別與.鬧鈴處理的關(guān)鍵在于判別何時(shí)要進(jìn)行鬧鈴。當(dāng)時(shí)十位、時(shí)個(gè)位、分十位、分個(gè)位中任一位發(fā)生改變(進(jìn)位)時(shí),就必須進(jìn)行

45、鬧鈴判別。程序設(shè)計(jì)思想如圖4.2。</p><p>  圖4.2 鬧鈴流程圖 </p><p><b>  主程序見附錄</b></p><p>  4.3.3 顯示程序</p><p>  顯示程序包括時(shí)鐘顯示和定時(shí)顯示程序。具體程序見附錄。</p><p>  液晶顯示模塊是一個(gè)慢顯示器件,

46、所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表4.1是TC1602EL液晶模塊的內(nèi)部顯示地址。</p><p>  表4.1液晶模塊內(nèi)部顯示地址</p><p><b>  主程序見附錄</b></p><p><b>  定時(shí)鬧鐘仿真

47、結(jié)果</b></p><p><b>  電路原理圖及仿真</b></p><p>  電路總體設(shè)計(jì)圖及仿真如下圖5.1</p><p>  圖5.1電路總體設(shè)計(jì)圖</p><p>  此定時(shí)鬧鐘設(shè)計(jì)是利用Proteus仿真軟件進(jìn)行仿真,基本上實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能。</p><p&

48、gt;  啟動(dòng)仿真軟件,使用LCD液晶顯示器來顯示現(xiàn)在的時(shí)間 。程序執(zhí)行之后顯示“Time:00:00:00”; 時(shí)間顯示的秒開始變化,并且LED閃爍,表示開始已經(jīng)計(jì)時(shí)。由LED閃動(dòng)來做秒計(jì)數(shù)表示。當(dāng)設(shè)定的鬧鐘時(shí)間到達(dá)后,鬧鈴開始發(fā)出“噠噠噠”的聲音。按鍵K1設(shè)置現(xiàn)在的時(shí)間和時(shí)調(diào)整;按鍵K2顯示鬧鐘設(shè)置的時(shí)間和分調(diào)整;按鍵K3設(shè)置鬧鈴的時(shí)間和設(shè)置完成;按鍵K4鬧鈴ON/OFF的狀態(tài)設(shè)置,設(shè)置為ON時(shí)連續(xù)三次發(fā)出“嘩”的一聲,設(shè)置為OFF

49、發(fā)出“嘩”的一聲和鬧鐘時(shí)間到時(shí),發(fā)出一陣聲響,按下本鍵可以停止聲響。按下K1鍵,然后按K1調(diào)整小時(shí),K2調(diào)整分鐘,按下K3表示時(shí)間設(shè)置完成。按下K3開始鬧鐘設(shè)置,LCD下一行顯示“Alarm:00:00”按下K1設(shè)置小時(shí),按一下K2設(shè)置分鐘,再次按下K3設(shè)置完成,并且設(shè)置時(shí)間消失,當(dāng)再次按一下K2時(shí)“Alarm:00:00再次顯示并馬上消失。按一下K4關(guān)閉鬧鐘,再次按下打開鬧鐘。</p><p><b>

50、;  總結(jié)</b></p><p>  在這段時(shí)間里,我學(xué)到了很多知識(shí)也有很多感受,不僅使我對(duì)模擬電子及其它專業(yè)知識(shí)有了更深刻的了解,而且我開始了獨(dú)立的學(xué)習(xí)和實(shí)驗(yàn)查看相關(guān)資料和書籍,讓自己頭腦中模糊的概念逐漸清晰,每一次改進(jìn)都是我學(xué)習(xí)的收獲,同時(shí)使我將理論應(yīng)用于實(shí)際。我不但回顧了以前所學(xué)的電路原理的基礎(chǔ)知識(shí),而且還學(xué)到了一些新知識(shí)。最重要的是我深刻體會(huì)到要做好一件完整的事情,要有系統(tǒng)的思維方式和邏輯方

51、法,要耐心的面對(duì)所有問題、要善于用應(yīng)用各種資源來充實(shí)和滿足自己。</p><p>  大學(xué)生活即將結(jié)束,因此我特別珍惜這最后的時(shí)光和這次自己動(dòng)手的機(jī)會(huì),我會(huì)盡力的這次設(shè)計(jì)做到更好。雖然我的論文作品還不是很成熟,還有很多不足之處。但論文中的每一個(gè)字都是我用心寫到電腦里,每一幅圖片都是我翻閱大量書籍、請(qǐng)教很多老師并經(jīng)過自己的思考畫出來的。這次做設(shè)計(jì)的經(jīng)歷讓我終生受益、我感受到做設(shè)計(jì)是要用心去做的一件事,沒有學(xué)習(xí)就不可

52、能有研究的能力,這次的經(jīng)歷能在以后的學(xué)習(xí)、工作中激勵(lì)我繼續(xù)進(jìn)步。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]張毅剛,彭喜元. 單片機(jī)原理與應(yīng)用設(shè)計(jì). 北京:電子工業(yè)出版社,2008.4</p><p>  [2]徐錚穎,孫海維.Protel 99 se EDA技術(shù)及應(yīng)用.北京:機(jī)械工業(yè)出版社,2012.2 <

53、/p><p>  [3]譚浩強(qiáng).C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,2005</p><p>  [4]劉文濤.單片機(jī)應(yīng)用開發(fā)實(shí)例.北京:清華大學(xué)出版社,2005.9</p><p>  [5]高衛(wèi)東,辛友順,韓彥征.51單片機(jī)原理與實(shí)踐.北京:北京航空航天大學(xué)出版社.2008.1</p><p>  附錄 鬧定時(shí)鐘的控制程序代碼<

54、;/p><p>  #include<reg52.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit key1=P1^0; </p><p>  sbit key2=P1^

55、1;</p><p>  sbit key3=P1^2;</p><p>  sbit key4=P1^3;</p><p>  sbit lcden=P2^2; </p><p>  sbit lcdrs=P2^0;</p><p>  sbit lcdrw=P2^1;</p>&l

56、t;p>  sbit jdq=P2^3;</p><p>  sbit led=P2^4; </p><p>  sbit sound=P2^5;</p><p>  int a,b,i,min,hour,minge,minshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahourshi,se

57、c,secshi,secge;</p><p>  //unsigned char code x[]={0xFF,0xC7,0x83,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF};</p><p>  //unsigned char code z[]={0xFF,0xE3,0xC1,0x80,0x00,0

58、x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x7F,0xFF,0xFF};</p><p>  uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'};

59、</p><p>  uchar code table2[]="Time:00:00:00 ";</p><p>  uchar code Alarm_1[]="Alarm:00:00 ";</p><p>  uchar code nul[]=" ";<

60、;/p><p>  uchar num1,num2;</p><p>  bit flag=0;</p><p>  void delay(unsigned int xms)//延時(shí)程序</p><p><b>  {</b></p><p>  uint i,j; </p&g

61、t;<p>  for(i=xms;i>0;i--)</p><p>  for(j=124;j>0;j--);</p><p><b>  }</b></p><p>  void write_com(uchar com) //LCD命令控制,寫指令函數(shù)</p><p><b>

62、  {</b></p><p>  delay(5) ;</p><p><b>  lcdrs=0;</b></p><p><b>  P0=com;</b></p><p><b>  delay(5);</b></p><p><

63、;b>  lcden=1;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void write_data(uchar date

64、) //LCD數(shù)據(jù)控制,寫數(shù)據(jù)函數(shù)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  lcdrs=1;</b></p><p><b>  P0=date;</b></

65、p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=0;</b></p><p>&l

66、t;b>  }</b></p><p>  void time()//設(shè)置時(shí)間函數(shù)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>&l

67、t;p>  if(key1==0) </p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key1==0)</p><p><b>  {</b></p><p>  if(

68、hour==23) //"時(shí)"設(shè)置</p><p><b>  hour=0;</b></p><p><b>  else</b></p><p><b>  hour++;</b></p><p>  hourge=hour%10;</p&

69、gt;<p>  hourshi=hour/10;</p><p>  write_com(0x0f);</p><p><b>  delay(2);</b></p><p>  write_com(0x80+6);</p><p>  write_data(table1[hourge]);

70、 //"時(shí)"個(gè)位寫入LCD第二行第6位</p><p><b>  delay(5);</b></p><p>  write_com(0x80+5);</p><p><b>  delay(2);</b></p><p>  write_data(table1[hou

71、rshi]); //"時(shí)"十位寫入LCD第二行第5位</p><p>  while(!key1);</p><p>  //delay(1);</p><p><b>  }</b></p><p><b>  }</b></p><

72、p>  if(key2==0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key2==0)</p><p><b>  {</b></p><p>  if(min==59)//"分

73、"設(shè)置</p><p><b>  min=0;</b></p><p><b>  else</b></p><p><b>  min++;</b></p><p>  minge=min%10;</p><p>  minshi=min/

74、10;</p><p>  write_com(0x0f);</p><p>  write_com(0x80+9);</p><p>  write_data(table1[minge]); //"分"個(gè)位寫入LCD第二行第9位</p><p><b>  delay(1

75、);</b></p><p>  write_com(0x80+8);</p><p>  write_data(table1[minshi]); //"分"十位寫入LCD第二行第8位</p><p><b>  delay(1);</b></p><p&g

76、t;  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delay(10);</p&

77、gt;<p>  if(key3==0)</p><p><b>  {</b></p><p>  write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍</p><p>  TR1=1; //定時(shí)計(jì)數(shù)器1啟動(dòng)</p><p>  whi

78、le(!key3);</p><p>  break; //key3松開時(shí),顯示時(shí)間"時(shí)""分"位均已設(shè)置完畢</p><p><b>  }</b></p><p><b>  }</b></p><p><b&

79、gt;  }</b></p><p><b>  }</b></p><p>  void alarm()//設(shè)置鬧鐘時(shí)間函數(shù)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p&

80、gt;<b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key1==0)</p><p><b>  {</b></p&g

81、t;<p>  if(ahour==23)//鬧鐘"時(shí)"設(shè)置</p><p><b>  ahour=0;</b></p><p><b>  else</b></p><p><b>  ahour++;</b></p><p>  

82、ahourge=ahour%10;</p><p>  ahourshi=ahour/10;</p><p>  write_com(0x0f);</p><p>  //delay(2);</p><p>  write_com(0x80+0x40+8);</p><p>  write_data(':

83、9;);</p><p>  write_com(0x80+0x40+7);</p><p>  write_data(table1[ahourge]);</p><p><b>  delay(1);</b></p><p>  write_com(0x80+0x40+6);</p><p> 

84、 //delay(2);</p><p>  write_data(table1[ahourshi]);</p><p><b>  delay(1);</b></p><p>  while(!key1);</p><p><b>  }</b></p><p><b

85、>  }</b></p><p>  if(key2==0) //鬧鐘"分"設(shè)置</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key2==0)</p><p><b

86、>  {</b></p><p>  if(amin==59)</p><p><b>  amin=0;</b></p><p><b>  else</b></p><p><b>  amin++;</b></p><p&g

87、t;  aminge=amin%10;</p><p>  aminshi=amin/10;</p><p>  write_com(0x0f);</p><p>  //delay(2);</p><p>  write_com(0x80+0x40+10);</p><p>  write_data(table1[a

88、minge]);</p><p><b>  delay(1);</b></p><p>  write_com(0x80+0x40+9);</p><p>  //delay(2);</p><p>  write_data(table1[aminshi]);</p><p><b>

89、;  delay(1);</b></p><p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p>  { flag=~flag;</

90、p><p>  delay(10);</p><p>  if(key3==0)</p><p><b>  {</b></p><p>  write_com(0x0c);</p><p>  write_com(0x80+0x40);</p><p>  for(i=0;i

91、<11;i++)</p><p>  write_data(nul[i]);</p><p>  while(!key3);</p><p>  break; //設(shè)置結(jié)束,此時(shí)LCD第二行無數(shù)據(jù)顯示,只有第一行有時(shí)間顯示</p><p><b>  }</b></p>

92、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void keyscan()//鍵盤掃描</p><p><b>  {</b></p>

93、<p>  if(key1==0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key1==0)</p><p><b>  {</b></p><p>  while(!key1);

94、 //key1鍵松開后執(zhí)行下一行程序</p><p>  time(); //調(diào)用time()函數(shù),即時(shí)間設(shè)置</p><p><b>  }</b></p><p><b>  } </b></p><p>  else if(key2==0)</p&

95、gt;<p><b>  {</b></p><p>  delay(10);</p><p>  if(key2==0)</p><p><b>  {</b></p><p>  while(!key2)</p><p><b>  {</b

96、></p><p>  ahourge=ahour%10;</p><p>  ahourshi=ahour/10;</p><p>  write_com(0x80+0x40+7);</p><p>  write_data(table1[ahourge]);</p><p><b>  delay(

97、5);</b></p><p>  write_com(0x80+0x40+6);</p><p><b>  delay(2);</b></p><p>  write_data(table1[ahourshi]);</p><p>  aminge=amin%10;</p><p>

98、;  aminshi=amin/10;</p><p>  write_com(0x80+0x40+10);</p><p>  write_data(table1[aminge]);</p><p><b>  delay(5);</b></p><p>  write_com(0x80+0x40+9);</p&

99、gt;<p><b>  delay(2);</b></p><p>  write_data(table1[aminshi]);</p><p>  write_com(0x80+0x40);</p><p>  for(i=0;i<11;++i)</p><p>  write_data(Alar

100、m_1[i]); //顯示鬧鐘設(shè)置的時(shí)間</p><p><b>  }</b></p><p>  write_com(0x80+0x40);</p><p>  for(i=0;i<11;i++)</p><p>  write_data(nul[i]);

101、 //key2松開后,LCD只有第一行顯示時(shí)間,鬧鐘設(shè)置時(shí)間不顯示</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(key3==0)</p><p><b>  {</b></p>

102、<p>  delay(10);</p><p>  if(key3==0)</p><p><b>  {</b></p><p>  while(!key3); //表示鬧鐘時(shí)間設(shè)置退出</p><p>  ahourge=ahour%10;</p><p

103、>  ahourshi=ahour/10;</p><p>  write_com(0x80+0x40+7);</p><p>  write_data(table1[ahourge]);</p><p><b>  delay(5);</b></p><p>  write_com(0x80+0x40+6);&l

104、t;/p><p><b>  delay(2);</b></p><p>  write_data(table1[ahourshi]);</p><p>  aminge=amin%10;</p><p>  aminshi=amin/10;</p><p>  write_com(0x80+0x40

105、+10);</p><p>  write_data(table1[aminge]);</p><p><b>  delay(5);</b></p><p>  write_com(0x80+0x40+9);</p><p><b>  delay(2);</b></p><p

106、>  write_data(table1[aminshi]);</p><p>  write_com(0x80+0x40);</p><p>  for(i=0;i<11;++i)</p><p>  write_data(Alarm_1[i]);//顯示鬧鐘設(shè)置時(shí)間</p><p>  alarm();

107、 //調(diào)用鬧鐘時(shí)間設(shè)置函數(shù) </p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(key4==0)//以下進(jìn)行鬧鈴開關(guān)的設(shè)置</p><p><b>  delay(5);</b>&l

108、t;/p><p>  if(key4==0) </p><p><b>  {</b></p><p>  while(!key4);</p><p><b>  a=a+1;</b></p><p>  if(a%2==0) //鬧鐘"on"<

109、;/p><p><b>  {</b></p><p>  for(b=0;b<6;b++)</p><p><b>  {</b></p><p>  sound=~sound; //蜂鳴器發(fā)出3次"嘩"的響聲</p><p>  dela

110、y(200);</p><p><b>  }</b></p><p><b>  sound=1;</b></p><p><b>  }</b></p><p>  else if(a%2==1) //鬧鐘"off"</p><

111、;p><b>  {</b></p><p>  sound=0; //蜂鳴器發(fā)出1次"嘩"的響聲</p><p>  delay(300);</p><p><b>  sound=1;</b></p><p>  delay(30

112、0);</p><p><b>  }</b></p><p><b>  sound=1;</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void lcd_init(

113、) //LCD初始化函數(shù)</p><p><b>  {</b></p><p><b>  lcden=0;</b></p><p><b>  lcdrw=0;</b></p><p>  write_com(0x38); //設(shè)置8位格式,2行,5×

114、7</p><p>  write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍</p><p>  write_com(0x06); //設(shè)定輸入方式,增量不轉(zhuǎn)移</p><p>  write_com(0x01); //清除屏幕顯示</p><p><b>  delay(2);</b></p

115、><p>  write_com(0x80);</p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p><p>  write_data(table2[i]); //寫入顯示時(shí)間數(shù)據(jù)</p><p><b>  delay(1);<

116、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void judge()</p><p><b>  {</b></p><p>  if(sec==60)</p><

117、;p><b>  {min++;</b></p><p><b>  sec=0;</b></p><p><b>  }</b></p><p>  if(min==60)</p><p><b>  {</b></p><p&

118、gt;<b>  hour++;</b></p><p><b>  min=0;</b></p><p><b>  }</b></p><p>  if(hour==24)</p><p><b>  hour=0;</b></p>&l

119、t;p><b>  }</b></p><p>  void init()//AT89C51初始化函數(shù)</p><p><b>  {</b></p><p>  key1=1;key2=1;key3=1;key4=1;sec=0;a=0;sound=1;amin=-1; //四個(gè)按鍵均未按下,鬧鐘時(shí)間&qu

120、ot;分"的初值為1(防止仿真圖剛啟動(dòng)時(shí),就達(dá)到鬧鐘時(shí)間,蜂鳴器發(fā)出響聲)</p><p><b>  //led=1;</b></p><p>  TMOD=0x10; //定時(shí)計(jì)數(shù)器T1、T2均工作在方式1</p><p><b>  TH1=0x3C;</b></p><

121、p>  TL1=0xB0; //計(jì)數(shù)初值為15536</p><p><b>  EA=1;</b></p><p><b>  ET1=1;</b></p><p>  TR1=1; //定時(shí)計(jì)數(shù)器T1啟動(dòng)</p><p><b>  }&l

122、t;/b></p><p>  void equa()</p><p><b>  {</b></p><p>  if(amin==min&&ahour==hour&&a%2==0) //顯示時(shí)間與鬧鐘設(shè)置時(shí)間完全一樣且鬧鐘"on"</p><p><

123、b>  {</b></p><p>  jdq=0; //P2^3口的電位置0,繼電器啟動(dòng),外部LED-GREEN燈電路導(dǎo)通</p><p>  sound=~sound; //蜂鳴器發(fā)出"嘩嘩嘩"響聲</p><p><b>  }</b><

124、/p><p>  else jdq=1; </p><p><b>  }</b></p><p>  void led1() interrupt 3//LED1中斷函數(shù)</p><p><b>  {</b></p><p><b>  TL1=0xB0;&l

125、t;/b></p><p><b>  TH1=0x3C;</b></p><p><b>  if(flag)</b></p><p>  equa(); </p><p><b>  num1++;</b></p><p><b&g

126、t;  num2++;</b></p><p>  if(num2>=20)</p><p><b>  {sec++;</b></p><p><b>  num2=0;</b></p><p><b>  judge();</b></p>&

127、lt;p><b>  }</b></p><p>  if(num1==10) //計(jì)時(shí)10次50ms,即500ms</p><p><b>  {</b></p><p><b>  num1=0;</b></p><p>  led=~led;//P2^4口電位取

128、反,LED燈亮</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main() //主函數(shù)</p><p><b>  {</b></p><p>  lcd_init(); //調(diào)用LCD

129、初始化函數(shù)</p><p>  init(); //調(diào)用AT89C51初始化函數(shù)</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan(); //調(diào)用掃描函數(shù)</p><p>  //顯示時(shí)

130、間"秒"加1</p><p>  minge=min%10;</p><p>  minshi=min/10;</p><p>  write_com(0x80+9);</p><p>  write_data(table1[minge]);</p><p><b>  delay(5);

131、</b></p><p>  write_com(0x80+8);</p><p>  write_data(table1[minshi]);</p><p>  hourge=hour%10;</p><p>  hourshi=hour/10;</p><p>  write_com(0x80+6);&

132、lt;/p><p>  write_data(table1[hourge]);</p><p><b>  delay(5);</b></p><p>  write_com(0x80+5);</p><p>  write_data(table1[hourshi]);</p><p>  write

133、_com(0x80+7);</p><p>  write_data(':');</p><p><b>  delay(5);</b></p><p>  write_com(0x80+10);</p><p>  write_data(':');</p><p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論