電子萬(wàn)年歷設(shè)計(jì)論文_第1頁(yè)
電子萬(wàn)年歷設(shè)計(jì)論文_第2頁(yè)
電子萬(wàn)年歷設(shè)計(jì)論文_第3頁(yè)
電子萬(wàn)年歷設(shè)計(jì)論文_第4頁(yè)
電子萬(wàn)年歷設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 1章 引 言隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國(guó)民經(jīng)濟(jì)的個(gè)人領(lǐng)域得到了廣泛的運(yùn)用。單片機(jī)以體積小、功能全、性?xún)r(jià)比高等諸多優(yōu)點(diǎn),在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測(cè)控領(lǐng)域的應(yīng)用中獨(dú)占鰲頭,單片機(jī)開(kāi)發(fā)技術(shù)已成為電子信息、電氣、通信、自動(dòng)化、機(jī)電一體化等專(zhuān)業(yè)技術(shù)人員必須掌握的技術(shù)。而電子萬(wàn)年歷作為電子類(lèi)小設(shè)計(jì)不僅是市場(chǎng)上的寵兒,也是單片機(jī)實(shí)驗(yàn)中一個(gè)很常用的題目。因?yàn)樗泻芎玫拈_(kāi)放性和可發(fā)揮性,因此對(duì)設(shè)計(jì)者的要求也比較高,不僅考察了對(duì)單片機(jī)的掌握能力,更加強(qiáng)調(diào)了對(duì)單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計(jì)上要力求簡(jiǎn)潔,功能上盡量齊全,顯示界面也要出色。數(shù)字顯示的日歷鐘已經(jīng)越來(lái)越流行,

2、特別是適合在家庭居室、辦公室、大廳、會(huì)議室、車(chē)站和廣場(chǎng)等使用。集溫度、 時(shí)間、 日歷、 星期于一體,采用液晶顯示,設(shè)計(jì)電路更加簡(jiǎn)單直觀,省去了用數(shù)碼管顯示的電路復(fù)雜性。通過(guò)按鍵可以調(diào)整更改時(shí)間和日歷,并且還可以設(shè)置鬧鐘,這樣就組成了一個(gè)多功能的萬(wàn)年歷。第 2 章 方案論證2.1 方案設(shè)計(jì)與論證2.1.1 控制部分的方案選擇用可編程邏輯器件設(shè)計(jì),使用 FPGA勾造數(shù)字電子系統(tǒng),設(shè)計(jì)者可以不用考慮芯片部的具體結(jié)構(gòu),也不用顧慮與外部的電路連接。設(shè)計(jì)者只需依據(jù)電路所要完成的具體邏輯功能,然后設(shè)法用軟件描述出來(lái)即可。至于數(shù)據(jù)在芯片部的處理過(guò)程, 設(shè)計(jì)者不用考慮,但設(shè)計(jì)者可以通過(guò)仿真軟件觀察和驗(yàn)證數(shù)據(jù)的處

3、理結(jié)果。這種設(shè)計(jì)方法,極降低了設(shè)計(jì)難度,提高了工作效率,但設(shè)計(jì)成本較高。用單片機(jī)來(lái)作為主控制部分,實(shí)現(xiàn)時(shí)間、溫度同步顯示的萬(wàn)年歷,為了使用的方便性,還可以通過(guò)設(shè)置按鍵來(lái)更改時(shí)間和鬧鐘。這正是利用了51 單片機(jī)的多管腳功能性,4 個(gè) 8 位并行 I/O 口,定時(shí)計(jì)數(shù)端口,中斷端口,這使得操作起來(lái)更加方便,通過(guò)軟件可以隨時(shí)的調(diào)整和更改,使得更加精確。通過(guò)認(rèn)真的分析與討論,最終決定采用單片機(jī)來(lái)作為主控制部分,這樣制作也方便,價(jià)格也相對(duì)較低。2.1.2 顯示部分的方案選擇可以通過(guò)數(shù)碼管來(lái)顯示時(shí)鐘的日歷、時(shí)間、 溫度, 使用數(shù)碼管的優(yōu)點(diǎn)是直觀清楚,適合用在光線較暗的地方,但是數(shù)碼管的功耗大,顯示單一,并

