

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于單片機(jī)的電子鬧鐘的設(shè)計(jì)</p><p> 摘要:本設(shè)計(jì)主要為實(shí)現(xiàn)一款可正常顯示時(shí)鐘/日歷、帶有定時(shí)鬧鈴功能的電子鬧鐘。當(dāng)前電子鐘開發(fā)手段采用了較多的分立元器件,不僅占用很大空間而且利用率比較低。單片機(jī)是集CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多種接口于一體的微控制器。 它體積小、成本低、功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動(dòng)化上。本設(shè)計(jì)應(yīng)用單片機(jī)STC12C5A16AD芯片作為核心,由
2、LCD1602液晶屏顯示,使用DS1302實(shí)時(shí)時(shí)鐘日歷芯片完成時(shí)鐘/日歷的基本功能。這種實(shí)現(xiàn)方法的優(yōu)點(diǎn)是電路簡單,性能可靠,實(shí)時(shí)性好,時(shí)間精度高,操作簡單,編程容易。 </p><p> 關(guān)鍵詞:電子鬧鐘,單片機(jī),C語言編程</p><p><b> 1 緒論</b></p><p> 單片機(jī)是微型機(jī)的一個(gè)主要分支,就其組成和功能而言
3、,一塊單片機(jī)芯片就是一臺(tái)計(jì)算機(jī)。</p><p> 單片機(jī)具有如下特點(diǎn):</p><p> 集成度高、體積小、有很高的可靠性;有優(yōu)異的性能價(jià)格比;</p><p><b> 控制功能強(qiáng);</b></p><p> 低功耗、低電壓,便于生產(chǎn)便攜式產(chǎn)品;</p><p> 外部總線增加了I2
4、C、SPI等串行總線方式,進(jìn)一步縮小了體積,簡化了結(jié)構(gòu);</p><p> 單片機(jī)的系統(tǒng)擴(kuò)展、系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng)。</p><p> 所以單片機(jī)的應(yīng)用非常廣泛,在智能儀表、機(jī)電一體化、實(shí)時(shí)控制、分布式多機(jī)系統(tǒng)以及人們的生活中均有用武之地。單片機(jī)應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思路和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功
5、能,現(xiàn)在已能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種用軟件代替硬件的控制技術(shù),是對(duì)生產(chǎn)控制技術(shù)的一次革命。</p><p> 利用單片機(jī)的智能性,可方便地實(shí)現(xiàn)具有智能的電子鐘設(shè)計(jì)。單片機(jī)均具有時(shí)鐘振蕩系統(tǒng),利用系統(tǒng)時(shí)鐘借助微處理器的定時(shí)器/計(jì)數(shù)器可實(shí)現(xiàn)電子鐘功能。然而系統(tǒng)時(shí)鐘誤差較大,電子鐘的積累誤差也可能較大,所以可以通過誤差修正軟件加以修正,或者在設(shè)計(jì)中加入高精度時(shí)鐘日歷芯片,以精確時(shí)間。另外很多功能不同的單片機(jī)
6、是兼容的,這就更便于實(shí)現(xiàn)產(chǎn)品的多功能性。由于單片機(jī)具有貨源充足、價(jià)格低廉,可軟硬件結(jié)合使用,能夠較方便的實(shí)現(xiàn)系統(tǒng)的多功能性,性價(jià)比高等諸多優(yōu)點(diǎn),故采用單片機(jī)作為本設(shè)計(jì)的硬件基礎(chǔ)。</p><p> 2 基于單片機(jī)的電子鬧鐘硬件設(shè)計(jì)</p><p> 2.1 IC芯片選擇</p><p> 2.1.1微處理器選擇</p><p>
7、STC12 系列單片機(jī)簡要介紹:</p><p> 1. STC12系列單片機(jī)為增強(qiáng)型 8051 芯片,1T,單時(shí)鐘/ 機(jī)器周期,指令代碼完全兼容傳統(tǒng)8051單片機(jī)。2. 工作電壓: STC12C5410AD 系列工作電壓:5.5V - 3.8V(5V 單片機(jī))/3.8V - 2.4V(3V 單片機(jī))STC12C2052AD 系列工作電壓:5.5V - 3.4V(5V 單片機(jī))/3.8V - 2
8、.4V(3V 單片機(jī),可到2V)3. 工作頻率范圍:0 - 35 MHz,相當(dāng)于普通8051 的 0~420MHz.實(shí)際工作頻率可達(dá)48MHz4. 用戶應(yīng)用程序空間12K / 10K / 8K / 6K / 4K / 2K / 1K 字節(jié)5. 片上集成 512 字節(jié) RAM(STC12C5410AD 系列), STC12C2052AD 系列單片機(jī)為256 字節(jié)RAM6. 通用I/O 口(27/23/15 個(gè)),復(fù)位后為: 準(zhǔn)雙向
9、口/ 弱上拉(普通8051 傳統(tǒng)I/O 口)可設(shè)置成四種模式:準(zhǔn)雙向口/ 弱上拉,推挽/ 強(qiáng)上拉,僅為輸入/ 高阻,開漏每個(gè)I/O 口驅(qū)動(dòng)能力均可達(dá)到20mA,但整個(gè)芯片最大不得超過55mA7. ISP</p><p> 圖2.1 STC12C5A16AD芯片PDIP封裝引腳圖</p><p> 2.1.2 常用時(shí)鐘日歷芯片比較</p><p> 在電
10、子鬧鐘設(shè)計(jì)中,常用的實(shí)時(shí)時(shí)鐘芯片有DS12887、DS1216、DS1643、DS1302。每種芯片的主要時(shí)鐘功能基本相同,只是在引腳數(shù)量、備用電池的安裝方式、計(jì)時(shí)精度和擴(kuò)展功能等方面略有不同。DS12887與DS1216芯片都有內(nèi)嵌式鋰電池作為備用電池; X1203引腳少,沒有嵌入式鋰電池,跟DS1302芯片功能相似,只是相比較之下,X1203與AT89S51搭配使用時(shí)占用I/O口較多。DS1643為帶有全功能實(shí)時(shí)時(shí)鐘的8K×
11、;8非易失性SRAM,集成了非易失性SRAM、實(shí)時(shí)時(shí)鐘、晶振、電源掉電控制電路和鋰電池電源,BCD碼表示的年、月、日、星期、時(shí)、分、秒,帶閏年補(bǔ)償。同樣,DS1643擁有28只管腳,硬件連接起來占用微處理器I/O口較多,不方便系統(tǒng)功能拓展和維護(hù)。故而從性價(jià)比和貨源上考慮,本設(shè)計(jì)采用實(shí)時(shí)時(shí)鐘日歷芯片DS1302。</p><p> 2.1.3 DS1302簡介</p><p> DS1
12、302是美國DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘日歷芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小于31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。有主電源和備份電源雙引
13、腳,而且備份電源可由大容量電容(>1F)來替代。此外,DS1302需要使用32.768KHz的晶振。</p><p> 2.1.4 DS1302引腳說明</p><p> DS1302引腳圖參照?qǐng)D2.2。</p><p> 圖2.2 DS1302芯片引腳圖</p><p> 其引腳功能參照表2.1。</p><p
14、> 表2.1 DS1302引腳功能說明</p><p> 2.1.5 DS1302控制字說明</p><p> 在編程過程中要注意DS1302的讀寫時(shí)序。DS1302是SPI總線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如表2.2。</p><p>
15、表2.2 DS1302控制字(即地址及命令字節(jié))</p><p> 控制字的作用是設(shè)定DS1302的工作方式、傳送字節(jié)數(shù)等。每次數(shù)據(jù)的傳輸都是由控制字開始??刂谱指魑坏暮x和作用如下:</p><p> BIT7:控制字的最高有效位,必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。</p><p> BIT 6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為
16、1表示存取RAM數(shù)據(jù);</p><p> BIT 5至BIT 1(A4~A0):用A4~A0表示,定義片內(nèi)寄存器和RAM的地址。</p><p><b> 定義如下:</b></p><p> 當(dāng)BIT 6位=0時(shí),定義時(shí)鐘和其他寄存器的地址。A4~A0=0~6,順序?yàn)槊?、分、時(shí)、日、月、星期、年的寄存器。當(dāng)A4~A0=7,為芯片寫保護(hù)寄
17、存器地址。當(dāng)A4~A0=8,為慢速充電參數(shù)選擇寄存器。當(dāng)A4~A0=31,為時(shí)鐘多字節(jié)方式選擇寄存器。</p><p> 當(dāng)BIT 6=1時(shí),定義RAM的地址,A4~A0=0~30,對(duì)應(yīng)各子地址的RAM,地址31對(duì)應(yīng)的是RAM多字節(jié)方式選擇寄存器。</p><p> 4.BIT 0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。</p><p>
18、 2.2 電子鬧鐘硬件電路設(shè)計(jì)</p><p> 電子鬧鐘至少要包括秒信號(hào)發(fā)生器、時(shí)間顯示電路、按鍵電路、供電電源、鬧鈴指示電路等幾部分。硬件電路框圖參照?qǐng)D2.3。</p><p> 該系統(tǒng)使用STC12C5A16AD單片機(jī)作為核心,通過讀取時(shí)鐘日歷芯片DS1302的數(shù)據(jù),完成此電子鬧鐘的主要功能——時(shí)鐘/日歷。使用LCD1602液晶屏顯示。 </p><p&
19、gt; 圖2.3 電子鬧鐘硬件系統(tǒng)框圖</p><p> 鍵盤是為了完成時(shí)鐘/日歷的校對(duì)和顯示功能。由于此電子鬧鐘要求具有鬧鈴功能,所以設(shè)計(jì)有鬧鈴電路,進(jìn)行聲音響鈴。</p><p> 鬧鈴電路中的鬧鈴音樂可以直接采用蜂鳴器鬧鈴,如當(dāng)前時(shí)刻與鬧鈴時(shí)間相同,單片機(jī)向蜂鳴器送出高電平,蜂鳴器發(fā)聲。采用蜂鳴器鬧鈴結(jié)構(gòu)簡單,控制方便,但是發(fā)出的鬧鈴聲音單一。也可以在編程的時(shí)候編寫一段音樂程序
20、,待鬧鈴時(shí)間到時(shí),調(diào)用該音樂程序給揚(yáng)聲器,便響起音樂。不過該方法只能做一些簡單音樂,并且音樂程序會(huì)占用很多單片機(jī)存儲(chǔ)資源。但鬧鈴的音樂不是本設(shè)計(jì)中的重點(diǎn),故采用最簡單的方法,占用單片機(jī)一根I/O口。</p><p> 整個(gè)電路只使用了一種電源,+5V電源將為整個(gè)電路供電。DS1302沒有備用電源。當(dāng)+5V電源被切斷后, DS1302不能繼續(xù)工作。當(dāng)+5V電源恢復(fù)供電,因?yàn)閿嚯娛瓜到y(tǒng)復(fù)位到初始化時(shí)間,需要重新校時(shí)
21、。具體電路圖如下:</p><p> 3 基于單片機(jī)的電子鬧鐘軟件設(shè)計(jì)</p><p> 單片機(jī)可以應(yīng)用匯編語言和C語言進(jìn)行編程。,匯編語言與機(jī)器指令一一對(duì)應(yīng)所以用匯編語言編寫的程序在單片機(jī)里運(yùn)行起來效率較高。C語言程序可讀性高,更便于理解。本設(shè)計(jì)使用C語言編程。</p><p> 3.1 主程序設(shè)計(jì)</p><p> 第一次上電
22、,系統(tǒng)先進(jìn)行初始化, LCD顯示初始時(shí)間并開始走時(shí)。單片機(jī)依次開始調(diào)用鍵盤掃描子程序、DS1302子程序、鬧鈴子程序,經(jīng)過延時(shí),返回程序開頭循環(huán)運(yùn)行。</p><p> 主程序流程圖如圖3.1。</p><p> 圖3.1 多功能電子鐘主程序流程圖</p><p><b> 3.2子程序設(shè)計(jì)</b></p><p>
23、; 3.2.1實(shí)時(shí)時(shí)鐘日歷子程序設(shè)計(jì)</p><p> 該程序主要實(shí)現(xiàn)對(duì)DS1302寫保護(hù)、充電,對(duì)年、月、日、時(shí)、分、秒等寄存器的讀寫操作。在讀寫操作子程序中都執(zhí)行了關(guān)中斷指令,因?yàn)樵诖型ㄐ艜r(shí)對(duì)時(shí)序要求比較高,而且在此是用I/O口軟件模擬串行時(shí)鐘脈沖,所以在通信過程中最好保證傳輸?shù)倪B續(xù)性,不要允許中斷。其流程圖如圖3.2。</p><p> 圖3.2 實(shí)時(shí)時(shí)鐘日歷子程序流程圖&l
24、t;/p><p> DS1302每次上電時(shí)自動(dòng)處于暫停狀態(tài),必須把秒寄存器的位7置位0,時(shí)鐘才開始計(jì)時(shí)。如果DS1302一直沒有掉電,則不存在此問題。</p><p> 在進(jìn)行寫操作時(shí),需要先解除寫保護(hù)寄存器的“禁止”狀態(tài)。當(dāng)用多字節(jié)模式進(jìn)行操作時(shí),必須寫夠8字節(jié)。</p><p> 3.2.2顯示子程序設(shè)計(jì)</p><p> 在單片機(jī)系
25、統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):顯示質(zhì)量高;數(shù)字式接口;體積小、重量輕;功耗低。液晶顯示的原理是利用液晶的物理特性,通過電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動(dòng)通信工具等眾多領(lǐng)域。</p><p> LCD1602是一種專門用來顯示字母、數(shù)字、符
26、號(hào)等的點(diǎn)陣型液晶模塊,它由32個(gè)5*8點(diǎn)陣字符位組成,每一個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,但是它不能顯示圖形。模塊內(nèi)部自帶有160個(gè)5*8點(diǎn)陣字型的字符發(fā)生器CHROM和8個(gè)可由用戶自定義的5*8的字符發(fā)生器CGRAM。</p><p> 圖3.4 顯示子程序流程圖</p><p> 3.2.3鍵盤掃描子程序</p><p> 單片機(jī)對(duì)鍵盤掃描的方法有隨機(jī)掃描
27、方式、定時(shí)掃描方式和中斷掃描方式。</p><p> 在隨機(jī)掃描方式中,CPU完成某特定任務(wù)后,即執(zhí)行鍵盤掃描程序,以確定鍵盤有無按鍵輸入,然后根據(jù)按鍵功能轉(zhuǎn)去執(zhí)行相應(yīng)的操作。在執(zhí)行鍵盤按鍵規(guī)定的功能中不理睬鍵盤輸入。</p><p> 定時(shí)掃描方式與隨機(jī)掃描方式基本相同,只是利用CPU內(nèi)的定時(shí)中斷,每隔一定時(shí)間掃描有無按鍵被按下,鍵盤反應(yīng)速度較快,在處理按鍵功能過程中,可以通過鍵盤命
28、令進(jìn)行干預(yù),如取消、暫停等操作。</p><p> 前兩種掃描方式均會(huì)占用CPU大量時(shí)間。不管有沒有鍵入操作,CPU總要在一定的時(shí)間內(nèi)進(jìn)行掃描,這對(duì)于單片機(jī)控制系統(tǒng)是很不利的。</p><p> 單片機(jī)掃描完鍵盤,得到鍵值,并根據(jù)鍵值轉(zhuǎn)入執(zhí)行對(duì)應(yīng)任務(wù),以實(shí)現(xiàn)按鍵功能。如果沒有按鍵按下,則程序掃描到Key=FFH,將鍵值Key清零,返回主程序。程序流程如圖3.5。</p>
29、<p> 圖3.5鍵盤掃描子程序</p><p> 3.2.4鬧鈴子程序設(shè)計(jì)</p><p> 鬧鈴子程序最主要的任務(wù)是不斷用時(shí)鐘分(min)與時(shí)(hour)同設(shè)定的鬧鈴分(clk_min)與鬧鈴時(shí)(clk_hour)比較,只要滿足min等于clk_min、hour等于clk_hour,響鈴啟動(dòng)一段時(shí)間,并根據(jù)外部按鍵執(zhí)行相應(yīng)任務(wù)。該程序流程圖參見圖3.6。</p&g
30、t;<p> 圖3.6 鬧鈴子程序流程圖</p><p><b> 4 系統(tǒng)調(diào)試</b></p><p> 調(diào)試工作分硬件調(diào)試和軟件調(diào)試兩部分,調(diào)試方法介紹如下:</p><p> 首先,硬件調(diào)試主要是先搭建硬件平臺(tái),然后利用萬用表等工具對(duì)電路檢查,最后應(yīng)用程序進(jìn)行功能調(diào)試。硬件調(diào)試比較費(fèi)時(shí),需要細(xì)心和耐心,也需要熟練掌
31、握電路原理。</p><p> 然后,軟件調(diào)試可以直接應(yīng)用一些編輯或仿真軟件進(jìn)行,比如單片機(jī)C51編輯軟件Keil。該軟件提供了一個(gè)集成開發(fā)環(huán)境uVision,它包括C編輯器、宏編輯器、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器。通過編譯、運(yùn)行,可以檢查程序錯(cuò)誤。但應(yīng)用此方法,仍需要十分了解所使用元器件的工作方式和管腳連接方式。在軟件調(diào)試過程中要仔細(xì)耐心,即便是多寫或少些一兩個(gè)字符,都無法編譯成功。還有一種方式,
32、即應(yīng)用仿真軟件搭建電路的軟件平臺(tái),再導(dǎo)入程序進(jìn)行仿真調(diào)試。如果電路出錯(cuò),可以在計(jì)算機(jī)上方便的修改電路,程序出錯(cuò)可以重新編輯程序,這種方法節(jié)時(shí)、省力,經(jīng)濟(jì)、方便。</p><p> 總之,調(diào)試過程是一個(gè)軟硬件相結(jié)合調(diào)試的過程,硬件電路是基礎(chǔ),軟件是檢測硬件電路和實(shí)現(xiàn)其功能的關(guān)鍵。</p><p> 4.1 硬件調(diào)試計(jì)</p><p> 4.1.1單片機(jī)基礎(chǔ)電路
33、調(diào)試</p><p> 單片機(jī)基礎(chǔ)電路包括電源、單片機(jī)、外部時(shí)鐘震蕩電路、復(fù)位電路和外部接口電路。調(diào)試過程需要注意以下幾點(diǎn):</p><p> 1. 檢查電源是否完好。</p><p> 2. 單片機(jī)電源要連接正確,并且保證AT89C51的31號(hào)引腳接高電平。AT89C51的31號(hào)引腳是外部程序存儲(chǔ)器選擇信號(hào)端,當(dāng)該引腳為高電平時(shí),單片機(jī)會(huì)一直從片內(nèi)程序存儲(chǔ)器
34、內(nèi)取指令。</p><p> 3. 如果使用P0口做I/O口,要接上拉電阻。</p><p> 4. 使用萬用表排查電路中是否存在斷路或者短路情況。筆者在制作外部接口電路時(shí)使用的是排針,焊接時(shí)容易出現(xiàn)管腳之間短路,所以在上電以前必須先排查電路。</p><p> 5. 對(duì)LCD1602顯示屏的調(diào)試,旋動(dòng)與芯片第三管腳相連的變阻器到顯示屏出現(xiàn)欲顯示的內(nèi)容,并將其
35、調(diào)清晰即可。</p><p> 4.1.2 DS1302電路調(diào)試</p><p> 該電路包含DS1302芯片、主電源、備用電源、晶振等部分。在與單片機(jī)連接的過程中需要注意以下幾點(diǎn):</p><p> 清楚DS1302與單片機(jī)連接的管腳。本設(shè)計(jì)定義為:DS1302的SCLK連接P1.5,I/O連接P1.6,RST連接P1.7。</p><p
36、> 注意電源正負(fù)極連接。</p><p> DS1302接32.768KHz的晶振。該晶振體型比較小,在焊接時(shí)要小心,注意不要將晶振引腳弄斷。同時(shí)也要盡量使晶振離DS1302的X1、X2引腳近距離焊接。</p><p> 編寫DS1302的時(shí)鐘/日歷程序,只要求能夠正確顯示時(shí)間。燒錄進(jìn)單片機(jī),檢查電路電源正負(fù)極連接是否正確,檢查P1.0和P1.1引腳接線是否正確。檢查無誤后可以
37、上電檢查。</p><p><b> 4.2 軟件調(diào)試</b></p><p> 在硬件調(diào)試完畢的基礎(chǔ)上,需要進(jìn)一步完善程序,也就是進(jìn)入軟件調(diào)試階段。在本設(shè)計(jì)中,軟件調(diào)試主要分兩大部分:實(shí)時(shí)時(shí)鐘日歷子程序調(diào)試、按鍵子程序調(diào)試。將這兩部分調(diào)試成功,那么整個(gè)設(shè)計(jì)的軟件部分也就基本完成了。關(guān)于這兩部分的調(diào)試只需要在主程序中分別調(diào)用這兩部分程序即可,此處不再贅述。<
38、;/p><p><b> 結(jié)論</b></p><p> 基于單片機(jī)實(shí)現(xiàn)電子鬧鐘,僅僅是眾多方法之一。并且市場上的實(shí)時(shí)時(shí)鐘日歷芯片品類繁多,IC化的傳感器各種各樣,顯示方式也愈趨于人性化。所以多功能電子鬧鐘有多種實(shí)現(xiàn)方案,能夠?qū)崿F(xiàn)的功能也很多,筆者已經(jīng)通過仿真和調(diào)試,實(shí)現(xiàn)了時(shí)間日歷顯示和校對(duì)、鬧鈴等功能。本文采用51單片機(jī)C語言進(jìn)行編程,當(dāng)然也可以應(yīng)用匯編語言編程。由
39、于筆者能力有限,提供的程序還可以進(jìn)一步優(yōu)化,并且還可以根據(jù)需求為電子鬧鐘增設(shè)新功能。</p><p><b> 致謝</b></p><p> 本課題在選題及研究過程是在XX老師的親切關(guān)懷和悉心指導(dǎo)下完成的。他嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深地感染和激勵(lì)著我。從課題的選擇到項(xiàng)目的最終完成,XX老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持。XX老師
40、不僅在學(xué)業(yè)上給我以精心指導(dǎo),同時(shí)還在思想、生活上給我以無微不至的關(guān)懷,在此謹(jǐn)向XX老師致以誠摯的謝意和崇高的敬意。還要感謝幫助過我的同學(xué)們,他們的陪伴讓這將近半載的時(shí)光充滿色彩!</p><p><b> 參考文獻(xiàn)</b></p><p> 王東峰等.單片機(jī)C語言應(yīng)用100例[M].電子工業(yè)出版社,2009。</p><p> 周仲. 國
41、產(chǎn)集成電路應(yīng)用500例[M]. 北京:電子工業(yè)出版社, 1992.104-108。</p><p> 夏繼強(qiáng). 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程[M]. 北京:北京航空航天大學(xué)出版社,2001.78-83。</p><p> Daniel J Pack and Steven F Barrett Microcontroller Theory and Applications:
42、 HC12 and S12[M] Prentice Hall 2007.</p><p> Dogan Ibrahim Microcontroller Based Apllied digital control[M] John Wiley and Sons Australia 2003.</p><p> Steven F. Barrett, Daniel Pack Atmel
43、 AVR Microcontroller Primer[M] Morgan & Claypool Publishers 2007-12-15.</p><p> Title The design of the electric clock based on single chip</p><p><b> Abstract</b></p>
44、<p> This design is mainly for realizing a electronic clock with regular alarm function that can display properly clock/calendar. The current digital electronic clock with a greater amount of discrete components,
45、 not only occupied large space and low utilization ratio. Microcontroller is a CPU, RAM, ROM, timer / counter and a variety of interfaces in one of the micro-controller. Its small size, low cost, powerful, widely used in
46、 smart products and industrial automation. This design apply STC12C5A16AD</p><p> Keywords electronic clock, microcontroller, C programming language</p><p><b> 部分重要程序</b></p&
47、gt;<p> 函 數(shù) 申 明</p><p> void delay_us(uchar x); //延時(shí) 2 * x + 5 us</p><p> void delay_ms(uint z); //延時(shí)任意Ms</p><p> void DS1302_writebyte(uchar
48、writebyte); //往DS1302寫一個(gè)字節(jié)</p><p> uchar DS1302_readbyte(); //往DS1302讀一個(gè)字節(jié)</p><p> uchar DS1302_read(uchar DS1302_add); //往DS1302指定地址讀數(shù)據(jù)</p><p> void DS13
49、02_write(uchar DS1302_add,uchar DS1302_data); //往DS1302指定地址寫數(shù)據(jù)</p><p> void DS1302_init(); //DS1302初始化函數(shù)</p><p> void DS1302_set_time(); //設(shè)置時(shí)間 </p><p
50、> void DS1302_read_time(); //讀取時(shí)間</p><p> void LCD1602_send_byte(uchar LCD1602_data); //往LCD1602發(fā)送一個(gè)字節(jié)</p><p> void LCD1602_write_com(uchar LCD1602_data); //往LCD
51、1602寫命令</p><p> void LCD1602_write_data(uchar LCD1602_data); //往LCD1602寫數(shù)據(jù)</p><p> void week(uchar week); //星期代碼</p><p> void LCD1602_init(); //液晶
52、初始化函數(shù)</p><p> void keyscan() ; //鍵盤掃描</p><p> void keyscan_waibu(); //進(jìn)入外部中斷的鍵盤掃描,用于設(shè)定時(shí)間</p><p> void keyscan_nz();
53、 //進(jìn)入鬧鐘掃描按鍵,用于鬧鐘設(shè)置</p><p> void LCD1602_write_time(); //往液晶寫入時(shí)間參數(shù)</p><p> void nz_jc(); //鬧鐘檢測函數(shù)</p><p> 外 部 中 斷 0 程 序</p><p>
54、; //功能:按鍵觸發(fā),對(duì)時(shí)間進(jìn)行調(diào)節(jié)</p><p> void int0() interrupt 0 //外部中斷0程序</p><p> EX0=0; //進(jìn)入中斷后關(guān)外部中斷開關(guān)</p><p> wbzd=0;
55、 //循環(huán)控制變量</p><p> DS1302_read_time();</p><p> DS1302_write(0x8e,0x00); //關(guān)寫保護(hù)</p><p> DS1302_write(0x80,0x80); //關(guān)時(shí)間</p
56、><p> DS1302_write(0x8e,0x80); //開寫保護(hù)</p><p> LCD1602_write_com(0x01); //清除顯示</p><p> LCD1602_write_time();//將時(shí)間參數(shù)寫入液晶</p&g
57、t;<p> while(!wbzd)</p><p> keyscan_waibu(); //進(jìn)入外部中斷的鍵盤掃描,用于設(shè)定時(shí)間</p><p> EX0=1;//中斷函數(shù)結(jié)束時(shí)再開外部中斷開關(guān)</p><p> 定 時(shí) 器 0 程 序</p><p> //功能:,用于判斷按鍵被按下的時(shí)間,時(shí)間按鍵的
58、多功能</p><p> void time0() interrupt 1 //定時(shí)器0程序</p><p> TH0+=0xd8;</p><p> TL0+=0xf0;//10ms溢出進(jìn)入中斷</p><p><b> t0</b></p><p><b> 定時(shí)
59、器 1 程序</b></p><p> //功能:鬧鐘到了,蜂鳴器響一分鐘</p><p> void time1() interrupt 3</p><p> TH1+=0x3c;</p><p> TL1+=0xb0;</p><p><b> t1</b></p&
60、gt;<p> if(t1==1200)</p><p><b> t1=0;</b></p><p><b> TR1=0;</b></p><p><b> TH1=0x3c;</b></p><p><b> TL1=0xb0;</
61、b></p><p><b> fm=0;</b></p><p> us 級(jí) 延 時(shí) 函 數(shù) </p><p> //功能:延時(shí)任意微秒,理論上7~515us</p><p> void delay_us(uchar x) //延時(shí) 2 * x + 5 us</p><p>
62、while(--x);//實(shí)現(xiàn)精準(zhǔn)延時(shí),us級(jí)別</p><p> ms 級(jí) 延 時(shí) 函 數(shù) </p><p> //功能:延時(shí)任意毫秒,理論上1~65535ms</p><p> void delay_ms(uint z)//延時(shí)任意Ms</p><p><b> uint x,y;</b></
63、p><p> for(x=z;x>0;x--)</p><p> for(y=123;y>0;y--);</p><p> 鬧 鐘 檢 測 函 數(shù)</p><p> //功能:檢測鬧鐘設(shè)的參數(shù)是否是此時(shí)時(shí)間參數(shù)相同的,相同的話驅(qū)動(dòng)蜂鳴器響1分鐘</p><p> void nz_jc()</p&
64、gt;<p> if((naozhong==1)&&(nz_xingqi==xingqi)&&(nz_shi==shi)&&(nz_fen==fen)&&(nz_miao==miao))</p><p> fm=1; TR1=1;</p><p> DS1302 的 初
65、 始 化 </p><p> //功能:上電時(shí)對(duì)時(shí)鐘芯片DS1302里面的數(shù)據(jù)全部清零</p><p> void DS1302_init() //DS1302 的 初 始 化,將所有參數(shù)全清零</p><p> DS1302_write(0x8e,0x00); //關(guān)寫保護(hù)</p><p> DS1302_w
66、rite(0x80,0x80); //關(guān)時(shí)間</p><p> DS1302_write(0x80,0x00);</p><p> DS1302_write(0x82,0x00);</p><p> DS1302_write(0x84,0x00);</p><p> DS1302_write(0x86,0x00);</p&g
67、t;<p> DS1302_write(0x88,0x00);</p><p> DS1302_write(0x8a,0x00);</p><p> DS1302_write(0x8c,0x00);</p><p> DS1302_write(0x80,0x00); //開時(shí)間</p><p> DS1302_w
68、rite(0x8e,0x80); //開寫保護(hù)</p><p> LCD1602 液 晶 初 始 化 函 數(shù) </p><p> //功能:初始化液晶</p><p> void LCD1602_init() //LCD1602液晶初始化函數(shù)</p><p> LCD1602_write_com(0x01);
69、 //清除顯示</p><p> LCD1602_write_com(0x02); //地址位歸零</p><p> LCD1602_write_com(0x0c); //開顯關(guān)游標(biāo)</p><p> LCD1602_write_com(0x06);
70、 //光標(biāo)移動(dòng)方向</p><p> LCD1602_write_com(0x30); //基本功能設(shè)定</p><p> DS1302 讀 取 時(shí) 間</p><p> //功能:讀取時(shí)鐘芯片DS1302的時(shí)間參數(shù)</p><p> void DS1302_read_time()
71、 //讀取時(shí)間</p><p> miao =DS1302_read(0x81);</p><p> fen =DS1302_read(0x83);</p><p> shi =DS1302_read(0x85);</p><p> ri =DS1302_read(0
72、x87);</p><p> yue =DS1302_read(0x89);</p><p> xingqi=DS1302_read(0x8b);</p><p> nian =DS1302_read(0x8d);</p><p> LCD1602 顯 示 時(shí) 間 參 數(shù) </p><p> //功能:
73、將DS1302讀取回來的時(shí)間參數(shù)送到液晶上顯示</p><p> void LCD1602_write_time()</p><p> LCD1602_write_com(0x80);</p><p> LCD1602_write_data('2');</p><p> LCD1602_write_data('
74、0');</p><p> LCD1602_write_data((nian>>4)+0x30);</p><p> LCD1602_write_data((nian&0x0f)+0x30);</p><p> LCD1602_write_data(0xc4);</p><p> LCD1602_write
75、_data(0xea); //“年”</p><p> LCD1602_write_data((yue>>4)+0x30);</p><p> LCD1602_write_data((yue&0x0f)+0x30);</p><p> LCD1602_write_data(0xd4);</p
76、><p> LCD1602_write_data(0xc2); //“月”</p><p> LCD1602_write_data((ri>>4)+0x30);</p><p> LCD1602_write_data((ri&0x0f)+0x30);</p><p> LC
77、D1602_write_data(0xc8);</p><p> LCD1602_write_data(0xd5); //“日”</p><p> LCD1602_write_data(' ');</p><p> LCD1602_write_data(' ');</p&g
78、t;<p> LCD1602_write_com(0x90);</p><p> week(xingqi);</p><p> if(naozhong==0)</p><p> LCD1602_write_data(' ');</p><p> LCD1602_write_data(' '
79、;);</p><p><b> else</b></p><p> LCD1602_write_data(0x06);</p><p> LCD1602_write_data(' ');</p><p> LCD1602_write_data((shi>>4)+0x30);</
80、p><p> LCD1602_write_data((shi&0x0f)+0x30);</p><p> LCD1602_write_data(0xa1);</p><p> LCD1602_write_data(0xc3);</p><p> LCD1602_write_data((fen>>4)+0x30);<
81、;/p><p> LCD1602_write_data((fen&0x0f)+0x30);</p><p> LCD1602_write_data(0xa1);</p><p> LCD1602_write_data(0xc3);</p><p> LCD1602_write_data((miao>>4)+0x30);
82、</p><p> LCD1602_write_data((miao&0x0f)+0x30);</p><p> LCD1602_write_data(' ');</p><p> LCD1602_write_data(' ');</p><p> 進(jìn) 入 鬧 鐘 設(shè) 置 后 的 鍵 盤 掃 描
83、 </p><p> //功能:主程序的鍵盤掃描進(jìn)入到鬧鐘設(shè)置選項(xiàng)后,對(duì)鬧鐘的參數(shù)進(jìn)行調(diào)節(jié)設(shè)置</p><p> void keyscan_nz() //進(jìn)入鬧鐘掃描按鍵,用于鬧鐘設(shè)置</p><p><b> uchar j;</b></p><p><b> P3=0xff;</b>
84、</p><p> if(P3!=0xff)</p><p> delay_ms(10);</p><p><b> EX0=0;</b></p><p> if(KEY0==0)</p><p> delay_ms(10);</p><p> while(KE
85、Y0==0);</p><p> delay_ms(10);</p><p><b> nz=1;</b></p><p><b> j=0;</b></p><p><b> EX0=1;</b></p><p> if(KEY1==0)&l
86、t;/p><p> delay_ms(10);</p><p> while(KEY1==0);</p><p> delay_ms(10);</p><p><b> switch(j)</b></p><p> case 1:naozhong=~naozhong; </p>
87、<p> if(naozhong==1)</p><p> LCD1602_write_data(0xbf);</p><p> LCD1602_write_data(0xaa); </p><p><b> else</b></p><p> LCD1602_write_data(0xb9);&l
88、t;/p><p> LCD1602_write_data(0xd8);</p><p> LCD1602_write_com(0x85);break; case 2:nz_xingqi--;</p><p> if(nz_xingqi<0) </p><p> nz_xingqi=6;</p>
89、<p> if(nz_xingqi>6) </p><p> nz_xingqi=0;</p><p> week(nz_xingqi);</p><p> LCD1602_write_com(0x90);</p><p><b> break;</b></p><p>
90、 case 3:nz_shi--;</p><p> if(nz_shi<0) </p><p> nz_shi=23;</p><p> if(nz_shi>23) </p><p><b> nz_shi=0;</b></p><p> LCD1602_write_da
91、ta(nz_shi/10+0x30);</p><p> LCD1602_write_data(nz_shi%10+0x30);</p><p> LCD1602_write_com(0x92);</p><p><b> break;</b></p><p> case 4:nz_fen--;</p>
92、;<p> if(nz_fen<0) </p><p> nz_fen=59;</p><p> if(nz_fen>59) </p><p><b> nz_fen=0;</b></p><p> LCD1602_write_data(nz_fen/10+0x30);</p&g
93、t;<p> LCD1602_write_data(nz_fen%10+0x30);</p><p> LCD1602_write_com(0x94);</p><p><b> break;</b></p><p> case 5:nz_miao--;</p><p> if(nz_miao&l
94、t;0) </p><p> nz_miao=59;</p><p> if(nz_miao>59) </p><p> nz_miao=0;</p><p> LCD1602_write_data(nz_miao/10+0x30);</p><p> LCD1602_write_data(nz_mia
95、o%10+0x30);</p><p> LCD1602_write_com(0x96);</p><p><b> break;</b></p><p> default :break;</p><p><b> return ;</b></p><p> if(
96、KEY2==0)</p><p> delay_ms(10);</p><p> while(KEY2==0);</p><p> delay_ms(10);</p><p><b> j</b></p><p> if(j==8) j=1;</p><p>
97、 switch(j) //開光標(biāo)并跳到那一位,等待用戶設(shè)定參數(shù)</p><p> case 1:LCD1602_write_com(0x85);</p><p> LCD1602_write_com(0x0f);</p><p><b> break;</b></p><p> case 2:LCD
98、1602_write_com(0x90);</p><p> LCD1602_write_com(0x0f);</p><p><b> break;</b></p><p> case 3:LCD1602_write_com(0x92);</p><p> LCD1602_write_com(0x0f);<
99、;/p><p><b> break;</b></p><p> case 4:LCD1602_write_com(0x94);</p><p> LCD1602_write_com(0x0f);</p><p><b> break;</b></p><p> cas
100、e 5:LCD1602_write_com(0x96);</p><p> LCD1602_write_com(0x0f);</p><p><b> break;</b></p><p> default :break;</p><p><b> return ;</b></p>
101、;<p> if(KEY3==0)</p><p> delay_ms(10);</p><p> while(KEY3==0);</p><p> delay_ms(10);</p><p><b> switch(j)</b></p><p> case 1:naoz
102、hong=~naozhong; </p><p> if(naozhong==1)</p><p> LCD1602_write_data(0xbf);</p><p> LCD1602_write_data(0xaa); </p><p><b> else</b></p><p>
103、LCD1602_write_data(0xb9);</p><p> LCD1602_write_data(0xd8);</p><p> LCD1602_write_com(0x85);</p><p><b> break;</b></p><p> case 2:nz_xingqi++;</p>
104、<p> if(nz_xingqi<0) </p><p> nz_xingqi=6;</p><p> if(nz_xingqi>6) </p><p> nz_xingqi=0;</p><p> week(nz_xingqi);</p><p> LCD1602_write_
105、com(0x90);</p><p><b> break;</b></p><p> case 3:nz_shi++;</p><p> if(nz_shi<0) </p><p> nz_shi=23;</p><p> if(nz_shi>23) </p>
106、<p><b> nz_shi=0;</b></p><p> LCD1602_write_data(nz_shi/10+0x30);</p><p> LCD1602_write_data(nz_shi%10+0x30);</p><p> LCD1602_write_com(0x92);</p><p
107、><b> break;</b></p><p> case 4:nz_fen++;</p><p> if(nz_fen<0) </p><p> nz_fen=59;</p><p> if(nz_fen>59) </p><p><b> nz_fen
108、=0;</b></p><p> LCD1602_write_data(nz_fen/10+0x30);</p><p> LCD1602_write_data(nz_fen%10+0x30);</p><p> LCD1602_write_com(0x94);</p><p><b> break;</b
109、></p><p> case 5:nz_miao++;</p><p> if(nz_miao<0) </p><p> nz_miao=59;</p><p> if(nz_miao>59) </p><p> nz_miao=0;</p><p> LCD16
110、02_write_data(nz_miao/10+0x30);</p><p> LCD1602_write_data(nz_miao%10+0x30);</p><p> LCD1602_write_com(0x96);</p><p><b> break;</b></p><p> default :bre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)電子鬧鐘設(shè)計(jì)
- 單片機(jī)定時(shí)鬧鐘畢業(yè)設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)--基于單片機(jī)的電子時(shí)鐘
- 單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)--基于單片機(jī)的電子鬧鐘設(shè)計(jì)
- 基于單片機(jī)的電子羅盤設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于單片機(jī)的電子鬧鐘設(shè)計(jì)-單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)的新型多功能電子鬧鐘
- 單片機(jī)課程設(shè)計(jì)(電子鬧鐘)
- 基于單片機(jī)的電子鎖設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)論文 基于單片機(jī)的電子日歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的電子鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 基于單片機(jī)的數(shù)字鬧鐘設(shè)計(jì)【畢業(yè)論文】
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的定時(shí)鬧鐘設(shè)計(jì)
- 基于單片機(jī)的電子琴畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的電子琴設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 基于單片機(jī)的電子琴設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)-----基于單片機(jī)的電子鐘的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論