基于單片機(jī)的時鐘日歷設(shè)計_第1頁
基于單片機(jī)的時鐘日歷設(shè)計_第2頁
基于單片機(jī)的時鐘日歷設(shè)計_第3頁
基于單片機(jī)的時鐘日歷設(shè)計_第4頁
基于單片機(jī)的時鐘日歷設(shè)計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE基于單片機(jī)的萬年歷設(shè)計系部:電子與通信工程系班級:姓名:學(xué)號:指導(dǎo)教師:2012年10月7日

聲明本人所呈交的論文(設(shè)計)《基于單片機(jī)的萬年歷設(shè)計》是我在指導(dǎo)教師的指導(dǎo)和查閱相關(guān)著作下獨立進(jìn)行分析研究所取得的成果。除文中已經(jīng)注明引用的內(nèi)容外,本論文不包含其他個人已經(jīng)發(fā)表或撰寫過的研究成果。對本文的研究做出重要貢獻(xiàn)的個人和集體,均已在文中作了明確說明并表示謝意。作者簽名:日期:

摘要論文的研究工作是以單片機(jī)技術(shù)為背景展開的,并且詳細(xì)介紹了通過AT89C51單片機(jī)控制LCM1602液晶的顯示情況,以及單片機(jī)與時鐘電路、溫度傳感器之間的通信。以軟件形式對系統(tǒng)進(jìn)行控制,使得系統(tǒng)控制更具靈活與方便。本文在深入分析單片機(jī)技術(shù)的基礎(chǔ)上,解析了LCM顯示的單片機(jī)控制技術(shù)和新型溫度傳感器DS18B20單片機(jī)控制應(yīng)用,以及LCD顯示在各種電子顯示中的優(yōu)勢,同時闡述了其在日常顯示系統(tǒng)中的應(yīng)用;并且以Proteus與KeiluVision4軟件為基礎(chǔ),編寫了AT89C51單片機(jī)對LCM1602顯示控制的軟件,繪制其原理圖,并使用Proteus軟件與KeiluVision4軟件建立聯(lián)合仿真。論文主要論述了原理圖各個模塊的作用,控制軟件的各個模塊的編程。在設(shè)計的過程中,以顯示日歷、時間、溫度為主要目的,并能夠?qū)崿F(xiàn)時間調(diào)整功能。經(jīng)過一系列的前提準(zhǔn)備,到最后的仿真成功,將理論聯(lián)系實際,使本設(shè)計可以在實際中應(yīng)用,方便經(jīng)濟(jì)實用?!娟P(guān)鍵詞】溫度傳感器、單片機(jī)、萬年歷[Abstract]Thesisresearchworkisbasedonsingle-chiptechnologyexpandthebackground,anddescribedindetailbythetheAT89C51microcontrollercontrolLCM1602LCDdisplay,aswellassingle-chipclockcircuits,temperaturesensorcommunication.Intheformofasoftwaretocontrolthesystem,makingthesystemmoreflexiblecontrolandconvenience.Inthispaper,basedonin-depthanalysisofsingle-chiptechnology,analyticaltheLCMdisplaySCMcontroltechnologyandanewtemperaturesensorDS18B20MCUcontrolapplications,andtheLCDdisplayadvantagesinavarietyofelectronicdisplay,atthesametimedailydisplaysystem;andtoProteusandKeiluVision4software-basedwriteatheAT89C51microcontrollerLCM1602displayControlsoftware,drawitsschematicandtheestablishmentofajointsimulationusingtheProteussoftware,KeiluVision4software.Thesisdiscussestheroleofthevariousmodulesoftheschematicdiagram,thecontrolofthevariousmodulesofthesoftwareprogramming.Inthedesignprocess,themainpurposeistodisplayacalendar,time,temperature,andbeabletoachievetimeadjustmentfunction.Theseriespremisepreparationtothefinalsuccessofthesimulation,theorywithpractice,sothatthedesigncanbeappliedinpractice,andtofacilitateeconomicalandpractical.[Keywords]thetemperaturesensor、Singlechipmicrocomputer、Perpetualcalendar目錄一、引言 1(一)課題背景及研究概述 1(二)單片機(jī)控制系統(tǒng)簡介 1(三)課題的建立及論文完成的主要要求 1二、開發(fā)工具軟件介紹 2(一)KeiluVision4軟件簡介 2(二)Proteus軟件簡介 2(三)KeiluVision4與Proteus軟件聯(lián)合仿真 2三、系統(tǒng)硬件設(shè)計實現(xiàn) 3(一)電路設(shè)計框圖 3(二)單片機(jī)控制系統(tǒng) 31、單片機(jī)系統(tǒng)功能介紹 32、AT89C51引腳說明 33、單片機(jī)最小系統(tǒng) 5(三)主要模塊設(shè)計實現(xiàn) 61、LCD顯示模塊 62、時鐘芯片DS1302接口設(shè)計模塊 73、溫度傳感器DS18B20設(shè)計模塊 94、按鍵控制模塊 9四、軟件設(shè)計 10(一)萬年歷顯示程序 101、流程圖 102、源程序代碼 11(二)溫度轉(zhuǎn)換程序 111、流程圖 112、源程序代碼 11(三)按鍵掃描程序 121、程序結(jié)構(gòu) 122、程序功能 12(四)主程序 121、程序流程圖: 122、源程序代碼。 13五、仿真 13(一)調(diào)試聯(lián)合仿真 13(二)仿真結(jié)果 13六、總結(jié) 13致謝 14參考文獻(xiàn) 15附錄一:系統(tǒng)電路 16附錄二:源程序 17附錄三:溫度轉(zhuǎn)換子程序 30PAGE2一、引言(一)課題背景及研究概述隨著電子技術(shù)的發(fā)展,人類不斷研究,不斷創(chuàng)新紀(jì)錄。萬年歷以電腦軟件或者電子產(chǎn)品形式出現(xiàn),目前已經(jīng)不再局限于以書本形式。萬這種年歷被稱為電子萬年歷。與書本形式的萬年歷相比,電子萬年歷應(yīng)用越來越廣泛,時間顯示采用電子時鐘已經(jīng)成為一種時尚。目前市場上各式各樣的電子時鐘數(shù)不勝數(shù),但多數(shù)是只針對時間顯示,功能單一不能滿足人們?nèi)粘I钚枨?。本文提出了一種基于AT89C51單片機(jī)的萬年歷設(shè)計方案,利采用一個LCD顯示。本方案以AT89C51單片機(jī)作為主控核心,與時鐘芯片DS1302、溫度芯片DS18B20、按鍵、LCD顯示等模塊組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有4個獨立按鍵和一個LCD顯示器,能顯示豐富的信息,根據(jù)使用者的需要可以隨時對時間進(jìn)行校準(zhǔn)、選擇時間、溫度顯示等,綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。(二)單片機(jī)控制系統(tǒng)簡介AT89C51是一個低電壓,高性能的單片機(jī),內(nèi)含可反復(fù)擦寫的Flash只讀程序存儲器,在電子行業(yè)中有著廣泛的應(yīng)用。并且,只要在單片機(jī)的外圍適當(dāng)加一些必要的擴(kuò)展電路及通道接口,就可以構(gòu)成各種應(yīng)用系統(tǒng),如工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、自動控制系統(tǒng)、自動測試系統(tǒng)、檢測監(jiān)視系統(tǒng)、智能儀表、功能模塊等。因此單片機(jī)廣泛應(yīng)用于便攜式智能產(chǎn)品與家電消費品,以及工業(yè)控制,國防裝備等領(lǐng)域??傊瑔纹瑱C(jī)控制系統(tǒng)具有功能多樣、電路簡潔、成本低廉、體積小巧等諸多優(yōu)點,符合電子技術(shù)的發(fā)展趨勢。(三)課題的建立及論文完成的主要要求本文主要包括以下內(nèi)容:1、單片機(jī)最小控制系統(tǒng)、LCM1602液晶顯示模塊、DS18B20溫度傳感器模塊、DS1302時鐘芯片模塊和按鍵模塊的建立。2、編制單片機(jī)與各子模塊之間的通信程序。實現(xiàn)對LCM1602液晶顯示當(dāng)前時間及溫度,按鍵調(diào)節(jié)作用,以及按鍵提示音的控制。3、用Proteus繪制整個控制系統(tǒng)原理圖,使用Keil編譯調(diào)試程序??商娲鷮嶋H硬件進(jìn)行仿真。二、開發(fā)工具軟件介紹(一)KeiluVision4軟件簡介Keil4系列開發(fā)系統(tǒng)兼容單片機(jī),C語言軟件。和匯編相比,C語言在結(jié)構(gòu)性、功能上、可維護(hù)性、可讀性上有明顯的優(yōu)勢,并能產(chǎn)生HEX文件,因而易學(xué)易用。使用過匯編語言,再使用C來開發(fā),體會更加深刻。在研究大型軟件時更能體現(xiàn)C語言的優(yōu)勢。Keil軟件提供功能強大的集成開發(fā)調(diào)試工具和豐富的庫函數(shù),語句生成的匯編代碼容易理解。而且,該軟件不但可以進(jìn)行程序編譯,而且還可以通過其內(nèi)嵌模塊模擬51單片機(jī),實現(xiàn)在不需要連接硬件仿真器的條件下,通過數(shù)據(jù)線連接硬件系統(tǒng)對項目進(jìn)行實時仿真。另外,可以與Proteus單片機(jī)仿真軟件聯(lián)合實現(xiàn)虛擬硬件仿真。(二)Proteus軟件簡介Proteus嵌入式系統(tǒng)仿真與開發(fā)平臺是一款可以實現(xiàn)模擬電路、數(shù)字電路、PCB設(shè)計微控制器系統(tǒng)仿真等功能的EDA軟件。所有的工作先在虛擬環(huán)境下進(jìn)行。提供數(shù)碼管、顯示屏、LED、開關(guān)、鍵盤等。避免了傳統(tǒng)電子電路設(shè)計中方案更換帶來的多次購買元器件及制板,在節(jié)省設(shè)計時間和金錢的同時,提高了設(shè)計效率與質(zhì)量。Proteus軟件可以仿真AT89C51系列單片機(jī),可以直接在電路原理圖上進(jìn)行硬件的模擬仿真,進(jìn)行程序的調(diào)試,并提供進(jìn)行測試與分析的邏輯分析儀,模擬示波器等模擬儀器及仿真圖表。它是目前最好的仿真單片機(jī)及外圍器件的工具。(三)KeiluVision4與Proteus軟件聯(lián)合仿真Proteus軟件與Keil軟件之間的聯(lián)合虛擬仿真,指Keil軟件把Proteus軟件打開的單片機(jī)電路看成一個模擬的硬件電路,使用Keil軟件對程序進(jìn)行編譯、調(diào)試時連接Proteus軟件中的模擬單片機(jī)系統(tǒng),模擬單片機(jī)的系統(tǒng)狀態(tài)和Keil軟件對程序調(diào)試實時變化。這樣,可實現(xiàn)用Proteus軟件與KeiluVision4軟件聯(lián)合虛擬硬件仿真。Proteus軟件與KeiluVision軟件的聯(lián)合仿真在實際的單片機(jī)系統(tǒng)開發(fā)中被普遍應(yīng)用。用Proteus軟件與KeiluVision軟件聯(lián)合仿真像實物一樣調(diào)試,同時在屏幕上可以直觀地看到電路輸出狀態(tài),比較容易讀懂并理解所調(diào)試的程序,提高學(xué)習(xí)效率,同時降低了學(xué)習(xí)所需的硬件成本。