4、且在電路 制作上布線復(fù)雜,難度較高。顯示電路還可以采用液晶1602 來(lái)實(shí)現(xiàn)。液晶顯示器具有微功耗、體積小、顯示容豐富、超薄輕巧等諸多優(yōu)點(diǎn),在本題的制作中,用液晶來(lái)實(shí)現(xiàn)數(shù)字信息的顯示是比較合適的一種選擇。2.2 系統(tǒng)整體方案的設(shè)計(jì)與論證通過(guò)初步的選擇,我們最終決定采用單片機(jī)AT89C52作為時(shí)鐘的主控制部分,LCD1602乍為顯示部分,時(shí)鐘信號(hào)采用芯片 DS1302 DS18b20M度傳感器用 作溫度采集,通過(guò)設(shè)置4 個(gè)按鍵來(lái)實(shí)現(xiàn)時(shí)間的調(diào)整,鬧鐘的開(kāi)關(guān)。這五個(gè)主要部分基本上就實(shí)現(xiàn)了集日歷、時(shí)間、星期、溫度、鬧鐘于一體的多功能萬(wàn)年歷。精 確度高,顯示直觀,輕巧的優(yōu)越性具有很高的使用價(jià)值。第3章硬件

5、電路設(shè)計(jì)3.1 系統(tǒng)硬件設(shè)計(jì)框圖此系統(tǒng)的硬件部分主要由主控制器單片機(jī),顯示電路,時(shí)鐘電路,溫感電路構(gòu)成系統(tǒng)電路框圖如圖3-1所示。圖3-13.2 主控電路時(shí)鐘主控電路由單片機(jī) AT89C52E片控制,8位P0 口作為數(shù)據(jù)的輸出通道, 外接時(shí)鐘電路,復(fù)位電路,蜂鳴器,溫度傳感器。P3.4管腳接收時(shí)鐘芯片DS1302 發(fā)出的時(shí)鐘信號(hào),P3.3管腳與時(shí)鐘芯片的數(shù)據(jù)傳輸口相連,收發(fā)讀寫(xiě)信號(hào),P3.2管腳用來(lái)驅(qū)動(dòng)蜂鳴器,P2.4-P2.7管腳分別接按鍵,用來(lái)調(diào)整修改時(shí)間。P1.4管 腳與溫度傳感器DS18B201連,接收溫感信號(hào)。3.3 AT89C52主要性能介紹AT89C5是一種低功耗、高性能CMOS

6、8微控制器,具有8K在線系統(tǒng)可編程 Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī) 編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使AT89C5為 眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52I有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash, 256字節(jié)RAM,32位I/O 口線,看門(mén)狗定時(shí)器,2個(gè)數(shù)據(jù)指針, 三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工用行口,片晶振及時(shí) 鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可

7、選擇節(jié)電模式。 空閑模式下,CPU亭止工作,允許RAM定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉 電保護(hù)方式下,RAM&被彳存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中 斷或硬件復(fù)位為止。P0口是一個(gè)8位漏極開(kāi)路的雙向I/O 口。作為輸出口 ,每位能驅(qū)動(dòng)8個(gè)TT出輯 電平。對(duì)P謠口寫(xiě)“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ) 器時(shí),P0口也被彳為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0ft有部上拉電阻。 在flash編程時(shí),P0口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程 序校驗(yàn)時(shí),需要外部上拉電阻。P1 口是一個(gè)具有部上拉電阻的8位雙向I/O 口,pl輸出緩沖器

8、能驅(qū)動(dòng)4個(gè) TTL 邏輯電平。對(duì)P1 端口寫(xiě)“ 1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL )。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2) 和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在flash編程和校 驗(yàn)時(shí),P1 口接收低8位地址字節(jié)。P2 口是一個(gè)具有部上拉電阻的8 位雙向 I/O 口, P2 輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL 邏輯電平。對(duì)P2 端口寫(xiě)“ 1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,

9、將輸出電流( IIL )。在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX DPTR時(shí),P2 口送出高八位地址。在這種應(yīng)用中, P2 口使用很強(qiáng)的部上 拉發(fā)送1。在使用8位地址(如MOVX R)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2t® 存器的容。在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。P3 口是一個(gè)具有部上拉電阻的8 位雙向 I/O 口, p2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3 端口寫(xiě)“ 1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL )。P3口

10、亦彳為AT89C5特殊功能(第二功能)使用,如圖3-2所示。在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。3-23.4 DS1302 芯片的介紹DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘 /日歷電路提 供秒分時(shí)日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整時(shí)鐘操作可通過(guò)AM/PM指示決定采用24或12小時(shí)格式DS1302與單片機(jī)之間能簡(jiǎn)單地采用同 步串行的方式進(jìn)行通信僅需用到三個(gè)口線 1 RES復(fù)位2 I/O數(shù)據(jù)線3 SCL牌行時(shí)鐘時(shí)鐘/RAM 的讀/寫(xiě)數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31 個(gè)字節(jié)的字符組

