版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要本文介紹了基于STC89C52單片機(jī)的多功能電子萬(wàn)年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)以STC89C52單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬(wàn)年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602A液晶顯示模塊,可以在LCD上同時(shí)顯示年、月、日、周日、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、本錢(qián)低廉等諸多優(yōu)點(diǎn),具有廣闊的市場(chǎng)前景。關(guān)鍵字:萬(wàn)年歷溫度計(jì)液晶顯示ABSTRACTThispaperintroducesthebasedonSTC89C52multi-functionelectroniccalendarofthehardwarestructureandsoftwareandhardwaredesignmethod.Thisdesignbydatadisplaymodule,temperatureacquisitionmodule,timeprocessingmoduleandsetmodulefourmodules.WithSTC89C52single-chipmicrocomputersystemforthecontrollertoserialclockcalendarchipDS1302recordcalendarandtime,itcanbetodateandtime,minutesandsecondsforthetime,alsohasaleapyearcompensationandotherfunctions.TemperaturegatheringchooseDS18B20chip,calendarbyusingobjectdigitaldisplay,datashowedthatthe1602Aliquidcrystaldisplaymodule,canbeintheLCDshowsatthesametimeyear,month,day,Sunday,when,minutesandseconds,stillhavetimecalibrationetc.Function.Thiscalendarhasreadtheconvenient,directdisplay,functionaldiversity,simplecircuit,lowcost,andmanyotheradvantages,hasabroadmarketprospect.Keywords:PerpetualCalendarthermometerLCDdisplay目錄TOC\o"1-2"\h\z\u摘要IABSTRACTII前言V1緒論11.1課題研究的背景11.2課題的研究目的與意義11.3課題解決的主要內(nèi)容12系統(tǒng)的方案設(shè)計(jì)與論證22.1單片機(jī)芯片設(shè)計(jì)與論證32.2按鍵控制模塊設(shè)計(jì)與論證32.3時(shí)鐘模塊設(shè)計(jì)與論證32.4溫度采集模塊設(shè)計(jì)與論證42.5顯示模塊模塊設(shè)計(jì)與論證43系統(tǒng)硬件的設(shè)計(jì)53.1STC89C52單片機(jī)53.2時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析83.3溫度芯片DS18B20接口設(shè)計(jì)與性能分析113.4LCD顯示模塊153.5按鍵模塊設(shè)計(jì)173.6復(fù)位電路的設(shè)計(jì)174系統(tǒng)的軟件設(shè)計(jì)194.1主程序流程圖的設(shè)計(jì)194.2程序設(shè)計(jì)205系統(tǒng)的機(jī)體設(shè)計(jì)245.1系統(tǒng)的模塊組成245.2功能實(shí)現(xiàn)24結(jié)論26參考文獻(xiàn)27致謝28附錄29前言隨著科技的快速開(kāi)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類(lèi)不斷研究,不斷創(chuàng)新紀(jì)錄。目前,單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬(wàn)戶(hù)。電子萬(wàn)年歷的出現(xiàn)給人們的生活帶來(lái)了諸多方便。隨著微電子技術(shù)的高速開(kāi)展,單片機(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ù)。單片機(jī)單芯片的微小體積和低的本錢(qián),可廣泛地嵌入到如玩具、家用電器、機(jī)器人、儀器儀表、汽車(chē)電子系統(tǒng)、工業(yè)控制單元、辦公自動(dòng)化設(shè)備、金融電子系統(tǒng)、艦船、個(gè)人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具,于是基于單片機(jī)的醒目而時(shí)尚的電子版萬(wàn)年歷順應(yīng)而生?;趩纹瑱C(jī)的電子萬(wàn)年歷結(jié)合了時(shí)鐘和日歷的功能,將其二者融為一體,在顯示時(shí)間的同時(shí)還能顯示日期和年、月,它主要是通過(guò)單片機(jī)來(lái)讀取時(shí)鐘芯片的時(shí)間、日期,然后送給顯示設(shè)備顯示出來(lái)。而電子萬(wàn)年歷作為電子類(lèi)小設(shè)計(jì)不僅是市場(chǎng)上的寵兒,也是是單片機(jī)實(shí)驗(yàn)中一個(gè)很常用的題目。因?yàn)樗挠泻芎玫拈_(kāi)放性和可發(fā)揮性,因此對(duì)作者的要求比擬高,不僅考察了對(duì)單片機(jī)的掌握能力更加強(qiáng)調(diào)了對(duì)單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計(jì)上要力求簡(jiǎn)潔,功能上盡量齊全,顯示界面也要出色。數(shù)字顯示的日歷鐘已經(jīng)越來(lái)越流行,特別是適合在家庭居室、辦公室、大廳、會(huì)議室、車(chē)站和廣場(chǎng)等使用,壁掛式LED數(shù)碼管顯示的日歷鐘逐漸受到人們的歡送。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時(shí)準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出多種功能。1緒論1.1課題研究的背景隨著科技的快速開(kāi)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類(lèi)不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用STC89C52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。
此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、本錢(qián)低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的開(kāi)展趨勢(shì),具有廣闊的市場(chǎng)前景。1.2課題的研究目的與意義二十一世紀(jì)是數(shù)字化技術(shù)高速開(kāi)展的時(shí)代,而單片機(jī)在數(shù)字化高速開(kāi)展的時(shí)代扮演著極為重要的角色。電子萬(wàn)年歷的開(kāi)發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場(chǎng)地、教學(xué)室、公共場(chǎng)地等場(chǎng)合,可以說(shuō)普及人們生活的每一個(gè)角落。所以說(shuō)電子萬(wàn)年歷的開(kāi)發(fā)是國(guó)家之所需,社會(huì)之所需,人民之所需。由于社會(huì)對(duì)信息交換不斷提高的要求及高新技術(shù)的逐步開(kāi)展,促使電子萬(wàn)年歷開(kāi)展并且投入市場(chǎng)得到廣泛應(yīng)用。1.3課題解決的主要內(nèi)容本課題所研究的電子萬(wàn)年歷是單片機(jī)控制技術(shù)的一個(gè)具體應(yīng)用,主要研究?jī)?nèi)容包括以下幾個(gè)方面:〔1〕選用電子萬(wàn)年歷芯片時(shí),應(yīng)重點(diǎn)考慮功能實(shí)在、使用方便、單片存儲(chǔ)、低功耗、抗斷電的器件?!?〕根據(jù)選用的電子萬(wàn)年歷芯片設(shè)計(jì)外圍電路和單片機(jī)的接口電路?!?〕在硬件設(shè)計(jì)時(shí),結(jié)構(gòu)要盡量簡(jiǎn)單實(shí)用、易于實(shí)現(xiàn),使系統(tǒng)電路盡量簡(jiǎn)單?!?〕根據(jù)硬件電路圖,在開(kāi)發(fā)板上完成器件的焊接?!?〕根據(jù)設(shè)計(jì)的硬件電路,編寫(xiě)控制STC89C52芯片的單片機(jī)程序。〔6〕通過(guò)編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實(shí)現(xiàn)本設(shè)計(jì)的功能?!?〕在硬件電路和軟件程序設(shè)計(jì)時(shí),主要考慮提高人機(jī)界面的友好性,方便用戶(hù)操作等因素。2系統(tǒng)的方案設(shè)計(jì)與論證單片機(jī)電子萬(wàn)年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方案應(yīng)在滿(mǎn)足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡(jiǎn)單使用、易于實(shí)現(xiàn),器件的選用著眼于適宜的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的本錢(qián)。系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過(guò)本錢(qián),性能,功耗等多方面的考慮決定用三個(gè)8位74LS164串行接口外接LED顯示器,RESPACK-8對(duì)單片機(jī)STC89C52進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)STC89C52。從而實(shí)現(xiàn)電子萬(wàn)年歷的功能。按照系統(tǒng)設(shè)計(jì)的要求,初步確定系統(tǒng)由電源模塊、時(shí)鐘模塊、顯示模塊、鍵盤(pán)接口模塊、溫度測(cè)量模塊和鬧鐘模塊共六個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所示。圖1硬件電路框圖2.1單片機(jī)芯片設(shè)計(jì)與論證方案一:采用AT89C51芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲(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ì)芯片造成一定的損壞。方案二:采用STC89C52芯片作為硬件核心,采用FlashROM,能以3V的超低電壓工作,而且與MCS-51系列單片機(jī)完全兼容,該芯片內(nèi)部存儲(chǔ)器為8KBROM存儲(chǔ)空間。同樣具有STC89C52的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片屢次拔插,所以不會(huì)對(duì)芯片造成損壞。由于STC89C52內(nèi)部具有8KBROM存儲(chǔ)芯片并且支持ISP在線編程,因此采用STC89C52作為主控芯片。2.2按鍵控制模塊設(shè)計(jì)與論證方案一:采用矩陣鍵盤(pán),由于按鍵多可實(shí)現(xiàn)數(shù)值的直接鍵入,但在系統(tǒng)中需要CPU不間斷的對(duì)其端口掃描。方案二:采用獨(dú)立按鍵,查詢(xún)簡(jiǎn)單,程序處理簡(jiǎn)單,可節(jié)省CPU資源。因系統(tǒng)中所需按鍵不多,為了釋放更多的CPU占有時(shí)間,操作方便,故采用方案二。2.3時(shí)鐘模塊設(shè)計(jì)與論證方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約本錢(qián),但是,實(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.5V時(shí)耗電小于300nA.由于DS1302時(shí)鐘芯片計(jì)數(shù)時(shí)間精度高,而且具有閏年補(bǔ)償功能等優(yōu)點(diǎn),故采用方案二。2.4溫度采集模塊設(shè)計(jì)與論證方案一:采用溫度傳感器〔如熱敏電阻或AD590〕,再經(jīng)AD轉(zhuǎn)換得到數(shù)字信號(hào),精度較準(zhǔn),但價(jià)格昂貴,電路較復(fù)雜。方案二:采用數(shù)字式溫度傳感器DS18B20,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式,但準(zhǔn)確度不高,誤差最大達(dá)2度。因?yàn)橛肈S18B20溫度芯片,采用單總線訪問(wèn),降低本錢(qián)、降低制作難度且可節(jié)省單片機(jī)資源,故采用方案二。2.5顯示模塊模塊設(shè)計(jì)與論證方案一:采用靜態(tài)顯示方法,靜態(tài)顯示模塊的硬件制作較復(fù)雜及功耗大,要用到多個(gè)移位存放器,但不占用端口,只需兩根串口線輸出。方案二:采用動(dòng)態(tài)顯示方法,動(dòng)態(tài)顯示模塊的硬件制作簡(jiǎn)單,段掃描和位掃描各占用一個(gè)端口,總需占用單片機(jī)14個(gè)端口,采用間斷掃描法功耗小、硬件本錢(qián)低及整個(gè)硬件系統(tǒng)體積相對(duì)減小。方案三:采用LCD的方法,具有硬件制作簡(jiǎn)單可直接與單片機(jī)接口,顯示內(nèi)容多,功耗小,本錢(qián)低等優(yōu)點(diǎn),LCM1602可顯示32個(gè)字符,采用LCD的缺點(diǎn)是亮度不夠。比擬以上三種方案:方案一硬件復(fù)雜體積大、功耗大;方案二硬件簡(jiǎn)單、功耗小;方案三硬件簡(jiǎn)單,顯示內(nèi)容多,功耗小,本錢(qián)低等。本系統(tǒng)設(shè)計(jì)要求到達(dá)功耗小、體積小、本錢(qián)低,顯示信息多等要求,權(quán)衡三種方案,選擇方案三。3系統(tǒng)硬件的設(shè)計(jì)根據(jù)上述所確定的系統(tǒng)方案設(shè)想,下面進(jìn)行系統(tǒng)硬件電路的具體設(shè)計(jì),系統(tǒng)的具體設(shè)計(jì)在下面會(huì)詳細(xì)介紹。3.1STC89C52單片機(jī)本系統(tǒng)采用的是美國(guó)ATMEL公司生產(chǎn)的STC89C52單片機(jī),首先我們來(lái)熟悉一下STC89C52單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。1.單片機(jī)的引腳功能STC89C52單片機(jī)有40個(gè)引腳。Vcc:電源電壓+5VGND:接地P0口:P0口是一組8位漏極開(kāi)路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門(mén)電路,對(duì)端口寫(xiě)“1〞可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址〔低8位〕和數(shù)據(jù)總線服用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí)要求外接上拉電阻。P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P1的輸出緩沖級(jí)可驅(qū)動(dòng)〔吸收或輸出電流〕4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1〞,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。P2口:P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級(jí)可驅(qū)動(dòng)〔吸收或輸出電流〕4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1〞,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器〔例如執(zhí)行MOVX@DPTR指令〕時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器〔MOVX@Ri指令〕時(shí),P2口線上的內(nèi)容〔也即特殊功能存放器〔SFR〕區(qū)中P2存放器的內(nèi)容〕,在整個(gè)訪問(wèn)期間不改變。Flash編程和程序校驗(yàn)期間,P2亦接收低高位地址和其他控制信號(hào)。P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級(jí)可驅(qū)動(dòng)〔吸收或輸出電流〕4個(gè)TTL邏輯門(mén)電路。對(duì)P3口寫(xiě)入“1〞時(shí),它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,見(jiàn)表1所示:P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。表1P3口的第二功能圖端口引腳第二功能P3.0RXD〔串行輸入口〕P3.1TXD〔串行輸出口〕P3.2INT0〔外中斷0〕P3.3INT1〔外中斷1〕P3.4T0〔定時(shí)/計(jì)時(shí)器0外部輸入〕P3.5T1〔定時(shí)/計(jì)時(shí)器1外部輸入〕P3.6WR〔外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通〕P3.7RD〔外部數(shù)據(jù)存儲(chǔ)器讀選通〕RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFRAUXR的DISRT0〔地址8EH〕可翻開(kāi)或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平翻開(kāi)狀態(tài)。ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE〔地址鎖存器允許〕輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,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ò)多特殊功能存放器〔SFR〕區(qū)中的8EH單元的D0位置,可禁止ALE操作。該位置后,只有一條MOVX和MOVC指令A(yù)LE才會(huì)被激活。另外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE無(wú)效。PSEN:程序存儲(chǔ)允許〔PSEN〕輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)STC89C52由外部程序存儲(chǔ)器取指令〔或數(shù)據(jù)〕時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,沒(méi)有兩次有效的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ǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的變成電壓Vpp.XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。STC89C52單片機(jī)內(nèi)部結(jié)構(gòu)2.STC89C52單片機(jī)與MCS-51完全兼容看門(mén)狗〔WDT〕:WDT是一種需要軟件控制的復(fù)位方式。WDT由13位計(jì)數(shù)器和特殊功能存放器中的看門(mén)狗定時(shí)器復(fù)位存儲(chǔ)器〔WDTRST〕構(gòu)成。WDT在默認(rèn)情況下無(wú)法工作;為了激活WDT,用戶(hù)必須往WDTRST存放器〔地址:0A6H〕中依次寫(xiě)入01EH和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個(gè)機(jī)器周期都會(huì)增加。WDT計(jì)時(shí)周期依賴(lài)于外部時(shí)鐘頻率。除了復(fù)位〔硬件復(fù)位或WDT溢出復(fù)位〕,沒(méi)有方法停止WDT工作。當(dāng)WDT溢出,它將驅(qū)動(dòng)RSR引腳輸出一個(gè)高電平??删幊檀凇睻ART〕在STC89C52中,UART的操作與STC89C52和AT89C52一樣。STC89C52系列單片機(jī)的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方式時(shí),它具有全雙工的操作功能,也就是說(shuō),它可以同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個(gè)字節(jié)從接收存放器讀走之前就開(kāi)始接收第二個(gè)字節(jié)〔當(dāng)然,如果第二個(gè)字節(jié)接收完畢,而第一個(gè)字節(jié)仍然沒(méi)有被讀走,那將會(huì)丟掉一個(gè)字節(jié)〕。串行口的發(fā)送和接收操作都是通過(guò)特殊功能存放器中的數(shù)據(jù)緩沖存放器SBUF進(jìn)行的,但在SBUF的內(nèi)部,接收存放器和發(fā)送存放器在物理結(jié)構(gòu)上是完全獨(dú)立的。如果將數(shù)據(jù)寫(xiě)入SBUF,數(shù)據(jù)會(huì)被送入發(fā)送存放器準(zhǔn)備發(fā)送。如果執(zhí)行SBUF指令,那么讀出的數(shù)據(jù)一定來(lái)自接收緩存器。因此,CPU對(duì)SBUF的讀寫(xiě),實(shí)際上是分別訪問(wèn)2個(gè)不同的存放器。這2個(gè)存放器的功能決不能混淆。振蕩電路:STC89C52系列單片機(jī)的內(nèi)部振蕩器,由一個(gè)單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出??梢岳盟鼉?nèi)部的振蕩器產(chǎn)生時(shí)鐘,只要XTAL1和XTAL2引腳上一個(gè)晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個(gè)完整的振蕩信號(hào)發(fā)生器,此方式稱(chēng)為內(nèi)部方式。另一種方式由外部時(shí)鐘源提供一個(gè)時(shí)鐘信號(hào)到XTAL1端輸入,而XTAL2端浮空。在組成一個(gè)單片機(jī)應(yīng)用系統(tǒng)時(shí),多數(shù)采用這種方式,這種方式結(jié)構(gòu)緊湊,本錢(qián)低廉,可靠性高。在電路中,對(duì)電容C1和C2的值要求不是很?chē)?yán)格,如果使用高質(zhì)的晶振,那么不管頻率為多少,C1、C2通常都選擇30pF。定時(shí)/計(jì)數(shù)器:STC89C52單片機(jī)內(nèi)含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器。當(dāng)用于定時(shí)器方式時(shí),定時(shí)器的輸入來(lái)自?xún)?nèi)部時(shí)鐘發(fā)生電路,每過(guò)一個(gè)機(jī)器周期,定時(shí)器加1,而一個(gè)機(jī)器周期包含有12個(gè)振蕩周期,所以,定時(shí)器的技術(shù)頻率為晶振頻率的1/12,而計(jì)數(shù)頻率最高為晶振頻率的1/24。為了實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能,定時(shí)器中含有3種根本的存放器:控制存放器、方式存放器和定時(shí)器/計(jì)數(shù)器。控制存放器是一個(gè)8位的存放器,用于控制定時(shí)器的工作狀態(tài),方式存放器是一個(gè)8位的存放器,用于確定定時(shí)器的工作方式,定時(shí)器/計(jì)數(shù)器是16位的計(jì)數(shù)器,分為高字節(jié)和低字節(jié)兩局部。RAM:高于7FH內(nèi)部數(shù)據(jù)存儲(chǔ)器的地址是8位的,也就是說(shuō)其地址空間只有256字節(jié),但內(nèi)部RAM的尋址方式實(shí)際上可提供384字節(jié)。的直接地址訪問(wèn)同一個(gè)存儲(chǔ)空間,高于7FH的間接地址訪問(wèn)另一個(gè)存儲(chǔ)空間。這樣,雖然高128字節(jié)區(qū)分與專(zhuān)用寄器,即特殊功能存放器區(qū)的地址是重合的,但實(shí)際上它們是分開(kāi)的。究竟訪問(wèn)哪一區(qū),存是通過(guò)不同的尋址方式加以區(qū)分的。SFR:SFR是具有特殊功能的所有存放器的集合,共含有22個(gè)不同存放器,它們的地址分配在80H~FFH中。雖然如此,不是所有的單元都被特殊功能存放器占用,未被占用的單元,其內(nèi)容是不確定的。如對(duì)這些單元進(jìn)行讀操作,得到的是一些隨機(jī)數(shù),而寫(xiě)入那么無(wú)效,所以在編程時(shí)不應(yīng)該將數(shù)據(jù)寫(xiě)入這些未確定的地址單元中,特殊功能存放器主要有累加器ACC、B存放器、程序狀態(tài)字存放器PSW、堆棧指針SP、數(shù)據(jù)指針DPTR、I/O端口、串行口數(shù)據(jù)緩沖器SBUF、定時(shí)器存放器、捕捉存放器、控制存放器。中斷系統(tǒng):STC89C52單片機(jī)有6個(gè)中斷源,中斷系統(tǒng)主要由中斷允許存放器IE、中斷優(yōu)先級(jí)存放器IP、優(yōu)先級(jí)結(jié)構(gòu)和一些邏輯門(mén)組成。IE存放器用于允許或禁止中斷;IP存放器用于確定中斷源的優(yōu)先級(jí)別;優(yōu)先級(jí)結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門(mén)用于輸入中斷請(qǐng)求信號(hào)。在整個(gè)中斷響應(yīng)過(guò)程中CPU所執(zhí)行的操作步驟如下:〔1〕完成當(dāng)前指令的操作〔2〕將PC內(nèi)容壓入堆棧〔3〕保存當(dāng)前的中斷狀態(tài)〔4〕阻止同級(jí)的中斷請(qǐng)求〔5〕將中斷程序入口地址送PC存放器〔6〕執(zhí)行中斷效勞程序〔7〕返回3.2時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析3.2.1DS1302性能簡(jiǎn)介DS1302是Dallas公司生產(chǎn)的一種實(shí)時(shí)時(shí)鐘芯片。它通過(guò)串行方式與單片機(jī)進(jìn)行數(shù)據(jù)傳送,能夠向單片機(jī)提供包括秒、分、時(shí)、日、月、年等在內(nèi)的實(shí)時(shí)時(shí)間信息,并可對(duì)月末日期、閏年天數(shù)自動(dòng)進(jìn)行調(diào)整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。另外,它還能提供31字節(jié)的用于高速數(shù)據(jù)暫存的RAM。DS1302時(shí)鐘芯片內(nèi)主要包括移位存放器、控制邏輯電路、振蕩器。DS1302與單片機(jī)系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過(guò)程可概括為:首先系統(tǒng)RST引腳驅(qū)動(dòng)至高電平,然后在SCLK時(shí)鐘脈沖的作用下,通過(guò)I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時(shí)鐘脈沖的配合下,從I/O引腳寫(xiě)入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實(shí)現(xiàn)的,DS1302的引腳排列及內(nèi)部結(jié)構(gòu)圖如圖2:DS1302引腳說(shuō)明:X1,X232.768kHz晶振引腳GND地線RST復(fù)位端I/O數(shù)據(jù)輸入/輸出端口SCLK串行時(shí)鐘端口VCC1慢速充電引腳VCC2電源引腳圖2DS1302管腳圖2DS1302的引腳3.2.2DS1302接口電路設(shè)計(jì)1時(shí)鐘芯片DS1302的接口電路及工作原理:圖3DS1302與MCU接口電路圖3為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統(tǒng)中提供低電源并提供低功率的電池備份。VCC2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)用方式中VCC1連接到備份電源,以便在沒(méi)有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由VCC1或VCC2兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電。當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。DS1302在每次進(jìn)行讀、寫(xiě)程序前都必須初始化,先把SCLK端置“0〞,接著把RST端置“1〞,最后才給予SCLK脈沖;讀/寫(xiě)時(shí)序如下列圖5所示。表-1為DS1302的控制字,此控制字的位7必須置1,假設(shè)為0那么不能對(duì)DS1302進(jìn)行讀寫(xiě)數(shù)據(jù)。對(duì)于位6,假設(shè)對(duì)時(shí)間進(jìn)行讀/寫(xiě)時(shí),CK=0,對(duì)程序進(jìn)行讀/寫(xiě)時(shí)RAM=1。位1至位5指操作單元的地址。位0是讀/寫(xiě)操作位,進(jìn)行讀操作時(shí),該位為1;進(jìn)行寫(xiě)操作時(shí),該位為0。控制字節(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)行。“WP〞是寫(xiě)保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫(xiě)操作之前,“WP〞必須為0。當(dāng)“WP〞為1時(shí),寫(xiě)保護(hù)位防止對(duì)任一存放器的寫(xiě)操作。2、DS1302的控制字DS1302的控制字如表2所示??刂谱止?jié)的高有效位〔位7〕必須是邏輯1,如果它為0,那么不能把數(shù)據(jù)寫(xiě)入DS1302中,位6如果0,那么表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位〔位0〕如為1表示進(jìn)行讀操作,為0表示進(jìn)行寫(xiě)操作??刂谱止?jié)總是從最低位開(kāi)始輸出。表2DS1302的控制字格式1RAM/CKA4A3A2A1A0RD/WR3、數(shù)據(jù)輸入輸出〔I/O〕在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫(xiě)入DS1302,數(shù)據(jù)輸入從低位即位0開(kāi)始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下列圖4所示。圖4DS1302讀/寫(xiě)時(shí)序圖4、DS1302的存放器EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o\ad(\s\up11(———),AM)DS1302有12個(gè)存放器,其中有7個(gè)存放器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間存放器及其控制字見(jiàn)表3。表3DS1302的日歷、時(shí)間存放器寫(xiě)存放器讀存放器Bit7Bit6Bit5Bit7Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/EQ\*jc0\*"Font:宋體"\*hps8\o\ad(\s\up9(——),24)010時(shí)時(shí)EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o\ad(\s\up11(——),AM)/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10年年8EH8FHWP0000000此外,DS1302還有年份存放器、控制存放器、充電存放器、時(shí)鐘突發(fā)存放器及與RAM相關(guān)的存放器等。時(shí)鐘突發(fā)存放器可一次性順序讀寫(xiě)除充電存放器外的所有存放器內(nèi)容。DS1302與RAM相關(guān)的存放器分為兩類(lèi):一類(lèi)是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作;另一類(lèi)為突發(fā)方式下的RAM存放器,此方式下可一次性讀寫(xiě)所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫(xiě))、FFH(讀)。3.3溫度芯片DS18B20接口設(shè)計(jì)與性能分析3.3.1DS18B20性能簡(jiǎn)介1.DS18B20的主要特性DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改良型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式?,F(xiàn)場(chǎng)溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過(guò)程控制、測(cè)溫類(lèi)消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。其性能特點(diǎn)可歸納如下:1獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;2測(cè)溫范圍在-55℃到125℃,分辨率最大可達(dá)0.0625℃;3采用了3線制與單片機(jī)相連,減少了外部硬件電路;4零待機(jī)功耗;5可通過(guò)數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V;6用戶(hù)可定義的非易失性溫度報(bào)警設(shè)置;7報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度〔溫度報(bào)警條件〕的器件;8負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱燒毀,只是不能正常工作。2.DS18B20工作原理DS18B20的讀寫(xiě)時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。DS18B20測(cè)溫原理如圖5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度存放器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度存放器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度存放器值的累加,此時(shí)溫度存放器中的數(shù)值即為所測(cè)溫度。圖5中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。LSBLSB位置/去除增加計(jì)數(shù)器1斜率累加器計(jì)數(shù)比擬器溫度存放器減到0預(yù)置計(jì)數(shù)器2減到0停止預(yù)置低溫度系數(shù)晶振高溫度系數(shù)晶振圖5DS18B20測(cè)溫原理DS18B20接口電路設(shè)計(jì)如6圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(diǎn),此類(lèi)傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。圖6溫度傳感器DS18B20接口電路DS18B20的工作時(shí)序1、復(fù)位時(shí)序圖圖7復(fù)位時(shí)序圖讀時(shí)序圖圖8讀時(shí)序圖3、寫(xiě)時(shí)序圖圖9寫(xiě)時(shí)序圖3、工作時(shí)序1〕總線時(shí)序圖10總線時(shí)序2〕寫(xiě)周期時(shí)序圖11寫(xiě)周期時(shí)序3〕起始/停止時(shí)序圖12起始/停止時(shí)序4〕應(yīng)答時(shí)序圖13應(yīng)答時(shí)序5〕立即地址讀時(shí)序圖14立即地址讀時(shí)序3.4LCD顯示模塊3.4.1LCM1602的特性及使用說(shuō)明LCM1602的接口信號(hào)說(shuō)明如表4:表4LCM1602的接口信號(hào)編號(hào)引腳符號(hào)功能說(shuō)明編號(hào)引腳符號(hào)功能說(shuō)明1VSS電源地9D2DATAI/O2VDD電源正極10D3DATAI/O3VL液晶顯示偏壓信號(hào)11D4DATAI/O4RS數(shù)據(jù)/命令選擇端〔H/L〕12D5DATAI/O5R/W讀/寫(xiě)選擇端〔H/L〕13D6DATAI/O6E使能信號(hào)14D7DATAI/O7D0DATAI/O15BLA背光正極8D1DATAI/O16BLK背光負(fù)極2、根本操作時(shí)序如下:1〕讀狀態(tài):RS=L,RW=H,E=H2〕寫(xiě)指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖3〕讀數(shù)據(jù):RS=H,RW=H,E=H4〕寫(xiě)數(shù)據(jù):RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖3、初始化設(shè)置1〕顯示模式設(shè)置如表5:表5顯示模式設(shè)置指令碼功能00111000設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口顯示開(kāi)/關(guān)及光標(biāo)設(shè)置如表6:表6顯示開(kāi)/關(guān)及光標(biāo)設(shè)置指令碼功能00001DCBD=1開(kāi)顯示;D=0關(guān)顯示C=1顯示光標(biāo);C=0不顯示光標(biāo)B=1光標(biāo)閃爍;B=0光標(biāo)不顯示000001NSN=1當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一,且光標(biāo)加一N=0當(dāng)讀或?qū)懸粋€(gè)字符后地址指針減一,且光標(biāo)減一S=1當(dāng)寫(xiě)一個(gè)字符,整屏顯示左移〔N=1〕3.4.2LCM1602與MCU的接口電路LCD的D0~D7分別接單片機(jī)的的P2口,作為數(shù)據(jù)線,因?yàn)镻0口內(nèi)部沒(méi)有上拉電阻,所以外部另外加上10K的上拉電阻;P1.0—P1.2分別接LCD的RS、RW、E三個(gè)控制管腳;RV1用來(lái)調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽(yáng)極,接上相應(yīng)電平即點(diǎn)亮背光燈。3.5按鍵模塊設(shè)計(jì)本系統(tǒng)用到了5個(gè)按鍵,其中一個(gè)用作系統(tǒng)手動(dòng)復(fù)位,另外4個(gè)采用獨(dú)立按鍵,該種接法查詢(xún)簡(jiǎn)單,程序處理簡(jiǎn)單,可節(jié)省CPU資源,按鍵電路如圖15所示,4個(gè)獨(dú)立按鍵分別與STC89C52的P3.4、P3.5、P3.6、P3.7接口相連。圖15按鍵電路對(duì)以上4個(gè)按鍵作簡(jiǎn)要說(shuō)明:S4——SET鍵,S3——UP鍵,S2——DOWN鍵,S5——OUT/STOP鍵。SET鍵:按下SET鍵進(jìn)入時(shí)間校準(zhǔn)狀態(tài),按一下進(jìn)入秒調(diào)整,兩下分調(diào)整,依此類(lèi)推可進(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í)〕的減操作;OUT鍵:當(dāng)OUT鍵按下時(shí),此鍵功能為退出校準(zhǔn)功能,進(jìn)入下一模式,顯示溫度值和上下限的溫度值。3.6復(fù)位電路的設(shè)計(jì)當(dāng)STC89C52單片機(jī)的復(fù)位引腳RST〔全稱(chēng)RESET〕出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無(wú)法執(zhí)行程序。因此要求單片機(jī)復(fù)位后能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個(gè)機(jī)器周期為1μs,那么復(fù)位脈沖寬度最小應(yīng)為2μs。在實(shí)際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,必須有足夠的余量。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種根本形式:上電復(fù)位、手動(dòng)復(fù)位。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。STC89C52單片機(jī)的上電復(fù)位POR〔PowerOnReset〕實(shí)質(zhì)上就是上電延時(shí)復(fù)位,也就是在上電延時(shí)期間把單片機(jī)鎖定在復(fù)位狀態(tài)上。在單片機(jī)每次初始加電時(shí),首先投入工作的功能部件是復(fù)位電路。復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個(gè)延時(shí)〔記作TRST〕,以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開(kāi)始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)。本設(shè)計(jì)采用上電且開(kāi)關(guān)復(fù)位電路,如圖16所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開(kāi)關(guān)復(fù)位的操作。通常選擇C=10~30μF,本設(shè)計(jì)采用的電容值為10μF的電容和電阻為4.7K的電阻。圖16復(fù)位電路4系統(tǒng)的軟件設(shè)計(jì)電子萬(wàn)年歷的功能是在程序控制下實(shí)現(xiàn)的。該系統(tǒng)的軟件設(shè)計(jì)方法與硬件設(shè)計(jì)相對(duì)應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過(guò)主程序?qū)⒏鞒绦蚰K連接起來(lái)。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。本系統(tǒng)的軟件局部主要要進(jìn)行公歷計(jì)算程序設(shè)計(jì),溫度測(cè)量程序設(shè)計(jì),按鍵的掃描輸入等。程序開(kāi)始運(yùn)行后首先要進(jìn)行初始化,把單片機(jī)的各引腳的狀態(tài)按程序里面的初始化命令進(jìn)行初始化,初始化完成后運(yùn)行溫度測(cè)量程序,讀取出溫度傳感器測(cè)量出來(lái)的溫度,然后運(yùn)行公歷計(jì)算程序,得到公歷的時(shí)間、日期信息,再運(yùn)行按鍵掃描程序,檢測(cè)有無(wú)按鍵按下,如果沒(méi)有按鍵按下那么直接調(diào)用節(jié)日計(jì)算程序,根據(jù)得到的公歷日期信息計(jì)算出節(jié)日,如果有按鍵按下那么更新按鍵修改后的變量后送給節(jié)日計(jì)算程序,由節(jié)日計(jì)算程序根據(jù)修改后的變量計(jì)算出對(duì)應(yīng)的節(jié)假日,計(jì)算完成后運(yùn)行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對(duì)應(yīng)的數(shù)碼管讓其顯示。4.1主程序流程圖的設(shè)計(jì)主程序流程圖如圖17:開(kāi)始開(kāi)始DS1302初始化設(shè)置DS1302讀年月日星期時(shí)分秒將讀取的數(shù)據(jù)處理后送液晶屏顯示返回圖17主程序流程圖4.2程序設(shè)計(jì)4.2.1DS1302讀寫(xiě)程序設(shè)計(jì)本系統(tǒng)的時(shí)間讀取主要來(lái)源于單片機(jī)對(duì)DS1302的操作,在硬件上時(shí)鐘芯片DS1302與單片機(jī)的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見(jiàn)系統(tǒng)硬件設(shè)計(jì)原理圖。讀取寫(xiě)程序設(shè)計(jì)如下:sbitclk=P1^3; //ds1302時(shí)鐘線定義sbitio=P1^4; //數(shù)據(jù)線sbitrst=P1^5; //復(fù)位線 //秒分時(shí)日月年星期 ucharcodewrite_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};//寫(xiě)地址ucharcoderead_add[]={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};//讀地址ucharcodeinit_ds[]={0x58,0x00,0x00,0x01,0x01,0x13,0x1};ucharmiao,fen,shi,ri,yue,week,nian;uchari;ucharfen1=0x11,shi1=0; //兩個(gè)鬧鐘變量的定義bitopen1;/*************寫(xiě)一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/voidwrite_ds1302(ucharadd,uchardat){ rst=1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io=dat&0x01; dat>>=1; //把數(shù)據(jù)右移一位 clk=1; //時(shí)鐘線拿高 } rst=0; //復(fù)位線合低 clk=0; io=0;}/*************從對(duì)應(yīng)的地址讀一個(gè)數(shù)據(jù)出來(lái)***************/ucharread_ds1302(ucharadd){ ucharvalue,i; rst=1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時(shí)鐘線拿低開(kāi)始讀數(shù)據(jù) value>>=1; if(io==1) value|=0x80; clk=1; //時(shí)鐘線拿高 } rst=0; //復(fù)位線合低 clk=0; io=0; returnvalue; //返回讀出來(lái)的數(shù)據(jù)}/*************把要的時(shí)間年月日都讀出來(lái)***************/voidread_time(){ miao=read_ds1302(read_add[0]); //讀秒 fen=read_ds1302(read_add[1]); //讀分 shi=read_ds1302(read_add[2]); //讀時(shí) ri=read_ds1302(read_add[3]); //讀日 yue=read_ds1302(read_add[4]); //讀月 nian=read_ds1302(read_add[5]); //讀年 week=read_ds1302(read_add[6]); //讀星期 Conversion(0,nian,yue,ri); //農(nóng)歷轉(zhuǎn)換 n_nian=year_moon; n_yue=month_moon; n_ri=day_moon;}/*************把要寫(xiě)的時(shí)間年月日都寫(xiě)入ds1302里***************/voidwrite_time(){ write_ds1302(0x8e,0x00); //翻開(kāi)寫(xiě)保護(hù) write_ds1302(write_add[0],miao); //寫(xiě)秒 write_ds1302(write_add[1],fen); //寫(xiě)分 write_ds1302(write_add[2],shi); //寫(xiě)時(shí) write_ds1302(write_add[3],ri); //寫(xiě)日 write_ds1302(write_add[4],yue); //寫(xiě)月 write_ds1302(write_add[5],nian); //寫(xiě)星期 write_ds1302(write_add[6],week); //寫(xiě)年 write_ds1302(0x8e,0x80); //關(guān)閉寫(xiě)保護(hù)}/*************把數(shù)據(jù)保存到ds1302RAM中**0-31*************/voidwrite_ds1302ram(ucharadd,uchardat){ add<<=1;//地址是從第二位開(kāi)始的 add&=0xfe;//把最低位清零是寫(xiě)的命令 add|=0xc0;//地址最高兩位為1 write_ds1302(0x8e,0x00); write_ds1302(add,dat); write_ds1302(0x8e,0x80);}/*************把數(shù)據(jù)從ds1302RAM讀出來(lái)**0-31*************/ucharread_ds1302ram(ucharadd){ add<<=1;//地址是從第二位開(kāi)始的 add|=0x01;//把最高位置1是讀命令 add|=0xc0;//地址最高兩位為1 return(read_ds1302(add)); }/*************初始化ds1302時(shí)間***************/voidinit_ds1302(){ uchari; rst=0; //第一次讀寫(xiě)數(shù)據(jù)時(shí)要把IO品拿低 clk=0; io=0; i=read_ds1302ram(30); if(i!=3) { i=3; write_ds1302ram(30,i); //40504100 3080 write_ds1302(0x8e,0x00); //翻開(kāi)寫(xiě)保護(hù) for(i=0;i<7;i++) write_ds1302(write_add[i],init_ds[i]); //把最高位值0允許ds1302工作 write_ds1302(0x8e,0x80); //關(guān)寫(xiě)保護(hù) }}DS1302與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,那么禁止寫(xiě)DS1302,即寫(xiě)保護(hù);D6=0,指定時(shí)鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5~D1指定輸入或輸出的特定存放器;最低位LSB(D0)為邏輯0,指定寫(xiě)操作(輸入),D0=1,指定讀操作(輸出)。4.2.2溫度程序設(shè)計(jì)單總線上最根本的操作有初始化、寫(xiě)和讀3種,所有其它的操作都由這3種根本操作組合而成,初始化用于對(duì)總線上的器件進(jìn)行狀態(tài)復(fù)位,寫(xiě)用于主節(jié)點(diǎn)向總線上寫(xiě)入一位數(shù)據(jù),讀用于主節(jié)點(diǎn)從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫(xiě)操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計(jì)如下:byteow_reset(void){bytepresence;DQ=0;//拉低總線delay(29);//保持480usDQ=1;//釋放總線delay(3);//等待回復(fù)presence=DQ;//讀取信號(hào)delay(25);//等待結(jié)束信號(hào)return(presence);//返回0:正常1:不存在}//從1-wire總線上讀取一個(gè)字節(jié)byteread_byte(void){bytei;bytevalue=0;for(i=8;i>0;i--){value>>=1;DQ=0;DQ=1;delay(1);if(DQ)value|=0x80;delay(6);}return(value);}//向1-WIRE總線上寫(xiě)一個(gè)字節(jié)voidwrite_byte(charval){bytei;for(i=8;i>0;i--)//一次寫(xiě)一位{DQ=0;//DQ=val&0x01;delay(5);//DQ=1;val=val/2;}delay(5);}5系統(tǒng)的機(jī)體設(shè)計(jì)5.1系統(tǒng)的模塊組成本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)的核心采用的是STC89C52單片機(jī);數(shù)據(jù)顯示模塊采用的是LCD液晶顯示;溫度采集模塊用的是DS18b20溫度傳感器,該傳感器所采用的是單總線傳輸,內(nèi)部帶有A/D轉(zhuǎn)換,用起來(lái)非常方便;時(shí)間處理模塊用的是DS1302時(shí)鐘芯片,可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能;調(diào)整設(shè)置模塊共包括四個(gè)按鍵:模式選擇鍵、功能選擇鍵、調(diào)整加按鍵、調(diào)整減按鍵。5.2功能實(shí)現(xiàn)系統(tǒng)在正常工作時(shí),LCD液晶上第一行顯示時(shí)分秒和溫度,第二行顯示年月日和星期,如果想要對(duì)時(shí)間進(jìn)行調(diào)整,可以通過(guò)調(diào)整設(shè)置模塊來(lái)實(shí)現(xiàn)。當(dāng)按下P3.3鍵時(shí),系統(tǒng)進(jìn)入另一模式,此時(shí)液晶顯示當(dāng)前溫度以及溫度上限和下限,可以通過(guò)按鍵來(lái)設(shè)置溫度上下限,當(dāng)溫度超過(guò)溫度上限或低于溫度下限,此時(shí)液晶會(huì)顯示越限標(biāo)志,如果想要退出該模式就在按一下P3.3即可。系統(tǒng)原理圖如圖18:圖18系統(tǒng)原理圖結(jié)論在整個(gè)設(shè)計(jì)過(guò)程中,硬件方面主要設(shè)計(jì)了STC89C52單片機(jī)的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個(gè)渠道的資料,主要設(shè)計(jì)了陽(yáng)歷數(shù)據(jù)讀取程序、陽(yáng)歷轉(zhuǎn)陰歷程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過(guò)一塊STC89C52開(kāi)發(fā)板,再借助于Keil、STC以及少許自己搭建的外圍電路實(shí)現(xiàn)的;再此過(guò)程中,分步調(diào)試時(shí)顯示出了陽(yáng)歷的日期及時(shí)間,還有實(shí)時(shí)溫度,集中調(diào)試時(shí)沒(méi)有到達(dá)預(yù)期效果。此萬(wàn)年歷具有讀顯示直觀、功能多樣、電路簡(jiǎn)潔、本錢(qián)低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的開(kāi)展趨勢(shì),具有廣闊的市場(chǎng)前景。在整個(gè)設(shè)計(jì)過(guò)程中學(xué)到了許多沒(méi)學(xué)到的知識(shí),在電路焊接時(shí)雖然沒(méi)什么大問(wèn)題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來(lái)不能急于求成。反而到達(dá)事半功倍的效果。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫(xiě)中,由于思路不清晰,開(kāi)始時(shí)遇到了很多的問(wèn)題,經(jīng)過(guò)靜下心來(lái)思考,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都要有耐心。在本次設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的。總之,此次畢業(yè)設(shè)計(jì)使我的能力得到了全方位的提高,次設(shè)計(jì)的電子萬(wàn)年歷也存在的缺乏的地方,有待于以后的改良。參考文獻(xiàn)[1]陳明熒.8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教程[M].北京:清華大學(xué)出版社[2]蘇平.單片機(jī)的原理與接口技術(shù)[M].北京:電子工業(yè)出版社,2006:1-113.[3]王忠民.微型計(jì)算機(jī)原理[M].西安:西安科技大學(xué)出版社,2003:15-55.[4]何立民.單片機(jī)高級(jí)教程[M].北京:北京航空航天大學(xué)出版社,2003年[5]紀(jì)宗南.單片機(jī)外圍器件使用手冊(cè)[M].北京:北京航空航天大學(xué)出版社,622-655.[6]周雪.模擬電子技術(shù)[M]西安:西安電子科技大學(xué)出版社,2005:81-95.[7]左金生.電子與模擬電子技術(shù)[M].北京:電子工業(yè)出版社,2004:105-131.[8]尹勇.單片機(jī)開(kāi)發(fā)環(huán)境μVision2的開(kāi)發(fā)指南[M].北京:北京航空航天大學(xué)出版社,2004:173-199.[9]馬忠梅,籍順心等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2001年[10]新編單片機(jī)原理與應(yīng)用〔第二版〕.西安電子科技大學(xué)出版社,2007.2[11]張萌.單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)綜合實(shí)例[M].北京:清華大學(xué)出版社,2007.7[12]樓然苗.單片機(jī)課程設(shè)計(jì)指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2007.7[13]朱思榮.51單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷、星期的轉(zhuǎn)換[Z].當(dāng)當(dāng)電子網(wǎng)[14]李廣弟.單片機(jī)原理及應(yīng)用[M]北京航空航天大學(xué)出版社,2004年[15]王越明.電子萬(wàn)年歷的設(shè)計(jì)[J].黑龍江科技信息,2004年[16]
VergheseGC,LangH,CaseyLF.Analysisofinstabilityinelectricalmachines.IEEETransonIA,1986,22:853-864.[17]
RichardBlanchard,JamesHarden.Mosfetscontrolmorepowerinthesame-sizedpackage.ElectronicDesign,1982,12:107~114[18]TiinaHavana.2003April.CommunicationintheSoftwareVulnerabilityReportingProcess.M.A.thesis,UniversityofJyvaskyla.[19]DanielE.Geer,Jr.(Editor),MaryAnnDavidson,MarcDonner,LyndaMcGhie,andAdamShostack.致謝經(jīng)過(guò)三個(gè)多月的時(shí)間,畢業(yè)設(shè)計(jì)按照預(yù)期完成了,由于本人的知識(shí)水平有限,論文和設(shè)計(jì)中有遺漏和缺陷的地方懇請(qǐng)指正。感謝我的導(dǎo)師,**老師給了我莫大的幫助,在她悉心的指導(dǎo)和嚴(yán)格的要求下,作品和論文順利完成了。論文從選題和最終完成,凝結(jié)著導(dǎo)師的辛勤的汗水,她不辭勞苦的教導(dǎo)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)使我終生受益。在此畢業(yè)設(shè)計(jì)完成之際,謹(jǐn)向?qū)熀退袔椭^(guò)我的老師致以崇高的敬意和衷心的感謝。還有感謝家人、朋友還有宿舍里所有的室友,是他們給我創(chuàng)造了良好的學(xué)習(xí)氣氛,在學(xué)習(xí)和生活中給了我支持和幫助。在以后的學(xué)習(xí)生活中我會(huì)時(shí)時(shí)敦促自己更加努力,不辜負(fù)師長(zhǎng)、親人、朋友對(duì)我的期望。在論文完成之際,我的心情萬(wàn)分沖動(dòng)。從論文的選題、資料的收集到論文的撰寫(xiě)編排整個(gè)過(guò)程中,我得到了許多的熱情幫助。其中無(wú)不凝聚著導(dǎo)師的心血和汗水,在此本人深表感謝!首先特別感謝我的畢業(yè)設(shè)計(jì)指導(dǎo)老師**老師,從論文的修改到最后的定稿,都凝注了指導(dǎo)老師的心血。導(dǎo)師嚴(yán)謹(jǐn)求實(shí)和一絲不茍的學(xué)風(fēng)、扎實(shí)勤勉和孜孜不倦的工作態(tài)度時(shí)刻鼓勵(lì)著我努力學(xué)習(xí),并將鞭策我在未來(lái)的工作中銳意進(jìn)取、發(fā)奮努力。導(dǎo)師的指導(dǎo)將使我終生受益。還要對(duì)所有授課老師表示深深的謝意!正是他們的教導(dǎo),才能使我的知識(shí)得以豐富,使我的視野得以拓寬,使我的自身修養(yǎng)得以提高!感謝各位到場(chǎng)老師,是你們?cè)诎倜χ谐槌鰰r(shí)間來(lái)對(duì)我的論文進(jìn)行指導(dǎo),你們的意見(jiàn)和建議將是我一生的財(cái)富!感謝所有幫助過(guò)我的人們!感謝我的同學(xué)和朋友,在我的論文撰寫(xiě)期間給予我工作和生活上的大力支持和幫助。附錄#include<reg52.h> //調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無(wú)符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint //無(wú)符號(hào)整型宏定義 變量范圍0~65535#include"eeprom52.h"#include"nongli.h"bitflag_200ms;bitflag_100ms;sbitbeep=P3^7; //蜂鳴器定義bitflag_beep_en;uintclock_value;//用作鬧鐘用的sbitdq=P3^2; //18b20IO口的定義uinttemperature;//溫度變量ucharflag_nl;//農(nóng)歷陽(yáng)歷顯示標(biāo)志位ucharmenu_1,menu_2;ucharkey_time,flag_value;//用做連加的中間變量bitkey_500ms;ucharn_nian,n_yue,n_ri; //農(nóng)歷顯示的函數(shù)#include"ds1302.h"#include"lcd1602.h"/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/voidwrite_eeprom(){ SectorErase(0x2000); byte_write(0x2000,fen1); byte_write(0x2001,shi1); byte_write(0x2002,open1); byte_write(0x2058,a_a); }/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來(lái)*****************/voidread_eeprom(){ fen1=byte_read(0x2000); shi1=byte_read(0x2001); open1=byte_read(0x2002); a_a=byte_read(0x2058);}/**************開(kāi)機(jī)自檢eeprom初始化*****************/voidinit_eeprom(){ read_eeprom(); //先讀 if(a_a!=1) //新的單片機(jī)初始單片機(jī)內(nèi)問(wèn)eeprom { fen1=3; shi1=8; open1=1; a_a=1; write_eeprom(); //保存數(shù)據(jù) } }/***********************18b20初始化函數(shù)*****************************/voidinit_18b20(){ bitq; dq=1; //把總線拿高 delay_uint(1); //15us dq=0; //給復(fù)位脈沖 delay_uint(80); //750us dq=1; //把總線拿高等待 delay_uint(10); //110us q=dq; //讀取18b20初始化信號(hào) delay_uint(20); //200us dq=1; //把總線拿高釋放總線}/*************寫(xiě)18b20內(nèi)的數(shù)據(jù)***************/voidwrite_18b20(uchardat){ uchari; for(i=0;i<8;i++) { //寫(xiě)數(shù)據(jù)是低位開(kāi)始 dq=0; //把總線拿低寫(xiě)時(shí)間隙開(kāi)始 dq=dat&0x01;//向18b20總線寫(xiě)數(shù)據(jù)了 delay_uint(5); //60us dq=1; //釋放總線 dat>>=1; } }/*************讀取18b20內(nèi)的數(shù)據(jù)***************/ucharread_18b20(){ uchari,value; for(i=0;i<8;i++) { dq=0; //把總線拿低讀時(shí)間隙開(kāi)始 value>>=1; //讀數(shù)據(jù)是低位開(kāi)始 dq=1; //釋放總線 if(dq==1) //開(kāi)始讀寫(xiě)數(shù)據(jù) value|=0x80; delay_uint(5); //60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間 } returnvalue; //返回?cái)?shù)據(jù)}/*************讀取溫度的值讀出來(lái)的是小數(shù)***************/uintread_temp(){ uintvalue; ucharlow; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否那么會(huì)影響到18b20的時(shí)序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過(guò)64位ROM write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令 delay_uint(50); //500us init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過(guò)64位ROM write_18b20(0xbe); //發(fā)出讀取暫存器命令 EA=0; low=read_18b20(); //讀溫度低字節(jié) value=read_18b20();//讀溫度高字節(jié) EA=1; value<<=8; //把溫度的高位左移8位 value|=low; //把讀出的溫度低位放到value的低八位中 value*=0.625; //轉(zhuǎn)換到溫度值小數(shù) returnvalue; //返回讀出的溫度帶小數(shù)}/******************1ms延時(shí)函數(shù)*******************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/******************寫(xiě)星期函數(shù)*******************/voidwrite_week(ucharhang,ucharadd,ucharweek)//寫(xiě)星期函數(shù){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); switch(week) { case1:write_data('M');//星期數(shù)為1時(shí),顯示 write_data('O'); write_data('N'); break; case2:write_data('T');//星期數(shù)據(jù)為2時(shí)顯示 write_data('U'); write_data('E'); break; case3:write_data('W');//星期數(shù)據(jù)為3時(shí)顯示 write_data('E'); write_data('D'); break; case4:write_data('T');//星期數(shù)據(jù)為4是顯示 write_data('H'); write_data('U'); break; case5:write_data('F');//星期數(shù)據(jù)為5時(shí)顯示 write_data('R'); write_data('I'); break; case6:write_data('S');//星期數(shù)據(jù)為6時(shí)顯示 write_data('T'); write_data('A'); break; case0:write_data('S');//星期數(shù)據(jù)為7時(shí)顯示 write_data('U'); write_data('N'); break; }}/*************時(shí)鐘顯示***************/voidinit_1602_ds1302(){ write_sfm2_ds1302(1,1,shi); //顯示時(shí) write_sfm2_ds1302(1,4,fen); //顯示分 write_sfm2_ds1302(1,7,miao); //顯示秒 write_week(2,12,week);// write_sfm1(1,14,week); //顯示星期 write_sfm3_18B20(1,11,temperature); //顯示溫度 if(flag_nl==0)//顯示陽(yáng)歷 { write_sfm2_ds1302(2,2,nian);//顯示年 write_sfm2_ds1302(2,5,yue); //顯示月 write_sfm2_ds1302(2,8,ri); //顯示日 } else //顯示農(nóng)歷 { write_sfm2_ds1302(2,2,n_nian); //顯示年 write_sfm2_ds1302(2,5,n_yue); //顯示月 write_sfm2_ds1302(2,8,n_ri); //顯示日 }} /*************定時(shí)器0初始化程序***************/voidinit_time0() { EA=1; //開(kāi)總中斷 TMOD=0X01; //定時(shí)器0、工作方式1 ET0=1; //開(kāi)定時(shí)器0中斷 TR0=1; //允許定時(shí)器0定時(shí)}/*************鬧鐘報(bào)警函數(shù)***************/voidmenu_dis(){ staticucharmm,value; if(flag_100ms==1) //100ms執(zhí)行一次 { flag_100ms=0; if(open1==1) //如果鬧鐘翻開(kāi) { if((miao==0)&&(fen==fen1)&&(shi==shi1)) { flag_beep_en=1; //有報(bào)警翻開(kāi)蜂鳴器響的標(biāo)志位 } if(flag_beep_en==1) //鬧鐘以被翻開(kāi) { clock_value++; if(clock_value<=30) beep=~beep; //蜂鳴器叫3秒 elseif(clock_value>30) { beep=1; //蜂鳴器停1秒 if(clock_value>40) { clock_value=0; } } //1分鐘后自動(dòng)關(guān)閉鬧鐘 value++; if(value>=10) { value=0; mm++; if(mm>=60) { mm=0; flag_beep_en=0; beep=1; } } } } }}/********************獨(dú)立按鍵程序*****************/ucharkey_can; //按鍵值voidkey() //獨(dú)立按鍵程序{ staticucharkey_new; key_can=20;//按鍵值復(fù)原 P3|=0x78;//對(duì)應(yīng)的按鍵IO口輸出為1 if((P3&0x78)!=0x78) //按鍵按下 { delay_1ms(1); //按鍵消抖動(dòng) if(((P3&0x78)!=0x78)&&(key_new==1)) { //確認(rèn)是按鍵按下 key_new=0; switch(P3&0x78) { case0x70:key_can=4;break; //得到按鍵值 case0x68:key_can=3;break; //得到按鍵值 case0x58:key_can=2;break; //得到按鍵值 case0x38:key_can=1;break; //得到按鍵值 }// write_sfm2(1,0,key_can); //顯示按鍵值 } } else key_new=1; }/**********************設(shè)置函數(shù)************************/voidkey_with(){ if(key_can==1) //設(shè)置鍵 { menu_1++; if(menu_1==1) //設(shè)置時(shí)間 { menu_2=1; write_string(1,0,"--W:"); write_string(2,0,"20--"); } if(menu_1==2) //設(shè)置鬧鐘 { menu_2=1; write_string(1,0,"setclock"); write_string(2,0,"Y00:00"); } if(menu_1>2)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度土地開(kāi)發(fā)權(quán)轉(zhuǎn)讓合同附規(guī)劃設(shè)計(jì)及施工許可
- 施工合同簽訂及履行制度
- 教育機(jī)構(gòu)的字體運(yùn)用規(guī)范
- 遠(yuǎn)程教育對(duì)學(xué)習(xí)困難學(xué)生的支持研究
- 幼兒園燃?xì)庑孤?yīng)急預(yù)案
- 上海市某物流有限公司勞動(dòng)合同
- 個(gè)人委托代理合同范本示例
- 三孩子離婚贍養(yǎng)費(fèi)合同范本
- 二手物品買(mǎi)賣(mài)合同范文
- 個(gè)人住房抵押貸款合同范本大全
- 煤礦電氣試驗(yàn)規(guī)程
- JCT796-2013 回彈儀評(píng)定燒結(jié)普通磚強(qiáng)度等級(jí)的方法
- 物業(yè)客服培訓(xùn)課件PPT模板
- 火力發(fā)電廠節(jié)能管理制度實(shí)施細(xì)則
- 2003年版勞動(dòng)合同范本
- 全名校北師大版數(shù)學(xué)五年級(jí)下冊(cè)第三單元達(dá)標(biāo)測(cè)試卷(含答案)
- 新員工入職通識(shí)考試(中軟國(guó)際)
- 華為攜手深圳國(guó)際會(huì)展中心創(chuàng)建世界一流展館
- 2023版思想道德與法治專(zhuān)題2 領(lǐng)悟人生真諦 把握人生方向 第3講 創(chuàng)造有意義的人生
- 全過(guò)程工程咨詢(xún)服務(wù)技術(shù)方案
- GB/T 41509-2022綠色制造干式切削工藝性能評(píng)價(jià)規(guī)范
評(píng)論
0/150
提交評(píng)論