




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要回看歷史長(zhǎng)河,從以前的沙漏到現(xiàn)在的電子鐘,人們計(jì)時(shí)的工具伴隨著社會(huì)的進(jìn)步和科技的日新月異而更新著,我們不得不感嘆人類的智慧!的確,電子鐘是一種利用數(shù)字電路來(lái)實(shí)現(xiàn)時(shí)間的顯示,與傳統(tǒng)的機(jī)械鐘相比,它具有走時(shí)準(zhǔn)確、顯示直觀、無(wú)機(jī)械傳動(dòng)等優(yōu)點(diǎn),因而得到廣泛使用。隨著人們生活環(huán)境的不斷改善和美化,我們可以在很多場(chǎng)合看到電子鐘。數(shù)字鐘已成為人們?nèi)粘I钪斜夭豢缮俚谋匦杵罚瑥V泛用于個(gè)人家庭以及車站、碼頭、劇場(chǎng)、辦公室等公共場(chǎng)所,給人們的生活、學(xué)習(xí)、工作、娛樂(lè)帶來(lái)極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使數(shù)字鐘具有走時(shí)準(zhǔn)確、性能穩(wěn)定、攜帶方便等優(yōu)點(diǎn),它還用于計(jì)時(shí)、自動(dòng)報(bào)時(shí)及自動(dòng)控制等
2、各個(gè)領(lǐng)域。電子鐘的唯一缺點(diǎn)是具有輻射,不過(guò)電子產(chǎn)品都是有輻射的,電子鐘的輻射很小不會(huì)造成什么危害。別人設(shè)計(jì)的電子有可能不符合自己的風(fēng)格,所以如果能自己親自動(dòng)手設(shè)計(jì)一個(gè)符合自己的風(fēng)格的電子鐘將會(huì)很有意義。這次的課程設(shè)計(jì)給了我一個(gè)機(jī)會(huì)。本設(shè)計(jì)是基于單片機(jī)進(jìn)行的電子萬(wàn)年歷設(shè)計(jì),可以顯示年月日時(shí)分秒及周信息,具有可調(diào)整日期和時(shí)間功能。在設(shè)計(jì)的同時(shí)對(duì)單片機(jī)的理論基礎(chǔ)和外圍擴(kuò)展知識(shí)進(jìn)行了比較全面準(zhǔn)備。在硬件與軟件設(shè)計(jì)時(shí),沒(méi)有良好的基礎(chǔ)知識(shí)和實(shí)踐經(jīng)驗(yàn)會(huì)受到很大限制,每項(xiàng)功能實(shí)現(xiàn)時(shí)需要那種硬件,程序該如何編寫,算法如何實(shí)現(xiàn)等,沒(méi)有一定的基礎(chǔ)就不可能很好的實(shí)現(xiàn)。具體實(shí)現(xiàn)功能:(1)可以準(zhǔn)確顯示年、月、日、時(shí)、分
3、、秒、星期、溫度;(2)可以對(duì)時(shí)間進(jìn)行設(shè)置;(3)可以設(shè)置4個(gè)鬧鐘。目 錄方案選擇31.1 單片機(jī)芯片的選擇方案31.2 顯示模塊選擇方案31.3 始終芯片的選擇方案41.4 電路設(shè)計(jì)最終方案決定系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)2.1 電路設(shè)計(jì)框圖2.2 系統(tǒng)硬件概述2.3 主要單元電路的設(shè)計(jì)2.3.1 單片機(jī)主控制模塊52.3.2 時(shí)鐘電路模塊72.3.3 顯示模塊92.3.4 按鍵模塊102.3.5 溫度傳感模塊10系統(tǒng)的軟件設(shè)計(jì)3.1 程序流程框圖123.2 程序設(shè)計(jì)13proteus仿真134.1 keil c51使用介紹134.2 proteus 使用介紹144.3 proteus 仿真結(jié)果15
4、4.4 仿真過(guò)程出現(xiàn)的問(wèn)題17課程設(shè)計(jì)總結(jié)與體會(huì)176參考文獻(xiàn)187附錄191 方案選擇 1.1 單片機(jī)芯片的選擇方案方案一: 采用at89c51芯片作為硬件核心,采用flash rom,內(nèi)部具有4kb rom 存儲(chǔ)空間,能于3v的超低壓工作,而且與mcs-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備isp在線編程技術(shù), 當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。方案二: 采用at89c52,at89c52是一個(gè)低電壓,高性能cmos 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的flash只讀程序存儲(chǔ)器和2
5、56 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(ram),器件采用atmel公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)mcs-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和flash存儲(chǔ)單元,功能強(qiáng)大的at89c52單片機(jī)可為我們提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場(chǎng)合。硬件實(shí)體電路一般會(huì)采用功能和優(yōu)點(diǎn)更為突出的at89c52單片機(jī)。1.2 顯示模塊選擇方案方案一: 采用led數(shù)碼管動(dòng)態(tài)掃描,led數(shù)碼管價(jià)格適中,但要顯示比較多的數(shù)字時(shí)數(shù)碼管的使用必然會(huì)增多,連線方面會(huì)很麻煩,編程上也會(huì)相應(yīng)的復(fù)雜??紤]到效率的因素不采用數(shù)碼管顯示。方案二: 采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,在很多場(chǎng)合可
6、以看到這種顯示方式,但是在電子鐘顯示時(shí)間這一塊不適合,一來(lái)點(diǎn)陣顯示文字上有優(yōu)勢(shì),但顯示數(shù)字存在一定的劣勢(shì),一來(lái)不夠直觀,二來(lái)顯得有點(diǎn)浪費(fèi)。綜合考慮各種因素排除這種方案。方案三: 采用lcd液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見(jiàn)。與數(shù)碼管顯示相比,在直觀程度和亮度清晰度上都存在很多優(yōu)勢(shì),并且現(xiàn)在液晶顯示已經(jīng)成為主流,被人們普遍接受,符合大眾的口味。雖然沒(méi)學(xué)過(guò)液晶顯示這一塊,但查看相關(guān)資料應(yīng)該可以把硬件電路圖接好。1.3 時(shí)鐘芯片的選擇方案方案一: 直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使
7、用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。方案二: 采用ds1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,ds1302芯片是一種高性能的時(shí)鐘芯片, 實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小于31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。計(jì)時(shí)更加準(zhǔn)確,使用起來(lái)更加方便,與成本相比起來(lái)利大于弊,物超所值。1.4 電路設(shè)計(jì)最終方案決定綜上各方案所述,對(duì)此次作品的方案選定: 采用at89c52作為主控制系統(tǒng); ds1302提供時(shí)鐘;lcd液晶顯示屏作為顯示。2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)2.1 電路設(shè)計(jì)框圖 電路設(shè)計(jì)框圖如圖1所示:溫度傳感模塊at89c52主控制模 塊lcd液晶顯示屏顯示模塊按鍵模塊
8、ds1302時(shí)鐘模塊鬧鈴模塊圖1系統(tǒng)原理圖2.2 系統(tǒng)硬件概述本電路是由at89c52單片機(jī)為控制核心,驅(qū)動(dòng)ds1302時(shí)鐘提供年、月、日、時(shí)、分、秒、星期,時(shí)間精確;外接溫度傳感器ds18b20,可以感應(yīng)外界溫度,經(jīng)過(guò)at89c52單片機(jī)控制轉(zhuǎn)換后以數(shù)字形式顯示出來(lái),這一設(shè)計(jì)顯得很人性化;顯示模塊采用lmo16l顯示,直觀、清晰、非常人性化;按鍵模塊包含時(shí)間設(shè)置按鈕和鬧鐘設(shè)置按鈕,按鍵的操作符合人們的思維習(xí)慣,很容易進(jìn)行設(shè)置;鬧鈴使用sounder,聲音能起到提醒時(shí)間的效果,而且聽(tīng)起來(lái)清脆悅耳。總的來(lái)說(shuō),硬件考慮的比較周全,盡量做到最好。2.3 主要單元電路的設(shè)計(jì)及器件介紹2.3.1 單片機(jī)
9、主控制模塊一、模塊介紹單片機(jī)控制模塊的核心是at89c52,此外還包括它的供電電路、復(fù)位電路、時(shí)鐘電路,它的模塊圖如圖一所示 圖一 單片機(jī)控制模塊 二 at89c52的介紹 at89c52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(i/o)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線,at89c52可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程(s系列的才支持在線編程)。其將通用的微處理器和flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。 2.3.2時(shí)鐘電路模塊 一、模塊介紹時(shí)鐘電路模塊的核心是ds1302,ds1302
10、由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc1+0.2v時(shí),vcc2給ds1302供電。當(dāng)vcc2小于vcc1時(shí),ds1302由vcc1供電。x1和x2是振蕩源,外接32.khz晶振。rst是復(fù)位/片選線,通過(guò)把rst輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)ds1302進(jìn)行操作。如果在傳送過(guò)程中rsts置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電動(dòng)行時(shí),在vcc大于等于2.5v之前,r
11、st必須保持低電平。中有在sclk 為低電平時(shí),才能將rst置為高電平,i/o為串行數(shù)據(jù)輸入端(雙向)。sclk始終是輸入端。 圖2 ds1302的時(shí)鐘電路 圖3 ds1302的管腳圖二、ds1302的介紹 (1) 時(shí)鐘芯片ds1302的工作原理: ds1302在每次進(jìn)行讀、寫程序前都必須初始化,先把sclk端置 “0”,接著把rst端置“1”,最后才給予sclk脈沖;讀/寫時(shí)序如下圖4所示。ds1302的控制字的位7必須置1,若為0則不能把對(duì)ds1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)ram=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),ck=0,位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀
12、操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出的。表.2為ds1302的日歷、時(shí)間寄存器內(nèi)容:“ch”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,ds1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開(kāi)始運(yùn)行?!皐p”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和ram的寫操作之前,wp必須為0。當(dāng)“wp”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。(2) ds1302的控制字節(jié):ds1302控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)
13、如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開(kāi)始輸出(3) 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個(gè)sclk時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開(kāi)始。同樣,在緊跟8位的控制指令字后的下一個(gè)sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。(4) ds1302的寄存器ds1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式。此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 ds
14、1302與ram相關(guān)的寄存器分為兩類:一類是單個(gè)ram單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個(gè)字節(jié),命令控制字為feh(寫)、ffh(讀)。 2.3.3 顯示模塊 一、模塊介紹圖3為lcd顯示模塊,液晶顯示的連線需熟悉它的工作原理。圖4 顯示模塊二、lmo16l的介紹 1602lcd分為帶背光和不帶背光兩種,基控制器大部分為hd44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差別。1602lcd采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各
15、引腳接口說(shuō)明如表所示:編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6數(shù)據(jù)6e使能信號(hào)14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負(fù)極2.3.4按鍵模塊 按鍵模塊由7個(gè)按鍵組成,每個(gè)按鍵都有自己的功能。圖5 按鍵模塊2.3.5 溫度傳感模塊一、模塊介紹該模塊的核心是溫度傳感器ds18b20 圖6 溫度傳感器二、ds18b20的介紹1. ds18b20的特性 9 (1)適應(yīng)電壓范圍更寬,電壓范圍:3.05.5v,寄生電源方式下可由數(shù)據(jù)線供。(2)獨(dú)特
16、的單線接口方式,ds18b20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds18b20的雙向通訊。(3)ds18b20支持多點(diǎn)組網(wǎng)功能,多個(gè)ds18b20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。(4)ds18b20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。(5)溫范圍55125,在-10+85時(shí)精度為0.5。(6)可編程的分辨率為912位,對(duì)應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測(cè)溫。(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。
17、(8)測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳送給cpu,同時(shí)可傳送crc校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。2.ds18b20內(nèi)部結(jié)構(gòu)及ds18b20的管腳排列64位光刻rom是出廠前被光刻好的,它可以看作是該ds18b20的地址序列號(hào)。不同的器件地址序列號(hào)不同。ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻rom,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器th和tl,高速暫存器。 ds18b20的引腳定義:(1)dq為數(shù)字信號(hào)輸入/輸出端(2)gnd為電源地(3)vdd為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)
18、3系統(tǒng)的軟件設(shè)計(jì)開(kāi)始初始化 讀日期、時(shí)間 寫日期、時(shí)間時(shí)間、溫度顯示子程序時(shí)間、鬧鐘設(shè)置子程序日期修改子程序顯示結(jié)果返回 開(kāi)關(guān)控制子程序3.1程序流程框圖3.2 程序設(shè)計(jì)(見(jiàn)附錄一)4 proteus仿真4.1 keil c51的使用介紹由于程序的編寫語(yǔ)言是c語(yǔ)言,所以只能在keil c51軟件上編寫與編譯,因此我們必須熟悉keil c51.keil c51是美國(guó)keil software公司出品的51系列兼容單片機(jī)c語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,c語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。keil c51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全windo
19、ws界面。keil c51的使用步驟如下:(1) 驅(qū)動(dòng)軟件(2) 新建工程(3) 選擇cpu(4) 添加源程序文件(5) 編寫程序(6) 設(shè)置開(kāi)發(fā)環(huán)境參數(shù)(7) 編譯源程序,燒錄文件編譯成功后會(huì)生成hex文件,該文件可以被載入并最終燒錄到具體芯片中。本次設(shè)計(jì)用的是c語(yǔ)言,用c51編程有很多優(yōu)點(diǎn):(1) c51可管理內(nèi)部寄存器和存儲(chǔ)器,編程時(shí),無(wú)須考慮不同存儲(chǔ)器的尋址和數(shù)據(jù)類型等細(xì)節(jié)問(wèn)題;(2) 程序由若干函數(shù)組成,具有良好的模塊化結(jié)構(gòu);(3) 有豐富的子程序庫(kù)可直接引用,從而大大減少用戶編程的工作量。4.2 proteus 的使用介紹 proteus isis是英國(guó)labcenter公司開(kāi)發(fā)的
20、電路分析與實(shí)物仿真軟件。它運(yùn)行于windows操作系統(tǒng)上,可以仿真、分析(spice)各種模擬器件和集成電路。該軟件的特點(diǎn)是:(1)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。(2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、rs232動(dòng)態(tài)仿真、i2 c調(diào)試器、spi調(diào)試器、鍵盤和lcd系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。(3)目前支持的單片機(jī)類型有:arm7系列、68000系列、8051系列、avr系列、pic12系列、pic16系列、pic18系列、z80系列、hc11系列以及各種外 圍芯片。(4)支持大
21、量的存儲(chǔ)器和外圍芯片??傊撥浖且豢罴瘑纹瑱C(jī)和spice分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真arm、51、avr、pic。proteus啟動(dòng)畫面:如圖7所示圖7 proteus啟動(dòng)畫面4.3proteus仿真結(jié)果圖8為上電后后led顯示: 圖8圖9為調(diào)節(jié)秒鐘:圖9圖10為調(diào)節(jié)分鐘: 圖10圖11為調(diào)整時(shí)鐘:圖12調(diào)節(jié)日期:圖12圖13為調(diào)節(jié)鬧鐘:圖13圖14為調(diào)節(jié)星期: 圖14 4.4仿真過(guò)程出現(xiàn)的問(wèn)題 仿真時(shí)液晶顯示出現(xiàn)問(wèn)題,一直在閃沒(méi)有固定顯示時(shí)間,而simulation log中一直在提示controller received command whilst busy。后來(lái)從程
22、序入手,修改了鬧鐘設(shè)置的子程序,經(jīng)過(guò)反復(fù)試驗(yàn)解決了問(wèn)題。我覺(jué)得仿真出現(xiàn)問(wèn)題并不可怕,關(guān)鍵是要敢于去調(diào)試,很少有編程不會(huì)出一點(diǎn)差錯(cuò)的,在差錯(cuò)的過(guò)程中很能鍛煉人,考驗(yàn)的不僅是知識(shí)還有意志。5課程設(shè)計(jì)總結(jié)與體會(huì)本次課程設(shè)計(jì)的時(shí)間不長(zhǎng),只有短短的幾天,但這幾天卻過(guò)得很不尋常,也收獲了許多。從選題那刻開(kāi)始,我就投入了課程設(shè)計(jì)之中,反復(fù)思考后從最初的電壓表到最后選擇電子鐘,因?yàn)槲蚁矚g看到實(shí)際性的東西,想想看到一個(gè)能準(zhǔn)確顯示時(shí)間的時(shí)鐘,而這個(gè)時(shí)鐘又是自己設(shè)計(jì)的,那該多高興多么有意義的一件事。于是我搜索了不少書(shū)籍和網(wǎng)站,積累了基本的設(shè)計(jì)時(shí)鐘的方法和思路,還有很多器件的使用資料,我才知道ds1302的功能是很強(qiáng)
23、大的。但后來(lái)發(fā)現(xiàn)程序的編寫才是一個(gè)大難關(guān),由于還沒(méi)用過(guò)c語(yǔ)言編寫程序,根本不懂得怎么下手,一籌莫展,我都快有點(diǎn)想放棄了!后來(lái)我給自己一個(gè)臺(tái)階下,自己的水平有限為什么不參考別人的程序呢?在別人的基礎(chǔ)上增加自己的東西就好。我便從網(wǎng)上找了個(gè)很好的程序,慢慢的去讀去理解,由于程序很長(zhǎng)很復(fù)雜,理解起來(lái)也很費(fèi)勁。天氣的寒冷,更是我覺(jué)得難熬,但最終堅(jiān)持了下來(lái),再它的基礎(chǔ)上增加了鬧鐘功能,當(dāng)看到鬧鐘能在設(shè)定時(shí)間響起鬧鈴時(shí)我甭提多高興了。課程設(shè)計(jì)考驗(yàn)我們掌握的知識(shí),包括單片機(jī)的基本知識(shí)、c語(yǔ)言或者匯編語(yǔ)言的程序編寫、keil c51的使用和proteus的使用。另一方面也考驗(yàn)我們的動(dòng)手能力和意志。課設(shè)過(guò)程中由于
24、各種因素的影響我們不可能一帆風(fēng)順,我們需要一顆堅(jiān)定的心再加上細(xì)心,這樣才能克服種種困難,完成老師布置的任務(wù)。在設(shè)計(jì)過(guò)程中,我遇到問(wèn)題首先想到的是從書(shū)本或者網(wǎng)上解決問(wèn)題,一般的問(wèn)題也總能解決。在遇到很難解決的問(wèn)題時(shí)又會(huì)想到老師如果在身邊多好啊,但是我知道老師也很忙,不能照顧到每個(gè)同學(xué)。后來(lái)我有難題就會(huì)去請(qǐng)教張輝其同學(xué),在此感謝他。同時(shí)感謝陳老師平時(shí)的悉心教導(dǎo),感謝學(xué)校和學(xué)院給我們這么一次課設(shè)的機(jī)會(huì)鍛煉我們。6參考文獻(xiàn)1侯玉寶編基于proteus的51系列單片機(jī)設(shè)計(jì)與仿真電子工業(yè)出版社2秦實(shí)宏、徐春輝主編mcs-51單片機(jī)原理及應(yīng)用華中科技大學(xué)出版社3陳正振 編 電子電路設(shè)計(jì)與制作 廣西交通職業(yè)技
25、術(shù)學(xué)院信息工程系 20074proteus 仿真論壇 附錄一#include #include intrins.h#include 24c02.h#define uchar unsigned char#define uint unsigned intuchar code tabe1=20 - -; /液晶一直顯示的字符uchar code tabe2= : : ;uchar code tabe3=alarm set:;uchar miao,fen,shi,nian,yue,ri,week,wendu_shi,wendu_ge,wendu_shu,variate,alarm_shi,alarm_
26、fen,alarm_miao;uchar flag=1,count=0,flag_up=0,flag_down=0,flag_alarm=0,alarm_on,alarm_count=0,done=0;uint wendu;sbit dq = p10; /ds18b20溫度傳送數(shù)據(jù)io口sbit ds1302_rst = p11; /1302復(fù)位sbit ds1302_io = p12; /數(shù)據(jù)輸入輸出sbit ds1302_sclk= p13; /串行時(shí)鐘sbit alarm_out = p36;sbit lcd1602_rs = p20; / 1602命令、數(shù)據(jù)選擇sbit lcd1602
27、_rw = p21; / 1602寫sbit lcd1602_e = p22; / 1602使能sbit set = p24;/選擇按鍵sbit up = p25;/加sbit down= p26;/減sbit nao1= p27;sbit nao2=p30;sbit nao3=p31;sbit nao4=p32;sbit acc0=acc0;sbit acc7=acc7;/延時(shí)void delay(uchar x)uchar y,z;for(z=x;z0;z-)for(y=110;y0;y-);void delay1()_nop_();_nop_();ds18b20_delay(uchar
28、xus) /延時(shí)xuswhile(xus-);/*ds18b20*/void ds18b20_init() /ds18b20初始化uchar x=0; dq=1;ds18b20_delay(8);dq=0;ds18b20_delay(80);dq=1;ds18b20_delay(14);x=dq;ds18b20_delay(20);void write_onechar(uchar dat) /寫一字節(jié)uchar i;for(i=8;i0;i-)dq=0;if(dat&0x01=0x01)dq=1;elsedq=0;ds18b20_delay(5);dq=1;ds18b20_delay(1);d
29、at=1;uchar read_onechar()/讀一字節(jié)uchar value=0,i;for(i=8;i0;i-)value=1;dq=0;ds18b20_delay(1);dq=1;if(dq=1)value|=0x80;elsevalue&=0x7f;ds18b20_delay(4);return value;uint read_wendu() /ds18b20讀溫度 uchar a=0,b=0;uint wen=0x0000;ds18b20_init();/初始化write_onechar(0xcc);/ 跳過(guò)讀序號(hào)列號(hào)的操作write_onechar(0x44);/ 啟動(dòng)溫度轉(zhuǎn)換
30、ds18b20_delay(150);ds18b20_init();/初始化write_onechar(0xcc);/跳過(guò)讀序號(hào)列號(hào)的操作write_onechar(0xbe);/讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度ds18b20_delay(150);b=read_onechar();/讀取溫度值低位a=read_onechar();/讀取溫度值高位wen=a;wen=(wen0;k-) ds1302_io=acc0;ds1302_sclk=0; /拉低sclkds1302_sclk=1; /拉高sclkacc=1;uchar read_byte() uchar k; for
31、(k=8;k0;k-) acc7=ds1302_io;ds1302_sclk=1; /拉高sclkds1302_sclk=0; /拉低sclkacc=1;return acc; void ds1302_write(uchar add,uchar date)ds1302_rst=0;ds1302_sclk=0; /在rst沒(méi)拉高之前先把sclk置0ds1302_rst=1;write_byte(add);write_byte(date);ds1302_sclk=1; ds1302_rst=0; uchar ds1302_read(uchar add)uchar temp;ds1302_rst=0
32、;ds1302_sclk=0; /在rst沒(méi)拉高之前先把sclk置0ds1302_rst=1;write_byte(add);temp=read_byte();ds1302_sclk=1; ds1302_rst=0;return temp;void ds1302_init() /ds1302初始化 ds1302_rst=0;ds1302_sclk=1; ds1302_write(0x8e,0x00);/寫允許ds1302_write(0x80,0x58);ds1302_write(0x82,0x56);ds1302_write(0x84,0x23);ds1302_write(0x86,0x21
33、);ds1302_write(0x88,0x12);ds1302_write(0x8a,0x02);ds1302_write(0x8c,0x10);ds1302_write(0x8e,0x80);/寫保護(hù) /*lcd1602*/void lcd_write_com(uchar com) /命令字寫入lcd單元中 lcd1602_rw=0; delay1(); lcd1602_rs=0; / rw=1,rs=0,寫lcd命令字 delay1(); p0=com; /將com中的命令字寫入lcd數(shù)據(jù)口 delay1(); lcd1602_e=1; /e端時(shí)序 delay1(); lcd1602_e
34、=0; delay1(); lcd1602_rw=1; delay(5);void lcd_write_date(uchar date) /數(shù)據(jù)寫入lcd單元中 lcd1602_rw=0; delay1(); lcd1602_rs=1; / rw=0,rs=1,寫lcd命令字 delay1(); lcd1602_e=1; / e端時(shí)序 delay1(); p0=date; / 將dat中的顯示數(shù)據(jù)寫入lcd數(shù)據(jù)口 delay1(); lcd1602_e=0; delay1(); lcd1602_rw=1; delay(5);void lcd1602_init() /lcd初始化函數(shù)uchar
35、lcdnum;p3=0xdf;lcd_write_com(0x38);lcd_write_com(0x0c);lcd_write_com(0x06);lcd_write_com(0x01);lcd_write_com(0x80);for(lcdnum=0;lcdnum8;lcdnum+) /寫第一行數(shù)據(jù) lcd_write_date(tabe1lcdnum);delay(2);lcd_write_com(0x80+0x40); /寫入第二行數(shù)據(jù) for(lcdnum=0;lcdnum4;decimal=decimal*10+(bcd&=0x0f);return decimal; void we
36、ndu_decimal(uint dat) /溫度轉(zhuǎn)換后送顯示float temp;temp=dat*0.625; /dat*0.0625*10wendu_shi=temp/100; /取十位 temp除不用定義類型wendu_ge =(uint)temp)%100/10; /取個(gè)位 temp求模要定義類型,為16位,故定義uintwendu_shu=(uint)temp)%100%10; /取小數(shù)lcd_write_com(0x80+0x40+10); /送顯示lcd_write_date(0x30+wendu_shi);lcd_write_date(0x30+wendu_ge);lcd_w
37、rite_date(0x2e); lcd_write_date(0x30+wendu_shu);lcd_write_date(0xdf); /溫度符號(hào)lcd_write_date(0x43);void write_week(uchar we) /星期送顯示lcd_write_com(0x80+0x0d);switch(we)case 1: lcd_write_date(m);lcd_write_date(0); lcd_write_date(n); break;case 2: lcd_write_date(t);lcd_write_date(u); lcd_write_date(e); bre
38、ak;case 3: lcd_write_date(w);lcd_write_date(e); lcd_write_date(d); break;case 4: lcd_write_date(t);lcd_write_date(h); lcd_write_date(u); break;case 5: lcd_write_date(f);lcd_write_date(r); lcd_write_date(t); break;case 6: lcd_write_date(s);lcd_write_date(a); lcd_write_date(t); break;case 7: lcd_write
39、_date(s);lcd_write_date(u); lcd_write_date(n); break; /*按鍵處理*/uchar key_bcd(uchar key_decimal) /轉(zhuǎn)成ds1302所需的bcd碼 uchar temp;temp=(key_decimal/10)&0x0f)59)miao=0;break;case 2:fen+;if(fen59)fen=0;break;case 3:shi+;if(shi23)shi=0;break;case 4:week+;if(week7)week=1;break;case 5:ri+;if(ri31)ri=1;break;cas
40、e 6:yue+;if(yue12)yue=1;break;case 7:nian+;if(nian99)nian=0;break;if(down=0) /減鍵處理delay(2);flag_down=1;/減 更新標(biāo)志while(!down);switch(count)case 1:miao-;if(miao=255)miao=59;break;case 2:fen-;if(fen=255)fen=59;break;case 3:shi-;if(miao=255)shi=23;break;case 4:week-;if(week1)week=7;break;case 5:ri-;if(ri1
41、)ri=31;break;case 6:yue-;if(yue1)yue=12;break;case 7:nian-;if(nian=255)nian=99;break;/*24c02*/void alarm_ring()if(alarm_on=1)/alarm_on=1 為鬧鐘有效if(shi=alarm_shi & fen=alarm_fen & miao=alarm_miao) flag_alarm=1;/鬧鐘時(shí)間到,鬧鐘標(biāo)志位置1if(flag_alarm=1)uchar i,j,t;t=30;for(i=0;i200;i+) alarm_out=alarm_out;for(j=0;jt;j+);if(set=0 | up=0 | down=0 | nao1=0|nao2=0|nao3=0|nao4=0) /鬧鐘響時(shí),按任意鍵取消鬧鐘while(!set);while(!up);while(!down);while(!nao1|!nao2|!nao3|!nao4);flag_alarm=0;alarm_out=1;void c02_init()c_init();alarm_shi=c02_read_add(1);/讀取鬧鐘時(shí)delay(200);alarm_fen=c02_read_add(2);/分delay(200);ala
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房無(wú)線監(jiān)控銷售合同范本
- 個(gè)人車位買賣合同
- MySQL數(shù)據(jù)庫(kù)原理設(shè)計(jì)與應(yīng)用模擬練習(xí)題(含答案)
- 個(gè)人代簽合同授權(quán)委托書(shū)
- 中級(jí)電工模擬習(xí)題(附參考答案)
- 單位解除員工合同范本
- 廠房鐵皮拆除合同范本
- 《鋪滿金色巴掌的水泥道》教學(xué)反思
- 《認(rèn)識(shí)物體和圖形》數(shù)學(xué)教學(xué)反思
- 勞務(wù)服務(wù)外包項(xiàng)目合同范本
- 北師大版 數(shù)學(xué) 三年級(jí)下冊(cè) 單元作業(yè)設(shè)計(jì) 面積
- 智能農(nóng)業(yè)除草機(jī)器人研究現(xiàn)狀與趨勢(shì)分析
- 風(fēng)電工作流程圖
- 社會(huì)救助公共基礎(chǔ)知識(shí)題庫(kù)及答案
- 《論文所用框架圖》課件
- 人教版三年級(jí)下冊(cè)說(shuō)課標(biāo)、說(shuō)教材
- 2022版《義務(wù)教育科學(xué)課程標(biāo)準(zhǔn)》試題及答案
- 《民法典》背景下違約精神損害賠償制度適用問(wèn)題
- 松下機(jī)器人操作手冊(cè)
- 數(shù)字電路邏輯設(shè)計(jì)(第3版)PPT全套完整教學(xué)課件
- 境外道路貨物運(yùn)輸應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論