11、方式通信DS1302工作時(shí)功耗很低保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。DS1302是由DS1202改進(jìn)而來(lái)增加了以下的特性雙電源管腳用于主電源和備份電源供應(yīng)Vcc1 為可編程涓流充電電源附加七個(gè)字節(jié)存儲(chǔ)器它廣泛應(yīng)用于傳真便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域下面將主要的性能指標(biāo)作一綜合:1. 實(shí)時(shí)時(shí)鐘具有能計(jì)算2100 年之前的秒分時(shí)日日期星期月年的能力還有閏年調(diào)整的能力2. 31 X 8位暫存數(shù)據(jù)存儲(chǔ)RAM3. 串行 I/O 口方式使得管腳數(shù)量最少4. 寬圍工作電壓2.0-5.5V5. 工作電流2.0V 時(shí) , 小于 300nA6. 讀/寫(xiě)時(shí)鐘或RAM數(shù)據(jù)時(shí)有兩種傳送方式單字節(jié)傳送和多字

12、節(jié)傳送7. 8 腳 DIP 封裝或可選的8 腳 SOIC 封裝(根據(jù)表面裝配)8. 簡(jiǎn)單3 線接口9. 與 TTL 兼容Vcc=5V10. 可選工業(yè)級(jí)溫度圍-40 +8511. .1 管腳說(shuō)明管腳描述:管腳配置:圖 3-3圖 3-412. .2 DS1302 時(shí)鐘信號(hào)設(shè)置模式如圖3-5所示圖3-53.5 LCD1602液晶介紹模塊組件部主要由LCD顯示屏、控制器、列驅(qū)動(dòng)器和偏壓產(chǎn)生電路構(gòu)成。LCD顯示屏為行和列交叉形成的點(diǎn)陣,以 5X8點(diǎn)陣的字符結(jié)構(gòu)模式和設(shè)置 的顯示字符數(shù)目,選擇適宜的行數(shù),分單屏、雙屏或者多屏顯示規(guī)定的字符。對(duì) 于雙屏或者多屏顯示結(jié)構(gòu)的LCD每一顯示屏結(jié)構(gòu)部分,均由各自獨(dú)立

13、的使能信 號(hào)E控制。列驅(qū)動(dòng)器與控制器配套使用,它接收來(lái)自控制器的振蕩、幀同步輸出、用行 輸出的數(shù)據(jù)和移位及鎖存脈沖,產(chǎn)生列交流掃描驅(qū)動(dòng)信號(hào)??刂破鹘邮軄?lái)自MPU的指令和數(shù)據(jù),控制著整個(gè)模塊的工作,由CGROMCGRAMDDRA疇字符存儲(chǔ)域、以及與 MPUffi列驅(qū)動(dòng)器的I/O接口、指令寄存和 譯碼機(jī)構(gòu)、地址計(jì)數(shù)器等部分組成。在控制器的控制下,模塊通過(guò)數(shù)據(jù)總線 DB0DB和E、R/W RS三個(gè)輸入控制端與MPUR口。這三根控制線按照規(guī)定的時(shí)序相互協(xié)調(diào)作用,使控制器通過(guò)數(shù)據(jù)總線 DB接收MP3送來(lái)的指令和數(shù)據(jù), 從CGROM找到欲顯示字符的字符碼,送入 DDRAM在LCD顯示屏上與DDRA解 儲(chǔ)單

