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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

參考文獻(xiàn)【1】劉訓(xùn)非,陳希.《單片機(jī)技術(shù)及應(yīng)用》.北京:清華大學(xué)出版社2010【2】楊寧,胡學(xué)軍.《單片機(jī)與控制技術(shù)》.北京:北京航空航天大學(xué)出版社.2005年【3】余西存,曹國(guó)華.《單片機(jī)原理及接口技術(shù)》.西安:西安電子科技大學(xué)出版,2000年.【4】沈衛(wèi)紅,編著.《基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》.北京:電子工業(yè)出版社2005年【5】王越明,編著.《電子萬(wàn)年歷的設(shè)計(jì)》.黑龍江:黑龍江科技信息出版社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第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)#defineer0x80+0x40//LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)sbitrs=P2^0;sbiten=P2^2;sbitrw=P2^1;sbitled=P2^6;//LCD的背光開(kāi)關(guān)//DS1302時(shí)鐘芯片與C51之間的引腳連接定義sbitIO=P1^1;sbitSCLK=P1^0;sbitRST=P1^2;sbitACC0=ACC^0;sbitACC7=ACC^7;//校時(shí)按鍵與C51的引腳連接定義sbitkey1=P1^5;//設(shè)置鍵sbitkey2=P1^6;//加鍵sbitkey3=P1^7;//減鍵sbitbuzzer=P1^3;//蜂鳴器,通過(guò)三極管9012驅(qū)動(dòng),端口低電平響ucharcodetab1[]={"20--"};//年顯示的固定字符ucharcodetab2[]={"::"};//時(shí)間顯示的固定字符//延時(shí)函數(shù),后面經(jīng)常調(diào)用voiddelay(uintxms)//延時(shí)函數(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點(diǎn)陣,8位數(shù)據(jù) write_1602com(0x0c);//開(kāi)顯示不顯示光標(biāo) write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移 write_1602com(0x01);//清顯示 write_1602com(yh+1);//日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示 for(a=0;a<14;a++) { write_1602dat(tab1[a]);//向液晶屏寫日歷顯示的固定符號(hào)部分 //delay(3); } write_1602com(er+2);//時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開(kāi)始顯示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào) }}/***************DS1302有關(guān)子函數(shù)********************/voidwrite_byte(uchardat)//寫一個(gè)字節(jié){ ACC=dat; RST=1; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; }}ucharread_byte()//讀一個(gè)字節(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ù)來(lái)源地址{ 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)寫小時(shí)寄存器84H寫入初始小時(shí)數(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);//打開(kāi)寫保護(hù)}/****************溫度顯示子函數(shù)*******************/voidwrite_temp(ucharadd,uchardat)//向LCD寫溫度數(shù)據(jù),并指定顯示位置{ uchargw,sw; gw=dat%10;//取得個(gè)位數(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);//顯示溫度的小圓圈符號(hào),0xdf是液晶屏字符庫(kù)的該符號(hào)地址碼 write_1602dat(0x43); //顯示"C"符號(hào),0x43是液晶屏字符庫(kù)里大寫C的地址碼 }/****************時(shí)分秒顯示子函數(shù)****************/voidwrite_sfm(ucharadd,uchardat)//向LCD寫時(shí)分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個(gè)參數(shù){ uchargw,sw; gw=dat%10;//取得個(gè)位數(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ù),兩個(gè)參數(shù){ uchargw,sw; gw=dat%10;//取得個(gè)位數(shù)字 sw=dat/10;//取得十位數(shù)字 write_1602com(yh+add);//設(shè)定顯示位置為第一個(gè)位置+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時(shí),顯示 write_1602dat('O'); write_1602dat('N'); break; case2:write_1602dat('T');//星期數(shù)據(jù)為2時(shí)顯示 write_1602dat('U'); write_1602dat('E'); break; case3:write_1602dat('W');//星期數(shù)據(jù)為3時(shí)顯示 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時(shí)顯示 write_1602dat('R'); write_1602dat('I'); break; case6:write_1602dat('S');//星期數(shù)據(jù)為6時(shí)顯示 write_1602dat('T'); write_1602dat('A'); break; case7:write_1602dat('S');//星期數(shù)據(jù)為7時(shí)顯示 write_1602dat('U'); write_1602dat('N'); break;}}//****************鍵盤掃描有關(guān)函數(shù)**********************voidkeyscan(){//key1為功能鍵(設(shè)置鍵)// if(key1==0) { delay(9);//延時(shí),用于消抖動(dòng) if(key1==0)//延時(shí)后再次確認(rèn)按鍵按下 {buzzer=0;//蜂鳴器短響一次delay(20);buzzer=1; while(!key1); key1n++; if(key1n==9) key1n=1;//設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán) switch(key1n) { case1:TR0=0;//關(guān)閉定時(shí)器 write_1602com(er+0x09);//設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(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);//按動(dòng)3次,shi break; case4:write_1602com(yh+0x0e);//按動(dòng)4次,week break; case5:write_1602com(yh+0x0a);//按動(dòng)5次,ri break; case6:write_1602com(yh+0x07);//按動(dòng)6次,yue break; case7:write_1602com(yh+0x04);//按動(dòng)7次,nian break; case8: write_1602com(0x0c);//按動(dòng)到第8次,設(shè)置光標(biāo)不閃爍 TR0=1;//打開(kāi)定時(shí)器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è)置鍵按動(dòng)1次,調(diào)秒 if(miao==60) miao=0;//秒超過(guò)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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(hù) write_1602com(er+6);//寫回原來(lái)的位置 break; case3:shi++; if(shi==24) shi=0; write_sfm(2,shi);//令LCD在正確的位置顯示"加"設(shè)定好的小時(shí)數(shù)據(jù) temp=(shi)/10*16+(shi)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);//允許寫,禁止寫保護(hù) write_1302(0x84,temp);//寫小時(shí)寄存器84H寫入調(diào)整后的小時(shí)數(shù)據(jù) write_1302(0x8e,0x80);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(hù) write_1602com(yh+4);//光標(biāo)回位 break; } } } //減鍵key3,各句功能參照'加鍵'注釋 if(key3==0) { delay(10);//調(diào)延時(shí),消抖動(dòng) if(key3==0) {buzzer=0;//蜂鳴器短響一次delay(20);buzzer=1; while(!key3); switch(key1n) { case1:miao--; if(miao==-1) miao=59;//秒數(shù)據(jù)減到-1時(shí)自動(dòng)變成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);//打開(kāi)寫保護(hù) write_1602com(er+0x09);//寫回原來(lái)的位置 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);//打開(kāi)寫保護(hù) write_1602com(er+6);//寫回原來(lái)的位置 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);//寫小時(shí)寄存器寫入調(diào)整后的小時(shí)數(shù)據(jù) write_1302(0x8e,0x80);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(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);//打開(kāi)寫保護(hù) write_1602com(yh+4);//光標(biāo)回位 break; }}}}}voidinit()//定時(shí)器、計(jì)數(shù)器設(shè)置函數(shù){ TMOD=0x11;//指定定時(shí)/計(jì)數(shù)器

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論