三、系統(tǒng)硬件設(shè)計實現(xiàn)(一)電路設(shè)計框圖(如圖1)溫度采集電路時鐘電路按鍵調(diào)整電路單片機(jī)最小系統(tǒng)溫度采集電路時鐘電路按鍵調(diào)整電路單片機(jī)最小系統(tǒng)AT89C51單片機(jī)LCD顯示電路圖1電路設(shè)計框圖1、單片機(jī)系統(tǒng)功能介紹AT89C51是一種帶4K字節(jié)FLASH存儲器的低電壓、高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。單片機(jī)正常工作時,都需要有一個時鐘電路和一個復(fù)位電路。本設(shè)計中選擇了內(nèi)部時鐘方式和按鍵電平復(fù)位電路,來構(gòu)成單片機(jī)的最小電路。復(fù)位是單片機(jī)的初始化操作,單片機(jī)在啟動運行時,都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。因而,復(fù)位是一個很重要的操作方式。但單片機(jī)本身是不能自動進(jìn)行復(fù)位的,必須配合相應(yīng)的外部電路來實現(xiàn)。其主要工作特性是:4k字節(jié)可編程Flash存儲器八個中斷源與MCS-51單片機(jī)產(chǎn)品兼容全靜態(tài)操作:0Hz~33Hz三級加密程序存儲器32個可編程I/O口線全雙工UART串行通道低功耗空閑和掉電模式掉電后中斷可喚醒看門狗定時器雙數(shù)據(jù)指針1000次擦寫周期掉電標(biāo)識符三個16位定時器/計數(shù)器PAGE282、AT89C51引腳說明AT89C51有40個引腳,如圖2所示:圖2AT89C51芯片P0口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。P1口:P1口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,p1輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P1端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在flash編程和校驗時,P1口接收低8位地址字節(jié)。P1口的第二功能如下:P1.0T2(定時器/計數(shù)器T2的外部計數(shù)輸入),時鐘輸出P1.1T2EX(定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制)P1.5MOSI(在系統(tǒng)編程用)P1.6MISO(在系統(tǒng)編程用)P1.7SCK(在系統(tǒng)編程用)P2口:P2口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P2端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX@DPTR),P2口送出高八位地址。在這種應(yīng)用中,P2口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX@RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。P3口:P3口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,p2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P3端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。flash編程和校驗時,P3口也接收一些控制信號。P3口的二功能如下:P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INTO(外中斷0)P3.3INT1(外中斷1)P3.4TO(定時/計數(shù)器0)P3.5T1(定時/計數(shù)器1)P3.6WR(外部數(shù)據(jù)存儲器寫選通)P3.7RD(外部數(shù)據(jù)存儲器讀選通)此外,P3口還接收一些用于FLASH閃存編程和程序校驗的控制信號。RST——復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機(jī)器周期以上高電平將是單片機(jī)復(fù)位。ALE/PROG——當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置ALE禁止位無效。PSEN——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器的指令。3、單片機(jī)最小系統(tǒng)根據(jù)系統(tǒng)設(shè)計要求,結(jié)合性能分析,通過查閱相關(guān)資料及自己的努力思考,把單片機(jī)最小系統(tǒng)設(shè)計為圖3:圖3單片機(jī)最小系統(tǒng)圖3單片機(jī)最小系統(tǒng)(1)復(fù)位電路按鍵手動復(fù)位是通過使復(fù)位端經(jīng)電阻與VCC接通而實現(xiàn)的。(2)時鐘振蕩電路考慮系統(tǒng)運行速度,采用12MHZ的石英晶振,并使用兩個小電容作為微調(diào)電容。(三)主要模塊設(shè)計實現(xiàn)1、LCD顯示模塊(1)方案選擇:方案一:采用動態(tài)顯示方法,動態(tài)顯示模塊的硬件制作簡單,段掃描和位掃描各占用一個端口,總需占用單片機(jī)24個端口,采用間斷掃描法功耗小、硬件成本低及整個硬件系統(tǒng)體積相對減小。方案二:采用LCD的方法,具有硬件制作簡單可直接與單片機(jī)接口,顯示內(nèi)容多,功耗小,成本低等優(yōu)點,LCM1602可顯示32個字符,采用LCD的缺點是亮度不夠。比較以上兩種方案:方案一硬件簡單、功耗小;方案二硬件簡單,顯示內(nèi)容多,功耗小,成本低等。本系統(tǒng)設(shè)計要求達(dá)到功耗小、體積小、成本低,顯示信息多等要求,權(quán)衡兩種方案,選擇方案二。(2)LCM1602的接口信號說明:如表1:表1LCM1602的接口信號編號引腳符號功能說明編號引腳符號功能說明1VSS電源地9D2DATAI/O2VDD電源正極10D3DATAI/O3VL液晶顯示偏壓信號11D4DATAI/O4RS數(shù)據(jù)/命令選擇端12D5DATAI/O5R/W讀/寫選擇端(H/L)13D6DATAI/O6E使能信號14D7DATAI/O7D0DATAI/O15BLA背光正極8D1DATAI/O16BLK背光負(fù)極(3)基本操作時序:讀狀態(tài):RS=L,RW=H,E=H寫指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖讀數(shù)據(jù):RS=H,RW=H,E=H寫數(shù)據(jù):RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖(4)LCM1602與AT89C51的接口電路:如圖4所示:圖4LCM1602與單片機(jī)接口電路LCD的D0~D7分別接單片機(jī)的的P0口,作為數(shù)據(jù)線,因為P0口內(nèi)部沒有上拉電阻,所以外部另外加上10K的上拉電阻;P2.0—P2.2分別接LCD的RS、RW、E三個控制管腳;RV1用來調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽極,接上相應(yīng)電平即點亮背光燈(圖中未畫出)。2、時鐘芯片DS1302接口設(shè)計模塊(1)方案選擇:方案一:直接采用單片機(jī)定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是液晶顯示不連續(xù),實現(xiàn)的時間誤差較大。方案二:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M(jìn)行計數(shù),而且精度高,位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),功耗電小。綜合考慮制作難度及精度,故采用方案二。(2)DS1302接口說明:如表2表2接口說明X1,X232.768kHz晶振引腳GND地線RST復(fù)位端I/O數(shù)據(jù)輸入/輸出端口SCLK串行時鐘端口VCC1慢速充電引腳VCC2電源引腳(3)DS1302與AT89C51的接口電路:如圖5所示DS1302時鐘芯片內(nèi)主要包括控制邏輯電路、振蕩器、移位寄存器。DS1302與單片機(jī)系統(tǒng)的數(shù)據(jù)通信依靠SCLK,RST,I/O,三根線即可完成。其工作過程可概括為:首先給系統(tǒng)RST引腳一個高電平1,然后在SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入命令或地址字節(jié),隨后再在SCLK時鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是非常容易實現(xiàn)的。圖5DS1302設(shè)計DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如圖5所示。DS1302的控制字:控制字的位7必須置1,若為0則不能對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若對時間進(jìn)行讀/寫時,CK=0,對程序進(jìn)行讀/寫時RAM=1。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時,該位為1;進(jìn)行寫操作時,該位為0??刂谱止?jié)總是從最低位開始輸入/輸出的。DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運行?!癢P”是寫保護(hù)位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時,寫保護(hù)位防止對任一寄存器的寫操作。3、溫度傳感器DS18B20設(shè)計模塊(1)方案選擇方案一:采用熱敏電阻或AD590,再經(jīng)AD轉(zhuǎn)換得到數(shù)字信號,精度較準(zhǔn),但價格昂貴,電路較復(fù)雜。方案二:采用數(shù)字式溫度傳感器DS18B20,它能通過單片機(jī)直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式,但準(zhǔn)確度不高。綜合考慮,采用方案二,用DS18B20溫度芯片,采用單總線訪問,降低成本、降低制作難度且可節(jié)省單片機(jī)寶貴的I/O口資源。(2)DS18B20與AT89C51的接口電路:如圖6所示圖6DS18B20接口電路該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測量精度高,電路連接簡單特點,此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P2.3與DS18B20的DQ口連接,Vcc接電源,GND接地。4、按鍵控制模塊按鍵及按鍵提醒接口電路如圖7所示圖7按鍵控制模塊SET鍵:按下SET鍵進(jìn)入時間校準(zhǔn)狀態(tài),按一下進(jìn)入秒調(diào)整,兩下分調(diào)整,依此類推可進(jìn)行各年月日,時分秒以及星期的校準(zhǔn)UP鍵:當(dāng)SET鍵按下時,UP進(jìn)行SET選定項(如:小時)的加操作;DOWN鍵:當(dāng)SET鍵按下時,DOWN進(jìn)行SET選定項(如:小時)的減操作;按鍵蜂鳴器提示(第一次按動設(shè)置鍵長鳴一響;后面按動設(shè)置鍵或上調(diào)鍵、下調(diào)鍵都是短鳴一響)(四)完整系統(tǒng)原理圖見附錄一。四、軟件設(shè)計整個軟件系統(tǒng)采用C語言編程,主要實現(xiàn)以下功能:1) LCD的驅(qū)動2) 時間數(shù)據(jù)的采集3) 溫度的采集4) 按鍵的識別處理程序從main()函數(shù)開始運行,隨后對LCD、DS18B20、DS1302等器件進(jìn)行初始化操作并對標(biāo)志位賦初值,隨后進(jìn)入while(1)循環(huán)中運行按鍵掃描程序。等待中斷產(chǎn)生。開始初始化讀日期、時間寫日期、時間開始初始化讀日期、時間寫日期、時間顯示子程序時間修改子程序日期修改子程序顯示結(jié)果返回開關(guān)控制子程序圖8萬年歷顯示控制1、流程圖如圖82、源程序代碼參考附錄二。(二)溫度轉(zhuǎn)換程序為方便程序編寫,本程序把溫度轉(zhuǎn)換子程序編在DS18B20_3.H文件中。頭文件DS18B20_3.H,來源于網(wǎng)網(wǎng)絡(luò),十進(jìn)制溫度最后返回到函數(shù)ReadTemperature()中,使用時主函數(shù)用flag=ReadTemperature()就可將18b2頭文件運行返回的函數(shù)結(jié)果送到變量FLAG中,用于顯示。根據(jù)單總線操作協(xié)議,首先要對DS18B20進(jìn)行初始化,而初始化有嚴(yán)格的時序控制,如圖9所示,即總線控制器(TX)發(fā)出一個復(fù)位脈沖(至少480us的低電平),然后釋放總線進(jìn)入接收狀態(tài),總線由5.1K上拉電阻上拉為高電平,探測到I/O引腳上的上升沿后,DS18B20等待15us~60us后,然后發(fā)出一個存在脈沖(60us~240us的低電平信號)。1、流程圖開始發(fā)跳過讀系列號命令開始發(fā)跳過讀系列號命令啟動溫度轉(zhuǎn)換初始化DS18B20初始化DS18B20發(fā)跳過讀系列號命令讀取溫度寄存器讀取溫度值結(jié)束圖9溫度轉(zhuǎn)換流程圖2、源程序代碼見附錄三(三)按鍵掃描程序1、程序結(jié)構(gòu)按鍵識別程序結(jié)構(gòu)采用:if(***) { delay(10);//調(diào)延時,消抖動 if(***) { switch(key1n) { case1:*****;case2:*****;************;}2、程序功能能準(zhǔn)確清晰地分析全部的按鍵情況,具有按鍵消除抖動功能。和按鍵蜂鳴器提示(第一次按動設(shè)置鍵長鳴一響;后面按動設(shè)置鍵或上調(diào)鍵、下調(diào)鍵都是短鳴一響)開始液晶屏、時鐘芯片、溫度傳感器初始化開始液晶屏、時鐘芯片、溫度傳感器初始化按鍵掃描。等待中斷產(chǎn)生YN溫度讀取轉(zhuǎn)換顯示溫度、時間日期圖10主程序流程圖(四)主程序1、程序流程圖:如圖102、源程序代碼。見附錄二。五、仿真(一)調(diào)試聯(lián)合仿真模擬系統(tǒng)硬件電路調(diào)試比較簡單,首先檢查電路接線是否正確,然后用檢查軟件I/O口的定義是否與硬件電路的I/O口連線是否對應(yīng)。系統(tǒng)軟件調(diào)試可以先調(diào)試液晶顯示程序,再編寫定時器中斷函數(shù),在液晶上顯示出正確的時間,隨后調(diào)試時間調(diào)整函數(shù)。接下來分別進(jìn)行DS18B20溫度顯示程序的調(diào)試,調(diào)試到液晶能顯示溫度值,在環(huán)境溫度有變化時,顯示溫度能改變就說明已能正確讀取溫度數(shù)據(jù)。最后調(diào)試報警溫度函數(shù),直到實現(xiàn)設(shè)計任務(wù)的要求為止。(二)仿真結(jié)果使用KeiluVision4軟件調(diào)試編譯源程序,生成目標(biāo)代碼HEX文件,然后在Proteus軟件中的虛擬單片機(jī)系統(tǒng)。模擬仿真觀看設(shè)計結(jié)果:液晶顯示結(jié)果如圖11。通過此項設(shè)計設(shè)計,本系統(tǒng)能完成以下功能:1、顯示公歷日期功能(年、月、日、時、分、秒)2、通過按鍵可隨時調(diào)校年、月、日或時、分、星期3、可動態(tài)完整顯示年份4、上電蜂鳴器提示(長鳴)、按鍵時蜂鳴器短鳴。圖11液晶顯示結(jié)果六、總結(jié)論文首先對本設(shè)計作了簡要描述,對軟件、硬件進(jìn)行簡單的描述。隨后提出了不同的設(shè)計方案,經(jīng)過論證最后確定該設(shè)計采用時鐘模塊、顯示模塊、鍵盤接口模塊、溫度測量模塊等模塊組成,接著分別從硬件系統(tǒng)和軟件系統(tǒng)兩方面對基于單片機(jī)的電子萬年歷設(shè)計作了詳細(xì)論述,另外還簡要介紹了一下系統(tǒng)的調(diào)試。在整個設(shè)計過程中,硬件方面主要設(shè)計了AT89C51單片機(jī)的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、LCM1602顯示;軟件方面借助各個渠道的資料,主要設(shè)計了日期數(shù)據(jù)讀取程序、溫度采集程序、按鍵掃描程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過Proteus,再借助于Keil以及少許自己搭建的外圍電路實現(xiàn)的;再此過程中,分步調(diào)試時顯示出了日期及時間,還有實時溫度,集中調(diào)試達(dá)到預(yù)期效果。但在此過程中培養(yǎng)了自己的動手能力。此萬年歷具有讀顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。經(jīng)過本次畢業(yè)設(shè)計,使我對大學(xué)所學(xué)專業(yè)知識的進(jìn)行了系統(tǒng)的總結(jié)。綜合運用所學(xué)知識發(fā)現(xiàn)、提出、分析和解決實際問題致謝首先感謝學(xué)校在畢業(yè)之際給我們一個可能讓我們把所有的知識總結(jié)起來的機(jī)會,通過這次畢業(yè)設(shè)計,使我對以前所學(xué)的知識有了一個整體上的概括,也讓我們具體了解到了每個元件在電路中的具體作用,了解到了它的功能、結(jié)構(gòu)。其次我要衷心的感謝授課老師對我專業(yè)知識的教導(dǎo)和指導(dǎo)老師的幫助。為我提供了大量而又詳實的資料給我,使我從困惑迷茫的初期走向論文的順利完成,在完成論文的同時也深受啟發(fā)和教育,使我受益終生。最后接受我最誠摯的謝意!

參考文獻(xiàn)【1】劉訓(xùn)非,陳希.《單片機(jī)技術(shù)及應(yīng)用》.北京:清華大學(xué)出版社2010【2】楊寧,胡學(xué)軍.《單片機(jī)與控制技術(shù)》.北京:北京航空航天大學(xué)出版社.2005年【3】余西存,曹國華.《單片機(jī)原理及接口技術(shù)》.西安:西安電子科技大學(xué)出版,2000年.【4】沈衛(wèi)紅,編著.《基于單片機(jī)的智能系統(tǒng)設(shè)計與實現(xiàn)》.北京:電子工業(yè)出版社2005年【5】王越明,編著.《電子萬年歷的設(shè)計》.黑龍江:黑龍江科技信息出版社2004年

附錄一:系統(tǒng)電路附錄二:源程序#include<reg51.h>#include"DS18B20_3.H"http://溫度傳感器#defineuintunsignedint#defineucharunsignedcharuchara,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;//flag用于讀取頭文件中的溫度值,和顯示溫度值#defineyh0x80//LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)#defineer0x80+0x40//LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)sbitrs=P2^0;sbiten=P2^2;sbitrw=P2^1;sbitled=P2^6;//LCD的背光開關(guān)//DS1302時鐘芯片與C51之間的引腳連接定義sbitIO=P1^1;sbitSCLK=P1^0;sbitRST=P1^2;sbitACC0=ACC^0;sbitACC7=ACC^7;//校時按鍵與C51的引腳連接定義sbitkey1=P1^5;//設(shè)置鍵sbitkey2=P1^6;//加鍵sbitkey3=P1^7;//減鍵sbitbuzzer=P1^3;//蜂鳴器,通過三極管9012驅(qū)動,端口低電平響ucharcodetab1[]={"20--"};//年顯示的固定字符ucharcodetab2[]={"::"};//時間顯示的固定字符//延時函數(shù),后面經(jīng)常調(diào)用voiddelay(uintxms)//延時函數(shù),有參函數(shù){ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}/********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù)**************/write_1602com(ucharcom)//****液晶寫入指令函數(shù)****{ rs=0;//數(shù)據(jù)/指令選擇置為指令 rw=0;//讀寫選擇置為寫 P0=com;//送入數(shù)據(jù) delay(1); en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備 delay(1); en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令}write_1602dat(uchardat)//***液晶寫入數(shù)據(jù)函數(shù)****{ rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù) rw=0;//讀寫選擇置為寫 P0=dat;//送入數(shù)據(jù) delay(1); en=1;//en置高電平,為制造下降沿做準(zhǔn)備 delay(1); en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令}lcd_init()//***液晶初始化函數(shù)****{ write_1602com(0x38);//設(shè)置液晶工作模式16*2行顯示,5*7點陣,8位數(shù)據(jù) write_1602com(0x0c);//開顯示不顯示光標(biāo) write_1602com(0x06);//整屏不移動,光標(biāo)自動右移 write_1602com(0x01);//清顯示 write_1602com(yh+1);//日歷顯示固定符號從第一行第1個位置之后開始顯示 for(a=0;a<14;a++) { write_1602dat(tab1[a]);//向液晶屏寫日歷顯示的固定符號部分 //delay(3); } write_1602com(er+2);//時間顯示固定符號寫入位置,從第2個位置后開始顯示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號 }}/***************DS1302有關(guān)子函數(shù)********************/voidwrite_byte(uchardat)//寫一個字節(jié){ ACC=dat; RST=1; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; }}ucharread_byte()//讀一個字節(jié){ RST=1; for(a=8;a>0;a--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; } return(ACC);}voidwrite_1302(ucharadd,uchardat)//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù){ RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0;}ucharread_1302(ucharadd)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址{ uchartemp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp);}ucharBCD_Decimal(ucharbcd)//BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制{ucharDecimal;Decimal=bcd>>4;return(Decimal=Decimal*10+(bcd&=0x0F));}voidds1302_init()//1302芯片初始化子函數(shù)(2012-10-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù)write_1302(0x80,0x00);//向DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)00write_1302(0x82,0x00);//向DS1302內(nèi)寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00write_1302(0x84,0x12);//向DS1302內(nèi)寫小時寄存器84H寫入初始小時數(shù)據(jù)12write_1302(0x8a,0x04);//向DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù)4write_1302(0x86,0x07);//向DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)07write_1302(0x88,0x10);//向DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù)10write_1302(0x8c,0x12);//向DS1302內(nèi)寫年份寄存器8cH寫入初始年份數(shù)據(jù)12write_1302(0x8e,0x80);//打開寫保護(hù)}/****************溫度顯示子函數(shù)*******************/voidwrite_temp(ucharadd,uchardat)//向LCD寫溫度數(shù)據(jù),并指定顯示位置{ uchargw,sw; gw=dat%10;//取得個位數(shù)字 sw=dat/10;//取得十位數(shù)字 write_1602com(er+add);//er是頭文件規(guī)定的值0x80+0x40 write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0xdf);//顯示溫度的小圓圈符號,0xdf是液晶屏字符庫的該符號地址碼 write_1602dat(0x43); //顯示"C"符號,0x43是液晶屏字符庫里大寫C的地址碼 }/****************時分秒顯示子函數(shù)****************/voidwrite_sfm(ucharadd,uchardat)//向LCD寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參數(shù){ uchargw,sw; gw=dat%10;//取得個位數(shù)字 sw=dat/10;//取得十位數(shù)字 write_1602com(er+add);//er是頭文件規(guī)定的值0x80+0x40 write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼}/****************年月日顯示子函數(shù)****************/voidwrite_nyr(ucharadd,uchardat)//向LCD寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù){ uchargw,sw; gw=dat%10;//取得個位數(shù)字 sw=dat/10;//取得十位數(shù)字 write_1602com(yh+add);//設(shè)定顯示位置為第一個位置+add write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼}voidwrite_week(ucharweek)//寫星期函數(shù){ write_1602com(yh+0x0c);//星期字符的顯示位置 switch(week) { case1:write_1602dat('M');//星期數(shù)為1時,顯示 write_1602dat('O'); write_1602dat('N'); break; case2:write_1602dat('T');//星期數(shù)據(jù)為2時顯示 write_1602dat('U'); write_1602dat('E'); break; case3:write_1602dat('W');//星期數(shù)據(jù)為3時顯示 write_1602dat('E'); write_1602dat('D'); break; case4:write_1602dat('T');//星期數(shù)據(jù)為4是顯示 write_1602dat('H'); write_1602dat('U'); break; case5:write_1602dat('F');//星期數(shù)據(jù)為5時顯示 write_1602dat('R'); write_1602dat('I'); break; case6:write_1602dat('S');//星期數(shù)據(jù)為6時顯示 write_1602dat('T'); write_1602dat('A'); break; case7:write_1602dat('S');//星期數(shù)據(jù)為7時顯示 write_1602dat('U'); write_1602dat('N'); break;}}//****************鍵盤掃描有關(guān)函數(shù)**********************voidkeyscan(){//key1為功能鍵(設(shè)置鍵)// if(key1==0) { delay(9);//延時,用于消抖動 if(key1==0)//延時后再次確認(rèn)按鍵按下 {buzzer=0;//蜂鳴器短響一次delay(20);buzzer=1; while(!key1); key1n++; if(key1n==9) key1n=1;//設(shè)置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán) switch(key1n) { case1:TR0=0;//關(guān)閉定時器 write_1602com(er+0x09);//設(shè)置按鍵按動一次,秒位置顯示光標(biāo) write_1602com(0x0f);//設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;//秒數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); break; case2:write_1602com(er+6);//按2次fen位置顯示光標(biāo) break; case3:write_1602com(er+3);//按動3次,shi break; case4:write_1602com(yh+0x0e);//按動4次,week break; case5:write_1602com(yh+0x0a);//按動5次,ri break; case6:write_1602com(yh+0x07);//按動6次,yue break; case7:write_1602com(yh+0x04);//按動7次,nian break; case8: write_1602com(0x0c);//按動到第8次,設(shè)置光標(biāo)不閃爍 TR0=1;//打開定時器temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);//miao數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x80);break; } } }//加鍵key2 if(key1n!=0)//當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零) { if(key2==0)//上調(diào)鍵 { delay(10); if(key2==0) {buzzer=0;//蜂鳴器短響一次delay(20);buzzer=1; while(!key2); switch(key1n) { case1:miao++;//設(shè)置鍵按動1次,調(diào)秒 if(miao==60) miao=0;//秒超過59,再加1,就歸零 write_sfm(0x08,miao);//令LCD在正確位置顯示"加"設(shè)定好的秒數(shù) temp=(miao)/10*16+(miao)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x80,temp);//向DS1302內(nèi)寫秒寄存器寫入調(diào)整后的秒數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+0x09);//指定返回 break; case2:fen++; if(fen==60) fen=0; write_sfm(0x05,fen);//令LCD在正確位置顯示"加"設(shè)定好的分?jǐn)?shù)據(jù) temp=(fen)/10*16+(fen)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x82,temp);//向DS1302內(nèi)寫分寄存器寫入調(diào)整后的分?jǐn)?shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+6);//寫回原來的位置 break; case3:shi++; if(shi==24) shi=0; write_sfm(2,shi);//令LCD在正確的位置顯示"加"設(shè)定好的小時數(shù)據(jù) temp=(shi)/10*16+(shi)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x84,temp);//寫小時寄存器84H寫入調(diào)整后的小時數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+3);//光標(biāo)回位 break; case4:week++; if(week==8) week=1;write_1602com(yh+0x0C);//指定'加'后的周數(shù)據(jù)顯示位置 write_week(week);//指定周數(shù)據(jù)顯示內(nèi)容temp=(week)/10*16+(week)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x8a,temp);//寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+0x0e);//光標(biāo)回位 break; case5:ri++; if(ri==32) ri=1; write_nyr(9,ri);//令LCD在正確的位置顯示"加"設(shè)定好的日期數(shù)據(jù) temp=(ri)/10*16+(ri)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x86,temp);//寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+10);//光標(biāo)回位 break; case6:yue++; if(yue==13) yue=1; write_nyr(6,yue);//令LCD在正確的位置顯示"加"設(shè)定好的月份數(shù)據(jù) temp=(yue)/10*16+(yue)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x88,temp);//向DS1302內(nèi)寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+7);//光標(biāo)回位 break; case7:nian++; if(nian==100) nian=0; write_nyr(3,nian);//令LCD在正確的位置顯示"加"設(shè)定好的年份數(shù)據(jù)temp=(nian)/10*16+(nian)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x8c,temp);//寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+4);//光標(biāo)回位 break; } } } //減鍵key3,各句功能參照'加鍵'注釋 if(key3==0) { delay(10);//調(diào)延時,消抖動 if(key3==0) {buzzer=0;//蜂鳴器短響一次delay(20);buzzer=1; while(!key3); switch(key1n) { case1:miao--; if(miao==-1) miao=59;//秒數(shù)據(jù)減到-1時自動變成59 write_sfm(0x08,miao);//在LCD的正確位置顯示改變后新的秒數(shù)temp=(miao)/10*16+(miao)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x80,temp);//向DS1302內(nèi)寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+0x09);//寫回原來的位置 break; case2:fen--; if(fen==-1) fen=59; write_sfm(5,fen); temp=(fen)/10*16+(fen)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x82,temp);//向DS1302內(nèi)寫分寄存器寫入調(diào)整后的分?jǐn)?shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+6);//寫回原來的位置 break; case3:shi--; if(shi==-1) shi=23; write_sfm(2,shi); temp=(shi)/10*16+(shi)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x84,temp);//寫小時寄存器寫入調(diào)整后的小時數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(er+3);//光標(biāo)回位 break; case4:week--; if(week==0) week=7;write_1602com(yh+0x0C);//指定'加'后的周數(shù)據(jù)顯示位置 write_week(week);//指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x8a,temp);//寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+0x0e);//光標(biāo)回位 break; case5:ri--; if(ri==0) ri=31; write_nyr(9,ri); temp=(ri)/10*16+(ri)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x86,temp);//寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+10);//光標(biāo)回位 break; case6:yue--; if(yue==0) yue=12; write_nyr(6,yue); temp=(yue)/10*16+(yue)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x88,temp);//寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+7);//光標(biāo)回位 break; case7:nian--; if(nian==-1) nian=99; write_nyr(3,nian);temp=(nian)/10*16+(nian)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x8c,temp);//寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù) write_1302(0x8e,0x80);//打開寫保護(hù) write_1602com(yh+4);//光標(biāo)回位 break; }}}}}voidinit()//定時器、計數(shù)器設(shè)置函數(shù){ TMOD=0x11;//指定定時/計數(shù)器

溫馨提示

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

最新文檔

評論

0/150

提交評論