14、元對(duì)應(yīng)的規(guī)定位置顯示出該字符。 控制器還可以根據(jù)MPU勺指令,實(shí)現(xiàn)字符 的顯示、閃爍和移位等顯示效果。3.5.1 端口的定義:管腳號(hào)符號(hào)功能1Vss電源地(GND2Vdd電源電壓(+5V)3V0LCD驅(qū)動(dòng)電壓(可調(diào))4RS寄存器選擇輸入端,輸入 MP3擇模塊部寄存器類(lèi)型 心;RS=0當(dāng)MPU4行寫(xiě)模塊操作,指向指令寄存器;當(dāng)MPU!行讀模塊操作,指向地址計(jì)數(shù)器;RS=1無(wú)論MPU實(shí)操作還是寫(xiě)操作,均指向數(shù)據(jù)寄存 器5R/W讀寫(xiě)控制輸入端,輸入 MP四擇讀/寫(xiě)模塊操作信號(hào);R/W=0讀操作;R/W=1寫(xiě)操作6E使能信號(hào)輸入端,輸入MPUi?/寫(xiě)模塊操作使能信號(hào); 讀操作時(shí),高電平有效;寫(xiě)操作時(shí),

15、下降沿有效7DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道8DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道9DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道10DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道11DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道12DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道13DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道14DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道15A背光的正端+5V16K背光的負(fù)端0V3.5.2 操作時(shí)序圖寫(xiě)操作時(shí)序如圖3-6圖3-6讀操作時(shí)序如圖3-7圖3-73.5.3 指令說(shuō)明一般情況

16、下,部RAM勺數(shù)據(jù)傳送的功能使用最為頻繁,因此,RAW的地址指針 所具備的自動(dòng)加一或減一功能,在一定程度上減輕了 MP編程負(fù)擔(dān)。止匕外,由于 數(shù)據(jù)移位指令與寫(xiě)顯示數(shù)據(jù)可同時(shí)進(jìn)行, 這樣用戶(hù)就以最少系統(tǒng)開(kāi)發(fā)時(shí)間, 達(dá)到 最高的編程效率。這里值得一提的是,在每次訪問(wèn)模塊之前,MP四首先檢測(cè)忙標(biāo)志BF,確認(rèn)BF=0 后,訪問(wèn)過(guò)程才能進(jìn)行。Clear display 清顯示指令碼:RSRWDB6 DBS DB4 DB3 DB2 DB1 DB00Q00000 J.001Return home歸位指令碼:RSRWDB6 DBS DB4 DBS DB2 DEI DR。001 000000*Entry mod

17、e set設(shè)置輸入模式指令碼:RS RW DBDB6 DB5 DB4 DBS DB2 DB1 DBO00000001LDsI/D=1 ,完成一個(gè)字符碼傳送后,AC自動(dòng)加1;I/D=0,完成一個(gè)字符碼傳送后,AC自動(dòng)減1;S=1,將全部顯示向右(I/D=0)或者向左(I/D=1)移位;S=0,顯示不發(fā)生移位;Display on/off control顯示開(kāi)/關(guān)控制指令碼:RSRWDB7DB6DBSDB4DB3DB2DB1DBO0000001Dc_BD:顯示開(kāi)/關(guān)控制標(biāo)志:D=1,開(kāi)顯示;D=0,關(guān)顯示;C:光標(biāo)顯示控制標(biāo)志:C=1,光標(biāo)顯示;C=Q光標(biāo)不顯示;B:閃爍顯示;f$制標(biāo)志:B=1,

18、光標(biāo)所指位置上,交替顯示全黑點(diǎn)陣和顯示字符, 產(chǎn)生閃爍效果。Cursor or display shift光標(biāo)或顯示移位指令碼:RSR WDB7DB6DB5DB4DB3DB2DB1DBO000001S/CR/L*光標(biāo)或顯示移位指令可使光標(biāo)或顯示在沒(méi)有讀寫(xiě)顯示數(shù)據(jù)的情況下, 向左或向右 移動(dòng);運(yùn)用此指令可以實(shí)現(xiàn)顯示的查找或替換; 在雙行顯示方式下,第一行和第 二行會(huì)同時(shí)移位;當(dāng)移位越過(guò)第一行第四十位時(shí),光標(biāo)從第一行跳到第二行, 但 顯示數(shù)據(jù)只在本行水平移位,第二行的顯示決不會(huì)移進(jìn)第一行;倘若僅執(zhí)行移位 操作,地址計(jì)數(shù)器AC的容不會(huì)發(fā)生改變。S/CR/L說(shuō)明00光標(biāo)向左移動(dòng),AC自動(dòng)減一01光標(biāo)向

19、右移動(dòng),AC自動(dòng)加一10光標(biāo)和顯本,起向左移動(dòng)11光標(biāo)和顯本,起向右移動(dòng)第4章系統(tǒng)程序的設(shè)計(jì)多功能萬(wàn)年歷系統(tǒng)的軟件設(shè)計(jì)主要由主程序、溫度子程序、時(shí)鐘程序、定時(shí)中斷子程序及液晶顯示子程序組成。由于C語(yǔ)言編寫(xiě)的程序邏輯性強(qiáng),也方便移植。而匯編雖然效率高,但相對(duì)比較繁瑣,特別是遇到綜合性強(qiáng)的邏輯運(yùn)算時(shí), 執(zhí)行起來(lái)比較困難。下面主要對(duì)時(shí)鐘程序和鬧鐘子程序加以詳細(xì)介紹。4.1 高準(zhǔn)確度時(shí)鐘程序算法電子計(jì)時(shí)器通常以石英晶振為時(shí)鐘源。時(shí)鐘源的頻率通常為幾十khz 乃至幾十mhz,而所用時(shí)鐘的最小計(jì)單位一般在 0.01s1s。高頻的時(shí)鐘源脈沖通過(guò)分 頻器后產(chǎn)生基本定時(shí)脈沖。電子計(jì)時(shí)器的計(jì)時(shí)部分就是對(duì)基本定時(shí)脈

20、沖進(jìn)行累 加,產(chǎn)生秒、分、時(shí)等時(shí)間信息乃至日、月、年等日期信息。而常常一個(gè)電子時(shí) 鐘會(huì)出現(xiàn)走時(shí)誤差,一個(gè)常規(guī)電子計(jì)時(shí)器的計(jì)時(shí)準(zhǔn)確度,取決于晶振標(biāo)稱(chēng)頻率 ( fs )與實(shí)際頻率(fo )的頻率偏差和晶振頻率的時(shí)漂、溫漂等離散參數(shù)。普通晶振的實(shí)際頻率與標(biāo)稱(chēng)頻率有較大的偏差,可達(dá)萬(wàn)分之五,折算到一天計(jì)時(shí)誤差就是 43.2s 。而減少計(jì)時(shí)誤差的最好方法就是用軟件控制,我們本實(shí)驗(yàn)中用到的AT89C52的晶振頻率是12MHz實(shí)際長(zhǎng)期平均振蕩頻率fo=12.0006mhz,量化精 度取1字節(jié),取tns=10ms,則分頻系數(shù)為:n0=fo/(12 Xtns)=12.0006/(12 X 10 6 X10 -2

21、)=10000.5 令 n=int(n0)=10000ni 為第 i 決定時(shí)值,可能是10000或10001,這取決于nti 的進(jìn)位;nti 為第 i次尾數(shù)暫存值。每次定時(shí)中斷服務(wù)程序均執(zhí)行上式,取得第i 次定時(shí)計(jì)數(shù)值,然后實(shí)時(shí)時(shí)鐘增加10ms完成時(shí)鐘功能。這樣進(jìn)彳T軟件計(jì)時(shí)校正后,每 10天的計(jì) 時(shí)誤差1s。所以這種基于軟件提高時(shí)鐘準(zhǔn)確度的算法,具有極高的實(shí)用價(jià)值。4.2 定時(shí)鬧鐘程序時(shí)鐘的鬧鐘主要是通過(guò)外部設(shè)置的按鍵來(lái)定時(shí),當(dāng)時(shí)鐘的時(shí)間與設(shè)置的時(shí)間相同時(shí), 將會(huì)觸發(fā)中斷源,進(jìn)入鬧鐘子程序,這時(shí)蜂鳴器將會(huì)被接通,發(fā)出聲音。當(dāng)中斷時(shí)間達(dá)到規(guī)定的時(shí)間后,鬧鐘程序講會(huì)自動(dòng)退出,蜂鳴器停止響。鬧鐘工

22、作的程序框圖如圖3-8 所示設(shè)置鬧鐘時(shí)間圖3-8第 5 章 調(diào)試與結(jié)果分析經(jīng)過(guò)理論分析和仿真調(diào)試后,最后按照硬件電路制作出了成品多功能電子萬(wàn)年歷,現(xiàn)在進(jìn)入了最后的調(diào)試階段。開(kāi)始為整個(gè)系統(tǒng)接上電源后,液晶顯示器不亮,通過(guò)調(diào)節(jié)與液晶顯示器電源端相連的電位器,顯示屏點(diǎn)亮了。5.1 調(diào)試我們發(fā)現(xiàn)雖然顯示屏亮了,但是時(shí)鐘不走,復(fù)位也不起作用,4 個(gè)時(shí)間設(shè)置按鍵也沒(méi)有反應(yīng),通過(guò)認(rèn)真的分析后,軟件應(yīng)該是沒(méi)有問(wèn)題的,因?yàn)樵诜抡娴臅r(shí)候是能正常工作的,這只可能是在硬件上出現(xiàn)了問(wèn)題,通過(guò)檢查電路的焊接,連線都沒(méi)有錯(cuò)誤的情況下,最后確定應(yīng)該是某個(gè)模塊沒(méi)有正常工作,通過(guò)查資料,發(fā)現(xiàn)時(shí)鐘芯片DS1302的數(shù)據(jù)端口和時(shí)鐘信

