基于STC89C52單片機(jī)的多功能電子萬(wàn)年歷.doc
《基于STC89C52單片機(jī)的多功能電子萬(wàn)年歷.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于STC89C52單片機(jī)的多功能電子萬(wàn)年歷.doc(52頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
摘要 本文介紹了基于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)潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場(chǎng)前景。 關(guān)鍵字:萬(wàn)年歷 溫度計(jì) 液晶顯示 ABSTRACT This paper introduces the based on STC89C52 multi-function electronic calendar of the hardware structure and software and hardware design method. This design by data display module, temperature acquisition module, time processing module and set module four modules. With STC89C52 single-chip microcomputer system for the controller to serial clock calendar chip DS1302 record calendar and time, it can be to date and time, minutes and seconds for the time, also has a leap year compensation and other functions. Temperature gathering choose DS18B20 chip, calendar by using object digital display, data showed that the 1602 A liquid crystal display module, can be in the LCD shows at the same time year, month, day, Sunday, when, minutes and seconds, still have time calibration etc. Function. This calendar has read the convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, has a broad market prospect. Key words:Perpetual Calendar thermometer LCD display 目錄 摘要 I ABSTRACT II 前言 V 1 緒論 1 1.1 課題研究的背景 1 1.2課題的研究目的與意義 1 1.3課題解決的主要內(nèi)容 1 2 系統(tǒng)的方案設(shè)計(jì)與論證 2 2.1單片機(jī)芯片設(shè)計(jì)與論證 3 2.2按鍵控制模塊設(shè)計(jì)與論證 3 2.3時(shí)鐘模塊設(shè)計(jì)與論證 3 2.4溫度采集模塊設(shè)計(jì)與論證 4 2.5顯示模塊模塊設(shè)計(jì)與論證 4 3 系統(tǒng)硬件的設(shè)計(jì) 5 3.1 STC89C52單片機(jī) 5 3.2時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析 8 3.3溫度芯片DS18B20接口設(shè)計(jì)與性能分析 11 3.4 LCD顯示模塊 15 3.5按鍵模塊設(shè)計(jì) 17 3.6復(fù)位電路的設(shè)計(jì) 17 4 系統(tǒng)的軟件設(shè)計(jì) 19 4.1主程序流程圖的設(shè)計(jì) 19 4.2 程序設(shè)計(jì) 20 5 系統(tǒng)的機(jī)體設(shè)計(jì) 24 5.1系統(tǒng)的模塊組成 24 5.2 功能實(shí)現(xiàn) 24 結(jié)論 26 參考文獻(xiàn) 27 致謝 28 附錄 29 前言 隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。目前,單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬(wàn)戶。電子萬(wàn)年歷的出現(xiàn)給人們的生活帶來(lái)了諸多方便。隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國(guó)民經(jīng)濟(jì)的個(gè)人領(lǐng)域得到了廣泛的運(yùn)用。單片機(jī)以體積小、功能全、性價(jià)比高等諸多優(yōu)點(diǎn),在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測(cè)控領(lǐng)域的應(yīng)用中獨(dú)占鰲頭,單片機(jī)開(kāi)發(fā)技術(shù)已成為電子信息、電氣、通信、自動(dòng)化、機(jī)電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。 單片機(jī)單芯片的微小體積和低的成本,可廣泛地嵌入到如玩具、家用電器、機(jī)器人、儀器儀表、汽車電子系統(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)年歷作為電子類小設(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ǎng)等使用,壁掛式LED數(shù)碼管顯示的日歷鐘逐漸受到人們的歡迎。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時(shí)準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出多種功能。 1 緒論 1.1 課題研究的背景 隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(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)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。 1.2課題的研究目的與意義 二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(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ù)的逐步發(fā)展,促使電子萬(wàn)年歷發(fā)展并且投入市場(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ǔ)、低功耗、抗斷電的器件。 (2)根據(jù)選用的電子萬(wàn)年歷芯片設(shè)計(jì)外圍電路和單片機(jī)的接口電路。 (3)在硬件設(shè)計(jì)時(shí),結(jié)構(gòu)要盡量簡(jiǎn)單實(shí)用、易于實(shí)現(xiàn),使系統(tǒng)電路盡量簡(jiǎn)單。 (4)根據(jù)硬件電路圖,在開(kāi)發(fā)板上完成器件的焊接。 (5)根據(jù)設(shè)計(jì)的硬件電路,編寫(xiě)控制STC89C52芯片的單片機(jī)程序。 (6)通過(guò)編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實(shí)現(xiàn)本設(shè)計(jì)的功能。 (7)在硬件電路和軟件程序設(shè)計(jì)時(shí),主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。 2 系統(tǒng)的方案設(shè)計(jì)與論證 單片機(jī)電子萬(wàn)年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡(jiǎn)單使用、易于實(shí)現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。 系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過(guò)成本,性能,功耗等多方面的考慮決定用三個(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芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲(chǔ)空間,能用于3V的超低電壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù), 當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。 方案二: 采用STC89C52芯片作為硬件核心,采用Flash ROM,能以3V的超低電壓工作,而且與MCS-51系列單片機(jī)完全兼容,該芯片內(nèi)部存儲(chǔ)器為8KB ROM 存儲(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ú)立按鍵,查詢簡(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é)約成本,但是,實(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),降低成本、降低制作難度且可節(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è)端口,采用間斷掃描法功耗小、硬件成本低及整個(gè)硬件系統(tǒng)體積相對(duì)減小。 方案三:采用LCD的方法,具有硬件制作簡(jiǎn)單可直接與單片機(jī)接口,顯示內(nèi)容多,功耗小,成本低等優(yōu)點(diǎn),LCM1602可顯示32個(gè)字符,采用LCD的缺點(diǎn)是亮度不夠。 比較以上三種方案:方案一硬件復(fù)雜體積大、功耗大;方案二硬件簡(jiǎn)單、功耗?。环桨溉布?jiǎn)單,顯示內(nèi)容多,功耗小,成本低等。本系統(tǒng)設(shè)計(jì)要求達(dá)到功耗小、體積小、成本低,顯示信息多等要求,權(quán)衡三種方案,選擇方案三。 3 系統(tǒng)硬件的設(shè)計(jì) 根據(jù)上述所確定的系統(tǒng)方案構(gòu)想,下面進(jìn)行系統(tǒng)硬件電路的具體設(shè)計(jì),系統(tǒng)的具體設(shè)計(jì)在下面會(huì)詳細(xì)介紹。 3.1 STC89C52單片機(jī) 本系統(tǒng)采用的是美國(guó)ATMEL公司生產(chǎn)的STC89C52單片機(jī),首先我們來(lái)熟悉一下STC89C52單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。 1.單片機(jī)的引腳功能 STC89C52單片機(jī)有40個(gè)引腳。 l Vcc:電源電壓+5V l GND:接地 l 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í)要求外接上拉電阻。 l 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位地址。 l 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)。 l 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)。 表1 P3口的第二功能圖 端口引腳 第二功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INT0(外中斷0) P3.3 INT1(外中斷1) P3.4 T0(定時(shí)/計(jì)時(shí)器0外部輸入) P3.5 T1(定時(shí)/計(jì)時(shí)器1外部輸入) P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) l RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFR AUXR的DISRT0(地址8EH)可打開(kāi)或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開(kāi)狀態(tài)。 l 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ú)效。 l 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)。 l 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. l XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。 l XTAL2:振蕩器反相放大器的輸出端。 STC89C52單片機(jī)內(nèi)部結(jié)構(gòu) 2.STC89C52單片機(jī)與MCS-51完全兼容 l 看門(mén)狗(WDT):WDT是一種需要軟件控制的復(fù)位方式。WDT 由13位計(jì)數(shù)器和特殊功能寄存器中的看門(mén)狗定時(shí)器復(fù)位存儲(chǔ)器(WDTRST)構(gòu)成。WDT 在默認(rèn)情況下無(wú)法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫(xiě)入01EH 和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個(gè)機(jī)器周期都會(huì)增加。WDT計(jì)時(shí)周期依賴于外部時(shí)鐘頻率。除了復(fù)位(硬件復(fù)位或WDT溢出復(fù)位),沒(méi)有辦法停止WDT工作。當(dāng)WDT溢出,它將驅(qū)動(dòng)RSR引腳輸出一個(gè)高電平。 l 可編程串口(UART)在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è)寄存器的功能決不能混淆。 l 振蕩電路:STC89C52系列單片機(jī)的內(nèi)部振蕩器,由一個(gè)單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出??梢岳盟鼉?nèi)部的振蕩器產(chǎn)生時(shí)鐘,只要XTAL1和XTAL2引腳上一個(gè)晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個(gè)完整的振蕩信號(hào)發(fā)生器,此方式稱為內(nèi)部方式。另一種方式由外部時(shí)鐘源提供一個(gè)時(shí)鐘信號(hào)到XTAL1端輸入,而XTAL2端浮空。在組成一個(gè)單片機(jī)應(yīng)用系統(tǒng)時(shí),多數(shù)采用這種方式,這種方式結(jié)構(gòu)緊湊,成本低廉,可靠性高。在電路中,對(duì)電容C1和C2的值要求不是很嚴(yán)格,如果使用高質(zhì)的晶振,則不管頻率為多少,C1、C2通常都選擇30pF。 l 定時(shí)/計(jì)數(shù)器:STC89C52單片機(jī)內(nèi)含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器。當(dāng)用于定時(shí)器方式時(shí),定時(shí)器的輸入來(lái)自內(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é)兩部分。 l 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ū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實(shí)際上它們是分開(kāi)的。究竟訪問(wèn)哪一區(qū),存是通過(guò)不同的尋址方式加以區(qū)分的。 l 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í)器寄存器、捕捉寄存器、控制寄存器。 l 中斷系統(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í)行中斷服務(wù)程序 (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,X2 32.768kHz晶振引腳 GND 地線 RST 復(fù)位端 I/O 數(shù)據(jù)輸入/輸出端口 SCLK 串行時(shí)鐘端口 VCC1 慢速充電引腳 VCC2 電源引腳 圖2 DS1302管腳 圖2 DS1302的引腳 3.2.2DS1302接口電路設(shè)計(jì) 1時(shí)鐘芯片DS1302的接口電路及工作原理: 圖3 DS1302與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,若為0則不能對(duì)DS1302進(jìn)行讀寫(xiě)數(shù)據(jù)。對(duì)于位6,若對(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)行?!癢P”是寫(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)始輸出。 表2 DS1302的控制字格式 1 RAM/CK A4 A3 A2 A1 A0 RD/WR 3、數(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所示。 圖4 DS1302讀/寫(xiě)時(shí)序圖 4、DS1302的寄存器 DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見(jiàn)表3。 表3 DS1302的日歷、時(shí)間寄存器 寫(xiě)寄存器 讀寄存器 Bit7 Bit6 Bit5 Bit7 Bit3 Bit2 Bit1 Bit0 80H 81H CH 10秒 秒 82H 83H 10分 分 84H 85H 12/ 0 10 時(shí) 時(shí) /PM 86H 87H 0 0 10 日 日 88H 89H 0 0 0 10月 月 8AH 8BH 0 0 0 0 0 星期 8CH 8DH 10年 年 8EH 8FH WP 0 0 0 0 0 0 0 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫(xiě)除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作;另一類為突發(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)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(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è)溫類消費(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用戶可定義的非易失性溫度報(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ù)置值。 LSB 位置/清除 增加 計(jì)數(shù)器1 斜率累加器 計(jì)數(shù)比較器 溫度寄存器 減到0 預(yù)置 計(jì)數(shù)器2 減到0 停止 預(yù)置 低溫度系數(shù)晶振 高溫度系數(shù)晶振 圖5 DS18B20測(cè)溫原理 3.3.2 DS18B20接口電路設(shè)計(jì) 如6圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。 圖6溫度傳感器DS18B20接口電路 3.3.3 DS18B20的工作時(shí)序 1、復(fù)位時(shí)序圖 圖7復(fù)位時(shí)序圖 1、 讀時(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.4 LCD顯示模塊 3.4.1LCM1602的特性及使用說(shuō)明 1 LCM1602的接口信號(hào)說(shuō)明如表4: 表4 LCM1602的接口信號(hào) 編號(hào) 引腳符號(hào) 功能說(shuō)明 編號(hào) 引腳符號(hào) 功能說(shuō)明 1 VSS 電源地 9 D2 DATA I/O 2 VDD 電源正極 10 D3 DATA I/O 3 VL 液晶顯示偏壓信號(hào) 11 D4 DATA I/O 4 RS 數(shù)據(jù)/命令選擇端(H/L) 12 D5 DATA I/O 5 R/W 讀/寫(xiě)選擇端(H/L) 13 D6 DATA I/O 6 E 使能信號(hào) 14 D7 DATA I/O 7 D0 DATA I/O 15 BLA 背光正極 8 D1 DATA I/O 16 BLK 背光負(fù)極 2、基本操作時(shí)序如下: 1)讀狀態(tài):RS=L,RW=H,E=H 2)寫(xiě)指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖 3)讀數(shù)據(jù):RS=H,RW=H,E=H 4)寫(xiě)數(shù)據(jù):RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖 3、初始化設(shè)置 1)顯示模式設(shè)置如表5: 表5顯示模式設(shè)置 指令碼 功能 0 0 1 1 1 0 0 0 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 2) 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置如表6: 表6 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置 指令碼 功能 0 0 0 0 1 D C B D=1開(kāi)顯示;D=0關(guān)顯示 C=1顯示光標(biāo);C=0不顯示光標(biāo) B=1光標(biāo)閃爍;B=0光標(biāo)不顯示 0 0 0 0 0 1 N S N=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ú)立按鍵,該種接法查詢簡(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)整,依此類推可進(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(全稱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(Power On Reset)實(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)始 DS1302初始化 設(shè)置DS1302 讀年月日星期時(shí)分秒 將讀取的數(shù)據(jù)處理后送液晶屏顯示 返回 圖17 主程序流程圖 4.2 程序設(shè)計(jì) 4.2.1 DS1302讀寫(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ì)如下: sbit clk = P1^3; //ds1302時(shí)鐘線定義 sbit io = P1^4; //數(shù)據(jù)線 sbit rst = P1^5; //復(fù)位線 //秒 分 時(shí) 日 月 年 星期 uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //寫(xiě)地址 uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b}; //讀地址 uchar code init_ds[] ={0x58,0x00,0x00,0x01,0x01,0x13,0x1}; uchar miao,fen,shi,ri,yue,week,nian; uchar i; uchar fen1=0x11,shi1=0; //兩個(gè)鬧鐘變量的定義 bit open1; /*************寫(xiě)一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/ void write_ds1302(uchar add,uchar dat) { 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)***************/ uchar read_ds1302(uchar add) { uchar value,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; return value; //返回讀出來(lái)的數(shù)據(jù) } /*************把要的時(shí)間 年月日 都讀出來(lái)***************/ void read_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里***************/ void write_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ù)保存到ds1302 RAM中**0-31*************/ void write_ds1302ram(uchar add,uchar dat) { add <<= 1; //地址是從第二位開(kāi)始的 add &= 0xfe; //把最低位清零 是寫(xiě)的命令 add |= 0xc0; //地址最高兩位為 1 write_ds1302(0x8e,0x00); write_ds1302(add,dat); write_ds1302(0x8e,0x80); } /*************把數(shù)據(jù)從ds1302 RAM讀出來(lái)**0-31*************/ uchar read_ds1302ram(uchar add) { add <<= 1; //地址是從第二位開(kāi)始的 add |= 0x01; //把最高位置1 是讀命令 add |= 0xc0; //地址最高兩位為 1 return(read_ds1302(add)); } /*************初始化ds1302時(shí)間***************/ void init_ds1302() { uchar i; rst = 0; //第一次讀寫(xiě)數(shù)據(jù)時(shí)要把IO品拿低 clk = 0; io = 0; i = read_ds1302ram(30); if(i != 3) { i = 3; write_ds1302ram(30,i); //4050 4100 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ì)如下: byte ow_reset(void) { byte presence; DQ = 0; //拉低總線 delay(29); // 保持 480us DQ = 1; // 釋放總線 delay(3); // 等待回復(fù) presence = DQ; // 讀取信號(hào) delay(25); // 等待結(jié)束信號(hào) return(presence); // 返回 0:正常 1:不存在 } //從 1-wire 總線上讀取一個(gè)字節(jié) byte read_byte(void) { byte i; byte value = 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é) void write_byte(char val) { byte i; 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)- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 STC89C52 單片機(jī) 多功能 電子 萬(wàn)年歷
鏈接地址:http://kudomayuko.com/p-6669898.html