基于STC89C52單片機的多功能電子萬年歷.doc
《基于STC89C52單片機的多功能電子萬年歷.doc》由會員分享,可在線閱讀,更多相關(guān)《基于STC89C52單片機的多功能電子萬年歷.doc(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。
摘要 本文介紹了基于STC89C52單片機的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計方法。本設(shè)計由數(shù)據(jù)顯示模塊、溫度采集模塊、時間處理模塊和調(diào)整設(shè)置模塊四個模塊組成。系統(tǒng)以STC89C52單片機為控制器,以串行時鐘日歷芯片DS1302記錄日歷和時間,它可以對年、月、日、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602A液晶顯示模塊,可以在LCD上同時顯示年、月、日、周日、時、分、秒,還具有時間校準等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,具有廣闊的市場前景。 關(guān)鍵字:萬年歷 溫度計 液晶顯示 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è)計與論證 2 2.1單片機芯片設(shè)計與論證 3 2.2按鍵控制模塊設(shè)計與論證 3 2.3時鐘模塊設(shè)計與論證 3 2.4溫度采集模塊設(shè)計與論證 4 2.5顯示模塊模塊設(shè)計與論證 4 3 系統(tǒng)硬件的設(shè)計 5 3.1 STC89C52單片機 5 3.2時鐘芯片DS1302接口設(shè)計與性能分析 8 3.3溫度芯片DS18B20接口設(shè)計與性能分析 11 3.4 LCD顯示模塊 15 3.5按鍵模塊設(shè)計 17 3.6復(fù)位電路的設(shè)計 17 4 系統(tǒng)的軟件設(shè)計 19 4.1主程序流程圖的設(shè)計 19 4.2 程序設(shè)計 20 5 系統(tǒng)的機體設(shè)計 24 5.1系統(tǒng)的模塊組成 24 5.2 功能實現(xiàn) 24 結(jié)論 26 參考文獻 27 致謝 28 附錄 29 前言 隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀錄。目前,單片機技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進了千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來了諸多方便。隨著微電子技術(shù)的高速發(fā)展,單片機在國民經(jīng)濟的個人領(lǐng)域得到了廣泛的運用。單片機以體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測控領(lǐng)域的應(yīng)用中獨占鰲頭,單片機開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。 單片機單芯片的微小體積和低的成本,可廣泛地嵌入到如玩具、家用電器、機器人、儀器儀表、汽車電子系統(tǒng)、工業(yè)控制單元、辦公自動化設(shè)備、金融電子系統(tǒng)、艦船、個人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具,于是基于單片機的醒目而時尚的電子版萬年歷順應(yīng)而生?;趩纹瑱C的電子萬年歷結(jié)合了時鐘和日歷的功能,將其二者融為一體,在顯示時間的同時還能顯示日期和年、月,它主要是通過單片機來讀取時鐘芯片的時間、日期,然后送給顯示設(shè)備顯示出來。而電子萬年歷作為電子類小設(shè)計不僅是市場上的寵兒,也是是單片機實驗中一個很常用的題目。因為它的有很好的開放性和可發(fā)揮性,因此對作者的要求比較高,不僅考察了對單片機的掌握能力更加強調(diào)了對單片機擴展的應(yīng)用。而且在操作的設(shè)計上要力求簡潔,功能上盡量齊全,顯示界面也要出色。數(shù)字顯示的日歷鐘已經(jīng)越來越流行,特別是適合在家庭居室、辦公室、大廳、會議室、車站和廣場等使用,壁掛式LED數(shù)碼管顯示的日歷鐘逐漸受到人們的歡迎。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時準確、可以進行夜視,并且還可以擴展出多種功能。 1 緒論 1.1 課題研究的背景 隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀錄。它可以對年、月、日、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時顯示年、月、日、時、分、秒和溫度等信息,還具有時間校準等功能。該電路采用STC89C52單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。 此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。 1.2課題的研究目的與意義 二十一世紀是數(shù)字化技術(shù)高速發(fā)展的時代,而單片機在數(shù)字化高速發(fā)展的時代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時代的今天亦是當(dāng)務(wù)之急,因為它應(yīng)用在學(xué)校、機關(guān)、企業(yè)、部隊等單位禮堂、訓(xùn)練場地、教學(xué)室、公共場地等場合,可以說遍及人們生活的每一個角落。所以說電子萬年歷的開發(fā)是國家之所需,社會之所需,人民之所需。 由于社會對信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬年歷發(fā)展并且投入市場得到廣泛應(yīng)用。 1.3課題解決的主要內(nèi)容 本課題所研究的電子萬年歷是單片機控制技術(shù)的一個具體應(yīng)用,主要研究內(nèi)容包括以下幾個方面: (1)選用電子萬年歷芯片時,應(yīng)重點考慮功能實在、使用方便、單片存儲、低功耗、抗斷電的器件。 (2)根據(jù)選用的電子萬年歷芯片設(shè)計外圍電路和單片機的接口電路。 (3)在硬件設(shè)計時,結(jié)構(gòu)要盡量簡單實用、易于實現(xiàn),使系統(tǒng)電路盡量簡單。 (4)根據(jù)硬件電路圖,在開發(fā)板上完成器件的焊接。 (5)根據(jù)設(shè)計的硬件電路,編寫控制STC89C52芯片的單片機程序。 (6)通過編程、編譯、調(diào)試,把程序下載到單片機上運行,并實現(xiàn)本設(shè)計的功能。 (7)在硬件電路和軟件程序設(shè)計時,主要考慮提高人機界面的友好性,方便用戶操作等因素。 2 系統(tǒng)的方案設(shè)計與論證 單片機電子萬年歷的制作有多種方法,可供選擇的器件和運用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡單使用、易于實現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。 系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用三個8位74LS164串行接口外接LED顯示器,RESPACK-8對單片機STC89C52進行供電,時間芯片DS1302連接單片機STC89C52。從而實現(xiàn)電子萬年歷的功能。 按照系統(tǒng)設(shè)計的要求,初步確定系統(tǒng)由電源模塊、時鐘模塊、顯示模塊、鍵盤接口模塊、溫度測量模塊和鬧鐘模塊共六個模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所示。 圖1 硬件電路框圖 2.1單片機芯片設(shè)計與論證 方案一: 采用AT89C51芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲空間,能用于3V的超低電壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設(shè)計中時由于不具備ISP在線編程技術(shù), 當(dāng)在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔插會對芯片造成一定的損壞。 方案二: 采用STC89C52芯片作為硬件核心,采用Flash ROM,能以3V的超低電壓工作,而且與MCS-51系列單片機完全兼容,該芯片內(nèi)部存儲器為8KB ROM 存儲空間。同樣具有STC89C52的功能,且具有在線編程可擦除技術(shù),當(dāng)在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞。 由于STC89C52內(nèi)部具有8KBROM存儲芯片并且支持ISP在線編程,因此采用STC89C52作為主控芯片。 2.2按鍵控制模塊設(shè)計與論證 方案一:采用矩陣鍵盤,由于按鍵多可實現(xiàn)數(shù)值的直接鍵入,但在系統(tǒng)中需要CPU不間斷的對其端口掃描。 方案二:采用獨立按鍵,查詢簡單,程序處理簡單,可節(jié)省CPU資源。 因系統(tǒng)中所需按鍵不多,為了釋放更多的CPU占有時間,操作方便,故采用方案二。 2.3時鐘模塊設(shè)計與論證 方案一:直接采用單片機定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。 方案二:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高,位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA. 由于DS1302時鐘芯片計數(shù)時間精度高,而且具有閏年補償功能等優(yōu)點,故采用方案二。 2.4溫度采集模塊設(shè)計與論證 方案一:采用溫度傳感器(如熱敏電阻或AD590),再經(jīng)AD轉(zhuǎn)換得到數(shù)字信號,精度較準,但價格昂貴,電路較復(fù)雜。 方案二:采用數(shù)字式溫度傳感器DS18B20,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式,但準確度不高,誤差最大達2度。 因為用DS18B20溫度芯片,采用單總線訪問,降低成本、降低制作難度且可節(jié)省單片機資源,故采用方案二。 2.5顯示模塊模塊設(shè)計與論證 方案一:采用靜態(tài)顯示方法,靜態(tài)顯示模塊的硬件制作較復(fù)雜及功耗大,要用到多個移位寄存器,但不占用端口,只需兩根串口線輸出。 方案二:采用動態(tài)顯示方法,動態(tài)顯示模塊的硬件制作簡單,段掃描和位掃描各占用一個端口,總需占用單片機14個端口,采用間斷掃描法功耗小、硬件成本低及整個硬件系統(tǒng)體積相對減小。 方案三:采用LCD的方法,具有硬件制作簡單可直接與單片機接口,顯示內(nèi)容多,功耗小,成本低等優(yōu)點,LCM1602可顯示32個字符,采用LCD的缺點是亮度不夠。 比較以上三種方案:方案一硬件復(fù)雜體積大、功耗大;方案二硬件簡單、功耗小;方案三硬件簡單,顯示內(nèi)容多,功耗小,成本低等。本系統(tǒng)設(shè)計要求達到功耗小、體積小、成本低,顯示信息多等要求,權(quán)衡三種方案,選擇方案三。 3 系統(tǒng)硬件的設(shè)計 根據(jù)上述所確定的系統(tǒng)方案構(gòu)想,下面進行系統(tǒng)硬件電路的具體設(shè)計,系統(tǒng)的具體設(shè)計在下面會詳細介紹。 3.1 STC89C52單片機 本系統(tǒng)采用的是美國ATMEL公司生產(chǎn)的STC89C52單片機,首先我們來熟悉一下STC89C52單片機的外部引腳和內(nèi)部結(jié)構(gòu)。 1.單片機的引腳功能 STC89C52單片機有40個引腳。 l Vcc:電源電壓+5V l GND:接地 l P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能驅(qū)動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。 在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻。 在Flash編程時,P0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時要求外接上拉電阻。 l P1口:P1口是一個帶內(nèi)部上拉電阻的8位雙向I/O,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。 Flash 編程和程序校驗期間,P1接收低8位地址。 l P2口:P2口是一個帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。 在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX@DPTR指令)時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(MOVX @Ri指令)時,P2口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個訪問期間不改變。 Flash 編程和程序校驗期間,P2亦接收低高位地址和其他控制信號。 l P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,見表1所示: P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。 表1 P3口的第二功能圖 端口引腳 第二功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INT0(外中斷0) P3.3 INT1(外中斷1) P3.4 T0(定時/計時器0外部輸入) P3.5 T1(定時/計時器1外部輸入) P3.6 WR(外部數(shù)據(jù)存儲器寫選通) P3.7 RD(外部數(shù)據(jù)存儲器讀選通) l RST:復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFR AUXR的DISRT0(地址8EH)可打開或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。 l ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。 對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。 如有必要,可通過多特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置,可禁止ALE操作。該位置后,只有一條MOVX和MOVC指令A(yù)LE才會被激活。另外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應(yīng)設(shè)置ALE無效。 l PSEN:程序存儲允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)STC89C52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。當(dāng)訪問外部數(shù)據(jù)存儲器,沒有兩次有效的PSEN信號。 l EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。 如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。 Flash存儲器編程時,該引腳加上+12V的變成電壓Vpp. l XTAL1:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。 l XTAL2:振蕩器反相放大器的輸出端。 STC89C52單片機內(nèi)部結(jié)構(gòu) 2.STC89C52單片機與MCS-51完全兼容 l 看門狗(WDT):WDT是一種需要軟件控制的復(fù)位方式。WDT 由13位計數(shù)器和特殊功能寄存器中的看門狗定時器復(fù)位存儲器(WDTRST)構(gòu)成。WDT 在默認情況下無法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個機器周期都會增加。WDT計時周期依賴于外部時鐘頻率。除了復(fù)位(硬件復(fù)位或WDT溢出復(fù)位),沒有辦法停止WDT工作。當(dāng)WDT溢出,它將驅(qū)動RSR引腳輸出一個高電平。 l 可編程串口(UART)在STC89C52中,UART 的操作與STC89C52 和AT89C52 一樣。STC89C52系列單片機的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方式時,它具有全雙工的操作功能,也就是說,它可以同時進行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個字節(jié)從接收寄存器讀走之前就開始接收第二個字節(jié)(當(dāng)然,如果第二個字節(jié)接收完畢,而第一個字節(jié)仍然沒有被讀走,那將會丟掉一個字節(jié))。串行口的發(fā)送和接收操作都是通過特殊功能寄存器中的數(shù)據(jù)緩沖寄存器SBUF進行的,但在SBUF的內(nèi)部,接收寄存器和發(fā)送寄存器在物理結(jié)構(gòu)上是完全獨立的。如果將數(shù)據(jù)寫入SBUF,數(shù)據(jù)會被送入發(fā)送寄存器準備發(fā)送。如果執(zhí)行SBUF指令,則讀出的數(shù)據(jù)一定來自接收緩存器。因此,CPU對SBUF的讀寫,實際上是分別訪問2個不同的寄存器。這2個寄存器的功能決不能混淆。 l 振蕩電路:STC89C52系列單片機的內(nèi)部振蕩器,由一個單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出。可以利用它內(nèi)部的振蕩器產(chǎn)生時鐘,只要XTAL1和XTAL2引腳上一個晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個完整的振蕩信號發(fā)生器,此方式稱為內(nèi)部方式。另一種方式由外部時鐘源提供一個時鐘信號到XTAL1端輸入,而XTAL2端浮空。在組成一個單片機應(yīng)用系統(tǒng)時,多數(shù)采用這種方式,這種方式結(jié)構(gòu)緊湊,成本低廉,可靠性高。在電路中,對電容C1和C2的值要求不是很嚴格,如果使用高質(zhì)的晶振,則不管頻率為多少,C1、C2通常都選擇30pF。 l 定時/計數(shù)器:STC89C52單片機內(nèi)含有2個16位的定時器/計數(shù)器。當(dāng)用于定時器方式時,定時器的輸入來自內(nèi)部時鐘發(fā)生電路,每過一個機器周期,定時器加1,而一個機器周期包含有12個振蕩周期,所以,定時器的技術(shù)頻率為晶振頻率的1/12,而計數(shù)頻率最高為晶振頻率的1/24。為了實現(xiàn)定時和計數(shù)功能,定時器中含有3種基本的寄存器:控制寄存器、方式寄存器和定時器/計數(shù)器。控制寄存器是一個8位的寄存器,用于控制定時器的工作狀態(tài),方式寄存器是一個8位的寄存器,用于確定定時器的工作方式,定時器/計數(shù)器是16位的計數(shù)器,分為高字節(jié)和低字節(jié)兩部分。 l RAM:高于7FH內(nèi)部數(shù)據(jù)存儲器的地址是8位的,也就是說其地址空間只有256字節(jié),但內(nèi)部RAM的尋址方式實際上可提供384字節(jié)。的直接地址訪問同一個存儲空間,高于7FH的間接地址訪問另一個存儲空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實際上它們是分開的。究竟訪問哪一區(qū),存是通過不同的尋址方式加以區(qū)分的。 l SFR:SFR是具有特殊功能的所有寄存器的集合,共含有22個不同寄存器,它們的地址分配在80H~FFH中。雖然如此,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其內(nèi)容是不確定的。如對這些單元進行讀操作,得到的是一些隨機數(shù),而寫入則無效,所以在編程時不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序狀態(tài)字寄存器PSW、堆棧指針SP、數(shù)據(jù)指針DPTR、I/O端口、串行口數(shù)據(jù)緩沖器SBUF、定時器寄存器、捕捉寄存器、控制寄存器。 l 中斷系統(tǒng):STC89C52單片機有6個中斷源,中斷系統(tǒng)主要由中斷允許寄存器IE、中斷優(yōu)先級寄存器IP、優(yōu)先級結(jié)構(gòu)和一些邏輯門組成。IE寄存器用于允許或禁止中斷;IP寄存器用于確定中斷源的優(yōu)先級別;優(yōu)先級結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門用于輸入中斷請求信號。在整個中斷響應(yīng)過程中CPU所執(zhí)行的操作步驟如下: (1)完成當(dāng)前指令的操作 (2)將PC內(nèi)容壓入堆棧 (3)保存當(dāng)前的中斷狀態(tài) (4)阻止同級的中斷請求 (5)將中斷程序入口地址送PC寄存器 (6)執(zhí)行中斷服務(wù)程序 (7)返回 3.2時鐘芯片DS1302接口設(shè)計與性能分析 3.2.1DS1302性能簡介 DS1302是Dallas公司生產(chǎn)的一種實時時鐘芯片。它通過串行方式與單片機進行數(shù)據(jù)傳送,能夠向單片機提供包括秒、分、時、日、月、年等在內(nèi)的實時時間信息,并可對月末日期、閏年天數(shù)自動進行調(diào)整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。另外,它還能提供31字節(jié)的用于高速數(shù)據(jù)暫存的RAM。 DS1302時鐘芯片內(nèi)主要包括移位寄存器、控制邏輯電路、振蕩器。DS1302與單片機系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統(tǒng)RST引腳驅(qū)動至高電平,然后在SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機之間的數(shù)據(jù)傳送是十分容易實現(xiàn)的,DS1302的引腳排列及內(nèi)部結(jié)構(gòu)圖如圖2: DS1302引腳說明: X1,X2 32.768kHz晶振引腳 GND 地線 RST 復(fù)位端 I/O 數(shù)據(jù)輸入/輸出端口 SCLK 串行時鐘端口 VCC1 慢速充電引腳 VCC2 電源引腳 圖2 DS1302管腳 圖2 DS1302的引腳 3.2.2DS1302接口電路設(shè)計 1時鐘芯片DS1302的接口電路及工作原理: 圖3 DS1302與MCU接口電路 圖3為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統(tǒng)中提供低電源并提供低功率的電池備份。VCC2在雙電源系統(tǒng)中提供主電源,在這種運用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時間信息以及數(shù)據(jù)。 DS1302由VCC1或VCC2 兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時,VCC2給DS1302供電。當(dāng)VCC2小于VCC1時,DS1302由VCC1供電。 DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖5所示。表-1為DS1302的控制字,此控制字的位7必須置1,若為0則不能對DS1302進行讀寫數(shù)據(jù)。對于位6,若對時間進行讀/寫時,CK=0,對程序進行讀/寫時RAM=1。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;進行寫操作時,該位為0。控制字節(jié)總是從最低位開始輸入/輸出的。表-2為DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時,寫保護位防止對任一寄存器的寫操作。 2、DS1302的控制字 DS1302的控制字如表2所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為1表示進行讀操作,為0表示進行寫操作??刂谱止?jié)總是從最低位開始輸出。 表2 DS1302的控制字格式 1 RAM/CK A4 A3 A2 A1 A0 RD/WR 3、數(shù)據(jù)輸入輸出(I/O) 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。如下圖4所示。 圖4 DS1302讀/寫時序圖 4、DS1302的寄存器 DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表3。 表3 DS1302的日歷、時間寄存器 寫寄存器 讀寄存器 Bit7 Bit6 Bit5 Bit7 Bit3 Bit2 Bit1 Bit0 80H 81H CH 10秒 秒 82H 83H 10分 分 84H 85H 12/ 0 10 時 時 /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 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 3.3溫度芯片DS18B20接口設(shè)計與性能分析 3.3.1DS18B20性能簡介 1.DS18B20的主要特性 DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。現(xiàn)場溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。其性能特點可歸納如下: 1獨特的單線接口僅需要一個端口引腳進行通信; 2測溫范圍在-55℃到125℃,分辨率最大可達0.0625℃; 3采用了3線制與單片機相連,減少了外部硬件電路; 4零待機功耗; 5可通過數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V; 6用戶可定義的非易失性溫度報警設(shè)置; 7報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件; 8負電壓特性,電源極性接反時,溫度計不會因發(fā)熱燒毀,只是不能正常工作。 2.DS18B20工作原理 DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時的延時時間由2s減為750ms。 DS18B20測溫原理如圖5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預(yù)置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖5中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。 LSB 位置/清除 增加 計數(shù)器1 斜率累加器 計數(shù)比較器 溫度寄存器 減到0 預(yù)置 計數(shù)器2 減到0 停止 預(yù)置 低溫度系數(shù)晶振 高溫度系數(shù)晶振 圖5 DS18B20測溫原理 3.3.2 DS18B20接口電路設(shè)計 如6圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測量精度高,電路連接簡單特點,此類傳感器僅需要一條數(shù)據(jù)線進行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。 圖6溫度傳感器DS18B20接口電路 3.3.3 DS18B20的工作時序 1、復(fù)位時序圖 圖7復(fù)位時序圖 1、 讀時序圖 圖8讀時序圖 3、寫時序圖 圖9 寫時序圖 3、工作時序 1)總線時序 圖10 總線時序 2)寫周期時序 圖11寫周期時序 3)起始/停止時序 圖12 起始/停止時序 4)應(yīng)答時序 圖13 應(yīng)答時序 5)立即地址讀時序 圖14 立即地址讀時序 3.4 LCD顯示模塊 3.4.1LCM1602的特性及使用說明 1 LCM1602的接口信號說明如表4: 表4 LCM1602的接口信號 編號 引腳符號 功能說明 編號 引腳符號 功能說明 1 VSS 電源地 9 D2 DATA I/O 2 VDD 電源正極 10 D3 DATA I/O 3 VL 液晶顯示偏壓信號 11 D4 DATA I/O 4 RS 數(shù)據(jù)/命令選擇端(H/L) 12 D5 DATA I/O 5 R/W 讀/寫選擇端(H/L) 13 D6 DATA I/O 6 E 使能信號 14 D7 DATA I/O 7 D0 DATA I/O 15 BLA 背光正極 8 D1 DATA I/O 16 BLK 背光負極 2、基本操作時序如下: 1)讀狀態(tài):RS=L,RW=H,E=H 2)寫指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖 3)讀數(shù)據(jù):RS=H,RW=H,E=H 4)寫數(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點陣,8位數(shù)據(jù)接口 2) 顯示開/關(guān)及光標設(shè)置如表6: 表6 顯示開/關(guān)及光標設(shè)置 指令碼 功能 0 0 0 0 1 D C B D=1開顯示;D=0關(guān)顯示 C=1顯示光標;C=0不顯示光標 B=1光標閃爍;B=0光標不顯示 0 0 0 0 0 1 N S N=1當(dāng)讀或?qū)懸粋€字符后地址指針加一,且光標加一 N=0當(dāng)讀或?qū)懸粋€字符后地址指針減一,且光標減一 S=1當(dāng)寫一個字符,整屏顯示左移(N=1) 3.4.2LCM1602與MCU的接口電路 LCD的D0~D7分別接單片機的的P2口,作為數(shù)據(jù)線,因為P0口內(nèi)部沒有上拉電阻,所以外部另外加上10K的上拉電阻;P1.0—P1.2分別接LCD的RS、RW、E三個控制管腳;RV1用來調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽極,接上相應(yīng)電平即點亮背光燈。 3.5按鍵模塊設(shè)計 本系統(tǒng)用到了5個按鍵,其中一個用作系統(tǒng)手動復(fù)位,另外4個采用獨立按鍵,該種接法查詢簡單,程序處理簡單,可節(jié)省CPU資源,按鍵電路如圖15所示,4個獨立按鍵分別與STC89C52的P3.4、P3.5、P3.6、P3.7接口相連。 圖15 按鍵電路 對以上4個按鍵作簡要說明:S4——SET 鍵,S3——UP鍵,S2——DOWN鍵,S5——OUT/STOP鍵。 SET 鍵:按下SET鍵進入時間校準狀態(tài),按一下進入秒調(diào)整,兩下分調(diào)整,依此類推可進行各年月日,時分秒以及星期的校準; UP鍵:當(dāng)SET鍵按下時,UP進行SET選定項(如:小時)的加操作; DOWN鍵:當(dāng)SET鍵按下時,DOWN進行SET選定項(如:小時)的減操作; OUT鍵:當(dāng)OUT鍵按下時,此鍵功能為退出校準功能,進入下一模式,顯示溫度值和上下限的溫度值。 3.6復(fù)位電路的設(shè)計 當(dāng)STC89C52單片機的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個機器周期以上的高電平時,單片機就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機就處于循環(huán)復(fù)位狀態(tài),而無法執(zhí)行程序。因此要求單片機復(fù)位后能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個機器周期為1μs,那么復(fù)位脈沖寬度最小應(yīng)為2μs。在實際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時間,參數(shù)漂移,晶振穩(wěn)定時間以及復(fù)位的可靠性等因素,必須有足夠的余量。 根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位、手動復(fù)位。 上電復(fù)位要求接通電源后,自動實現(xiàn)復(fù)位操作。STC89C52單片機的上電復(fù)位POR(Power On Reset)實質(zhì)上就是上電延時復(fù)位,也就是在上電延時期間把單片機鎖定在復(fù)位狀態(tài)上。在單片機每次初始加電時,首先投入工作的功能部件是復(fù)位電路。復(fù)位電路把單片機鎖定在復(fù)位狀態(tài)上并且維持一個延時(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個等待時間;在電源電壓穩(wěn)定之后,再插入一個延時,給予時鐘振蕩器從起振到穩(wěn)定的一個等待時間;在單片機開始進入運行狀態(tài)之前,還要至少推遲2個機器周期的延時。 本設(shè)計采用上電且開關(guān)復(fù)位電路,如圖16所示上電后,由于電容充電,使RST持續(xù)一段高電平時間。當(dāng)單片機已在運行之中時,按下復(fù)位鍵也能使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電且開關(guān)復(fù)位的操作。通常選擇C=10~30μF,本設(shè)計采用的電容值為10μF的電容和電阻為4.7K的電阻。 圖16 復(fù)位電路 4 系統(tǒng)的軟件設(shè)計 電子萬年歷的功能是在程序控制下實現(xiàn)的。該系統(tǒng)的軟件設(shè)計方法與硬件設(shè)計相對應(yīng),按整體功能分成多個不同的程序模塊,分別進行設(shè)計、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強了程序的可移植性。 本系統(tǒng)的軟件部分主要要進行公歷計算程序設(shè)計,溫度測量程序設(shè)計,按鍵的掃描輸入等。程序開始運行后首先要進行初始化,把單片機的各引腳的狀態(tài)按程序里面的初始化命令進行初始化,初始化完成后運行溫度測量程序,讀取出溫度傳感器測量出來的溫度,然后運行公歷計算程序,得到公歷的時間、日期信息,再運行按鍵掃描程序,檢測有無按鍵按下,如果沒有按鍵按下則直接調(diào)用節(jié)日計算程序,根據(jù)得到的公歷日期信息計算出節(jié)日,如果有按鍵按下則更新按鍵修改后的變量后送給節(jié)日計算程序,由節(jié)日計算程序根據(jù)修改后的變量計算出對應(yīng)的節(jié)假日,計算完成后運行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對應(yīng)的數(shù)碼管讓其顯示。 4.1主程序流程圖的設(shè)計 主程序流程圖如圖17: 開始 DS1302初始化 設(shè)置DS1302 讀年月日星期時分秒 將讀取的數(shù)據(jù)處理后送液晶屏顯示 返回 圖17 主程序流程圖 4.2 程序設(shè)計 4.2.1 DS1302讀寫程序設(shè)計 本系統(tǒng)的時間讀取主要來源于單片機對DS1302的操作,在硬件上時鐘芯片DS1302與單片機的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見系統(tǒng)硬件設(shè)計原理圖。讀取寫程序設(shè)計如下: sbit clk = P1^3; //ds1302時鐘線定義 sbit io = P1^4; //數(shù)據(jù)線 sbit rst = P1^5; //復(fù)位線 //秒 分 時 日 月 年 星期 uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //寫地址 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; //兩個鬧鐘變量的定義 bit open1; /*************寫一個數(shù)據(jù)到對應(yīng)的地址里***************/ void write_ds1302(uchar add,uchar dat) { rst = 1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk = 0; //時鐘線拿低開始寫數(shù)據(jù) io = add & 0x01; add >>= 1; //把地址右移一位 clk = 1; //時鐘線拿高 } for(i=0;i<8;i++) { clk = 0; //時鐘線拿低開始寫數(shù)據(jù) io = dat & 0x01; dat >>= 1; //把數(shù)據(jù)右移一位 clk = 1; //時鐘線拿高 } rst = 0; //復(fù)位線合低 clk = 0; io = 0; } /*************從對應(yīng)的地址讀一個數(shù)據(jù)出來***************/ uchar read_ds1302(uchar add) { uchar value,i; rst = 1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk = 0; //時鐘線拿低開始寫數(shù)據(jù) io = add & 0x01; add >>= 1; //把地址右移一位 clk = 1; //時鐘線拿高 } for(i=0;i<8;i++) { clk = 0; //時鐘線拿低開始讀數(shù)據(jù) value >>= 1; if(io == 1) value |= 0x80; clk = 1; //時鐘線拿高 } rst = 0; //復(fù)位線合低 clk = 0; io = 0; return value; //返回讀出來的數(shù)據(jù) } /*************把要的時間 年月日 都讀出來***************/ void read_time() { miao = read_ds1302(read_add[0]); //讀秒 fen = read_ds1302(read_add[1]); //讀分 shi = read_ds1302(read_add[2]); //讀時 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 ; } /*************把要寫的時間 年月日 都寫入ds1302里***************/ void write_time() { write_ds1302(0x8e,0x00); //打開寫保護 write_ds1302(write_add[0],miao); //寫秒 write_ds1302(write_add[1],fen); //寫分 write_ds1302(write_add[2],shi); //寫時 write_ds1302(write_add[3],ri); //寫日 write_ds1302(write_add[4],yue); //寫月 write_ds1302(write_add[5],nian); //寫星期 write_ds1302(write_add[6],week); //寫年 write_ds1302(0x8e,0x80); //關(guān)閉寫保護 } /*************把數(shù)據(jù)保存到ds1302 RAM中**0-31*************/ void write_ds1302ram(uchar add,uchar dat) { add <<= 1; //地址是從第二位開始的 add &= 0xfe; //把最低位清零 是寫的命令 add |= 0xc0; //地址最高兩位為 1 write_ds1302(0x8e,0x00); write_ds1302(add,dat); write_ds1302(0x8e,0x80); } /*************把數(shù)據(jù)從ds1302 RAM讀出來**0-31*************/ uchar read_ds1302ram(uchar add) { add <<= 1; //地址是從第二位開始的 add |= 0x01; //把最高位置1 是讀命令 add |= 0xc0; //地址最高兩位為 1 return(read_ds1302(add)); } /*************初始化ds1302時間***************/ void init_ds1302() { uchar i; rst = 0; //第一次讀寫數(shù)據(jù)時要把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); //打開寫保護 for(i=0;i<7;i++) write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允許ds1302工作 write_ds1302(0x8e,0x80); //關(guān)寫保護 } } DS1302與微處理器進行數(shù)據(jù)交換時,首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯 1,如果D7=0,則禁止寫DS1302,即寫保護;D6=0,指定時鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5~D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入),D0=1,指定讀操作(輸出) 。 4.2.2 溫度程序設(shè)計 單總線上最基本的操作有初始化、寫和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對總線上的器件進行狀態(tài)復(fù)位,寫用于主節(jié)點向總線上寫入一位數(shù)據(jù),讀用于主節(jié)點從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計如下: byte ow_reset(void) { byte presence; DQ = 0; //拉低總線 delay(29); // 保持 480us DQ = 1; // 釋放總線 delay(3); // 等待回復(fù) presence = DQ; // 讀取信號 delay(25); // 等待結(jié)束信號 return(presence); // 返回 0:正常 1:不存在 } //從 1-wire 總線上讀取一個字節(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 總線上寫一個字節(jié) void write_byte(char val) { byte i; for (i=8; i>0; i--) // 一次寫一位 { DQ = 0; // DQ = val&0x01; delay(5); // DQ = 1; val=val/2; } delay(5); } 5 系統(tǒng)的機體設(shè)計 5.1系統(tǒng)的模塊組成 本設(shè)計由數(shù)據(jù)顯示模塊、溫度采集模塊、時間處理模塊和調(diào)整設(shè)置模塊四個模塊組成。系統(tǒng)的核心采用的是STC89C52單片機;數(shù)據(jù)顯示模塊采用的是LCD液晶顯示;溫度采集模塊用的是DS18b20溫度傳感器,該傳感器所采用的是單總線傳輸,內(nèi)部帶有A/D轉(zhuǎn)換,用起來非常方便;時間處理模塊用的是DS1302時鐘芯片,可以對年、月、日、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能;調(diào)整設(shè)置模塊共包括四個按鍵:模式選擇鍵、功能選擇鍵、調(diào)整加按鍵、調(diào)整減按鍵。 5.2 功能實現(xiàn) 系統(tǒng)在正常工作時,LCD液晶上第一行顯示時分秒和溫度,第二行顯示年月日和星期,如果想要對時間進行調(diào)整,可以通過調(diào)整設(shè)置模塊來實現(xiàn)。當(dāng)按下P3.3鍵時,系統(tǒng)進入另一模式,此時液晶顯示當(dāng)前溫度以及溫度上限和下限,可以通過按鍵來設(shè)置溫度上下限,當(dāng)溫度超過溫度上限或低于溫度下限,此時液晶會顯示越限標- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 STC89C52 單片機 多功能 電子 萬年歷
鏈接地址:http://www.3dchina-expo.com/p-6669898.html