23、號(hào)端口要接上拉電阻,這樣才能正常的工作,通過(guò)調(diào)試,最后時(shí)鐘開(kāi)始走起來(lái),達(dá)到了預(yù)期的效果。5.2 結(jié)果分析時(shí)鐘雖然是正常的走了,整個(gè)系統(tǒng)也運(yùn)行順暢,但是時(shí)鐘精度不夠高。5.2.1 誤差分析一個(gè)常規(guī)的電子時(shí)鐘走時(shí)不準(zhǔn)的原因主要是時(shí)鐘標(biāo)稱(chēng)頻率與實(shí)際頻率有誤差,這樣導(dǎo)致時(shí)鐘計(jì)數(shù)不準(zhǔn)確,另外是環(huán)境的溫度影響,也會(huì)導(dǎo)致走時(shí)有誤差,因?yàn)槊總€(gè)元器件都有一個(gè)正常工作溫度圍,但超出這個(gè)圍后,就會(huì)使元件不能正常工作,這樣也就導(dǎo)致了整個(gè)系統(tǒng)的誤差產(chǎn)生。第 6 章 總結(jié)多功能萬(wàn)年歷是能同時(shí)顯示日歷、星期、時(shí)間、溫度的電子時(shí)鐘。這次的畢業(yè)設(shè)計(jì)從選題上也花了很多時(shí)間,板也做了一塊又一塊,在做的過(guò)程中還是出現(xiàn)了很多常見(jiàn)的錯(cuò)誤

24、,比如在畫(huà)原理圖的時(shí)候,連線連錯(cuò),網(wǎng)絡(luò)標(biāo)號(hào)不對(duì)應(yīng),電源和地接反,這些都是很小的錯(cuò)誤,但是小錯(cuò)誤也能成大錯(cuò),導(dǎo)致最后做出來(lái)的板不能實(shí)現(xiàn)預(yù)期的功能。另外就是對(duì)一些芯片的運(yùn)用不熟悉,導(dǎo)致顯示亂碼也是很正常的,比如時(shí)鐘芯片 DS1302的數(shù)據(jù)端口和信號(hào)端口必須接上拉電阻后再接電源端,否則芯片不能正常工作,軟件無(wú)常運(yùn)行,整個(gè)系統(tǒng)也將癱瘓無(wú)常顯示。還有液晶顯示器的電源端也要接個(gè)電位器,一是方便調(diào)節(jié)明暗度,二是防止電流過(guò)大,燒壞顯示屏,這些都是很基本的知識(shí),但必須要熟記和掌握,以致才能運(yùn)用的更加熟練。另外對(duì)于這次的畢業(yè)設(shè)計(jì),感覺(jué)自己的能力又得到了一定的提高,特別是對(duì)設(shè)計(jì)的整體流程有了更清晰的認(rèn)識(shí),包括選題、

25、設(shè)計(jì),制版,調(diào)試、寫(xiě)報(bào)告。但是還有很多要彌補(bǔ)的地方,比如寫(xiě)軟件程序,對(duì)于一個(gè)學(xué)單片機(jī)的人來(lái)說(shuō),不僅要懂硬件,更要懂軟件,只有都懂了,才能設(shè)計(jì)出更好的電路,要學(xué)好這些,只有不斷的去嘗試,嘗試中不斷的發(fā)現(xiàn)錯(cuò)誤,不斷的改正錯(cuò)誤,只有這樣能力才能得到一步步的提高。參考文獻(xiàn)1 權(quán)昌.興富單片機(jī)原理及應(yīng)用華南理工大學(xué),2007年8月2 正振 . 電子電路設(shè)計(jì)與制作廣西交通職業(yè)技術(shù)學(xué)院信息工程系2007 年3 科技.8051系列單片機(jī)C程序設(shè)計(jì).:人民郵電,2006年4 譚浩強(qiáng) .C 程序設(shè)計(jì). :清華大學(xué),1991 年附錄一電路原理圖附錄D1C322P(dU2丫232.768KJ1612345678910

26、 1112 1314 15161 GND2 VCC34 RS5 RW6 E7 D0一8 口廠9 D2一10 D3一11 D4一72 - D5-13 D614 D71516|S5| WR1r234DO35RS6RW7E8910 11 _至DO2 13DO1 14RST 15 1622PU1P1.0P1.1P1.2P1.3P1.4P1.5/MOSP1.6/IMSP1.7/SCRSTDS13021234Vcc- p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.O123487658DO1 VCC6 DO25 RSTVCC40939 D0 838 D137 D2636 D35

27、35D4434 D5 333D623r D7 1J9987654321SIP9DS182BSIP1622PC1二 Y112MHz1718192022PP3.0XDP3.1/TXDP3.2/INTOP3.3/INTIP3.4/T0P3.5/T1P3.6/WRP3.7DRXTAL2XTAL1GNDAT89SC1EA/Vpp-310 VCC30ALE/PROG 30PSEN-29P2.7T5251、24口P2.P2.P2.S33-<S4281272221P2.1P2.0S10S2附錄二電路PCB圖引口 1、附錄三元件清單元件個(gè)數(shù)電阻1K3排阻10K1晶振12M1晶振32.768K1電角單電容2

28、2u1瓷片電容22p4單片機(jī)AT89C521溫感器DS18B201三極管NPN1時(shí)鐘芯片DS13021電位器10K1蜂鳴器1源程序#include<reg51.H>#include<INTRINS.H> #define uchar unsigned char#define uint unsigned int#define TIME (0X10000-50000)#define FLAG 0XEF / 鬧鐘標(biāo)志sbit rst=P3A5;sbit clk=P3A4;sbit dat=P3A3;sbit rs=P1A5;sbit rw=P1A6;sbit e=P1A7;sb

29、it DQ=P1A4; / 溫度輸入口sbit P3_2=P3A2;sbit ACC_7=ACCA7;uchar i=20,j,time116;/ 全局變量及常量定義uchar alarm2,time215,time3;uchar code Day=31,28,31,30,31,30,31,31,30,31,30,31;/12日期 ( 非閏年 )/ 音律表uint code table1=64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178,65217;/ 發(fā)聲部分的延時(shí)時(shí)間uc

30、har code table2=0x82,1,0x81,0xf4,0xd4,0xb4,0xa4, 0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0;/LCD 自建字uchar code tab=0x18,0x1b,5,4,4,5,3,0, 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,/0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,/ 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00;/* 溫度小數(shù)部分用查表法*/個(gè)月的最大codeUchar ditab16=0x0

31、0,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x0 7,0x08,0x08,0x09,0x09;/ 鬧鐘中用的全局變量uchar temp_data2=0x00,0x00;/讀出溫度暫放bit flag;/*11/18b20 存在標(biāo)志位微秒延時(shí)函數(shù)*/uchar th1,tl1;delay(uint t)for(;t>0;t-);/*18B20 復(fù)位函數(shù)*/ow_reset(void)uchar i;DQ=1;_nop_();_nop_();DQ=0; / delay(50); / 550usDQ=1; / delay(6);

32、/ 66us for(i=0;i<0x30;i+) if(!DQ)goto d1;d1: flag=0; DQ=1; return; delay(45); flag=1; DQ=1;/ 清標(biāo)志位 , 表示 ds1820 不存在延時(shí) 500us置標(biāo)志位,表示ds1820存在/*18B20寫(xiě)命令函數(shù)*/ 向 1-WIRE 總線上寫(xiě)一個(gè)字節(jié)void write_byte(uchar val)uchar i;for (i=8; i>0; i-) /DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ

33、=val&0x01;delay(6);val=val/2;DQ=1;delay(1);/ /66us /最低位移出右移一位/*18B20 讀 1 個(gè)字節(jié)函數(shù)*/ 從總線上讀取一個(gè)字節(jié)uchar read_byte(void)uchar i;uchar value=0;for (i=8;i>0;i-)DQ=1;_nop_();_nop_();/value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); /4us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4us if(DQ)/66usvalue|=0

34、x80;delay(6);DQ=1;return(value);/* 讀出溫度函數(shù)*/read_temp()ow_reset();/ 總線復(fù)位if(!flag)/判斷ds1820是否存在?若ds18b20不存在則返回return;/write_byte(0xCC);/write_byte(0x44);/delay(70);write_byte(0xCC);write_byte(0xBE);temp_data0=read_byte();temp_data1=read_byte(); ow_reset();write_byte(0xCC);write_byte(0x44);/ Skip ROM/發(fā)

35、轉(zhuǎn)換命令/發(fā)Skip ROM命令發(fā)讀命令溫度低8 位溫度高8 位/ Skip ROM/ 發(fā)轉(zhuǎn)換命令/* 溫度數(shù)據(jù)處理函數(shù)*/work_temp()uchar n=0,m;if(temp_data1>127)/ 負(fù)溫度求補(bǔ)碼temp_data1=(256-temp_data1);temp_data0=(256-temp_data0); n=1;time213=ditabtemp_data0&0x0f+'0'time212='.'m=(temp_data0&0xf0)>>4)|(temp_data1&0x0f)<<

36、;4);/ if(n)m-=16;time29=m/100+'0'time211=m%100;time210=time211/10+'0'time211=time211%10+'0'if(time29='0')/ 最高位為0 時(shí)都不顯示time29=0x20;if(n)/ 負(fù)溫度時(shí)最高位顯示"-"time29='-'if(time210='0')if(n)time210='-'time29=0x20;elsetime210=0x20;if(time211='

37、;0'&&time213='0') time211=time212=0x20;delay1ms(uchar time) / 延時(shí) 1msuchar i,j;for(i=0;i<time;i+)for(j=0;j<250;j+);/LCD 驅(qū)動(dòng)部分enable()rs=0;rw=0;e=0;delay1ms(3);e=1;write2(uchar i)P0=i;rs=1;rw=0;e=0;delay1ms(2);e=1;write1(uchar data *address,m)uchar i,j;for(i=0;i<m;i+,addres

38、s+)j=*address;write2(j);/LCD 顯示 lcdshow()P0=0XC;/ 顯示器開(kāi)、光標(biāo)關(guān)enable();P0=0x80;/ 寫(xiě)入顯示起始地址enable(); write1(time1,16);P0=0xc1;/ 寫(xiě)入顯示起始地址enable(); write1(time2,15);/ 自建字 zijianzi()uchar i;P0=0x40;enable(); for(i=0;i<32;i+)write2(tabi);delay1ms(2);/DS1302 讀寫(xiě)子程序write(uchar address)uchar i;clk=0;_nop_();rs

39、t=1;_nop_();for(i=0;i<8;i+)dat=address&1;_nop_();clk=1;address>>=1;clk=0;uchar read()uchar i,j=0;for(i=0;i<8;i+)j>>=1;_nop_();clk=0;_nop_();if(dat)j|=0x80;_nop_();clk=1;return(j);/ 部分顯示數(shù)據(jù)初始化timestart()time11=time113=time28=time29=time210=0x20,time214=0;time16=1,time19=2,time112

40、=3,time12='2',time13='0'time114='W',time22=time25=':'write(0xc1);alarm0=read();rst=0;write(0xc3);alarm1=read();rst=0;write(0xc5);time10=read();rst=0;/ 讀取時(shí)間 readtime()uchar i,m,n;write(0x8d);/ 讀取年份m=read();rst=0;time14=m/16+0x30;time15=m%16+0x30;write(0x8b);/ 讀取星期m=rea

41、d();rst=0;time115=m+0x30;for(i=7,n=0x89;i<11;i+=3,n-=2)/ 讀取月份和日期write(n);m=read();rst=0;time1i=m/16+0x30;time1i+1=m%16+0x30;for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m+)/ 讀取時(shí) , 分 , 秒write(n);timem=read();rst=0;time2i=timem/16+0x30;time2i+1=timem%16+0x30;time0() interrupt 1 using 1i-;if(i=0)if(j!=0) j-;

42、i=20;TH0=TIME/256,TL0=TIME%256;/ 鬧鐘部分intime1() interrupt 3TH1=th1,TL1=tl1;P3_2=!P3_2;showalarm()uchar i,j,a,b,n;ET1=1;for(j=0;j<6;j+)i=0;while(1)a=table2i;if(a=0)break;b=a&0xf;a>>=4;if(a=0)TR1=0;goto D1;a=(-a)<<1)/2;TH1=th1=table1a/256,TL1=tl1=table1a%256;TR1=1;D1:dob-;for(n=0;n&l

43、t;3;n+)readtime();lcdshow();P2=0xf7;if(P2=0xe7) delay1ms(100);if(P2=0xe7) TR1=0;ET1=0; return;) ) )while(b!=O);i+;) TR1=0;) ET1=0;)/根據(jù)日期的變動(dòng)自動(dòng)調(diào)整星期uchar setweek()(uchar i=5j,n;j=(time14&0xf)*10+(time15&0xf);n=j/4;i=i+5*n;n=j%4;if(n=1)i+=2;else if(n=2)i+=3;else if(n=3)i+=4;j=(time17&0xf)*10

44、+(time18&0xf);if(j=2)i+=3;else if(j=3)i+=3;else if(j=4)i+=6;else if(j=5)i+=1;else if(j=6)i+=4;else if(j=7)i+=6;else if(j=8)i+=2;else if(j=9)i+=5;else if(j=11)i+=3;else if(j=12)i+=5;if(n=0)if(j>2)i+;j=(time110&0xf)*10+(time111&0xf);i+=j;i%=7;if(i=0)i=7; return(i);/ 設(shè)置時(shí)間 settime() uchar

45、 i=0x85,year,month,day,n;time26=time27=0x30,time114=time115=0x20; lcdshow();while(1)P0=0xe;/ 顯示器開(kāi)、光標(biāo)開(kāi)enable(); P0=i;/ 定光標(biāo)enable(); P2=0xf7; if(P2!=0XF7) delay1ms(100);/ 延時(shí) 0.1s 去抖動(dòng)if(P2!=0XF7) j=7; if(P2=0X77) i+=3; if(i=0x8e) i=0xc2; else if(i>0xc5) i=0x85; else if(P2=0xb7) year=(time14&0xf)

46、*10+(time15&0xf); month=(time17&0xf)*10+(time18&0xf); day=(time110&0xf)*10+(time111&0xf); if(i=0x85)year+;if(year>99)year=0;if(year%4)!=0)if(month=2&&day=29) day=28;else if(i=0x88)month+;if(month>12)month=1;if(day>Daymonth-1)day=Daymonth-1;if(month=2&&(ye

47、ar%4)=0) day=29;else if(i=0x8b)day+;if(day>Daymonth-1)if(month=2&&(year%4)=0)if(day>29)day=1;if(month!=2)day=1;else if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n>23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n+;if(n>59)n=0;time23=n

48、/10+0x30;time24=n%10+0x30;time14=year/10+0x30;time15=year%10+0x30;time17=month/10+0x30;time18=month%10+0x30;time110=day/10+0x30;time111=day%10+0x30;lcdshow();else if(P2=0xd7)write(0x8c);write(time14&0xf)*16+(time15&0xf);rst=0;write(0x8a);write(setweek();rst=0;for(i=7,n=0x88;i<11;i+=3,n-=2)write(n);write(time1i&0xf)*16+(time1i+1&0xf);rst=0;for(i=0;i<7;i+=3,n-=2)write(n);writ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論