電子萬(wàn)年歷的設(shè)計(jì)與制作畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p> 題目電子萬(wàn)年歷的設(shè)計(jì)與制作</p><p><b>  摘 要</b></p><p>  本文介紹了基于AT89S52單片機(jī)的多功能電子萬(wàn)年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。

2、系統(tǒng)以AT89S52單片機(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)前景。</p><

3、p>  關(guān)鍵字:萬(wàn)年歷;溫度計(jì);液晶顯示</p><p><b>  ABSTRACT</b></p><p>  This paper introduces the based on AT89S52 multi-function electronic calendar of the hardware structure and software and har

4、dware design method. This design by data display module, temperature acquisition module, time processing module and set module four modules. With AT89S52 single-chip microcomputer system for the controller to serial cloc

5、k 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 f</p><p>  Key words:Perpetual Calendar;thermometer;

6、LCD display</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p><b>  第1章 緒論1</b></p><p>  1.1 課題研究

7、的背景1</p><p>  1.2 課題的研究目的與意義1</p><p>  1.3 課題解決的主要內(nèi)容2</p><p>  第2章 系統(tǒng)的方案設(shè)計(jì)與論述3</p><p><b>  2.1概述3</b></p><p>  2.2單片機(jī)芯片設(shè)計(jì)與論證3</p>

8、<p>  2.3 按鍵控制模塊設(shè)計(jì)與論證3</p><p>  2.4時(shí)鐘模塊設(shè)計(jì)與論證4</p><p>  2.5溫度采集模塊設(shè)計(jì)與論證4</p><p>  2.6顯示模塊設(shè)計(jì)與論證4</p><p>  2.7系統(tǒng)的機(jī)體設(shè)計(jì)…...………………………………………………4

9、 </p><p>  第3章 系統(tǒng)硬件的設(shè)計(jì)5</p><p><b>  3.1概述5</b></p><p>  3.2 AT89S52單片機(jī)5</p><p>  3.2.1單片機(jī)的引腳功能5</p>&

10、lt;p>  3.2.2 AT89S52單片機(jī)與MCS-51完全兼容5</p><p>  3.3 時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析5</p><p>  3.3.1 DS1302性能簡(jiǎn)介5</p><p>  3.3.2 DS1302接口電路設(shè)計(jì)5</p><p>  3.4 溫度芯片DS18B20接口設(shè)計(jì)與性能分析6

11、</p><p>  3.4.1 DS18B20性能簡(jiǎn)介6</p><p>  3.4.2 DS18B20接口電路設(shè)計(jì)6</p><p>  3.4.3 DS18B20的工作時(shí)序6</p><p>  3.5 LCD顯示模塊6</p><p>  3.5.1 LCM1602的特性及使用說明7</p>

12、;<p>  3.5.2 LCM1602與MCU的接口電路7</p><p>  3.6 按鍵模塊設(shè)計(jì)7</p><p>  3.7 復(fù)位電路的設(shè)計(jì)7</p><p>  第4章 系統(tǒng)的軟件設(shè)計(jì)7</p><p><b>  4.1 概述7</b></p><p>  4.

13、2 主程序流程圖的設(shè)計(jì)7</p><p>  4.3 程序設(shè)計(jì)7</p><p>  4.3.1 DS1302讀寫程序設(shè)計(jì)8</p><p>  4.3.2 溫度程序設(shè)計(jì)8</p><p><b>  總結(jié)與展望10</b></p><p><b>  參考文獻(xiàn)11</

14、b></p><p><b>  致 謝13</b></p><p><b>  附錄14</b></p><p><b>  緒論</b></p><p>  隨著科學(xué)的快速發(fā)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類不</p><p>

15、;  斷研究,不斷創(chuàng)新紀(jì)錄。目前,單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬(wàn)戶。電</p><p>  子萬(wàn)年歷的出現(xiàn)給人們的生活帶來(lái)了諸多方便。隨著微電子技術(shù)的高速發(fā)展,單</p><p>  片機(jī)在國(guó)民經(jīng)濟(jì)的個(gè)人領(lǐng)域得到了廣泛的運(yùn)用。單片機(jī)以體積小、功能全、性價(jià)</p><p>  比高等諸多優(yōu)點(diǎn),在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各</p&g

16、t;<p>  種測(cè)控領(lǐng)域的應(yīng)用中獨(dú)占鰲頭,單片機(jī)開發(fā)技術(shù)已成為電子信息、電氣、通信、</p><p>  自動(dòng)化、機(jī)電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。</p><p>  單片機(jī)單芯片的微小體積和低的成本,可廣泛地嵌入到如玩具、家用電器、</p><p>  機(jī)器人、儀器儀表、汽車電子系統(tǒng)、工業(yè)控制單元、辦公自動(dòng)化設(shè)備、金融電子</p>

17、;<p>  系統(tǒng)、艦船、個(gè)人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化</p><p>  工具,于是基于單片機(jī)的醒目而時(shí)尚的電子版萬(wàn)年歷順應(yīng)而生?;趩纹瑱C(jī)的電</p><p>  子萬(wàn)年歷結(jié)合了時(shí)鐘和日歷的功能,將其二者融為一體,在顯示時(shí)間的同時(shí)還能</p><p>  顯示日期和年、月,它主要是通過單片機(jī)來(lái)讀取時(shí)鐘芯片的時(shí)間、日期,

18、然后送</p><p>  給顯示設(shè)備顯示出來(lái)。而電子萬(wàn)年歷作為電子類小設(shè)計(jì)不僅是市場(chǎng)上的寵兒,也</p><p>  是是單片機(jī)實(shí)驗(yàn)中一個(gè)很常用的題目。因?yàn)樗挠泻芎玫拈_放性和可發(fā)揮性,因</p><p>  此對(duì)作者的要求比較高,不僅考察了對(duì)單片機(jī)的掌握能力更加強(qiáng)調(diào)了對(duì)單片機(jī)擴(kuò)</p><p>  展的應(yīng)用。而且在操作的設(shè)計(jì)上要力求簡(jiǎn)潔,

19、功能上盡量齊全,顯示界面也要出</p><p>  色。數(shù)字顯示的日歷鐘已經(jīng)越來(lái)越流行,特別是適合在家庭居室、辦公室、大廳、</p><p>  會(huì)議室、車站和廣場(chǎng)等使用,壁掛式LED數(shù)碼管顯示的日歷鐘逐漸受到人們的歡</p><p>  迎。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時(shí)準(zhǔn)確、可以進(jìn)行夜視,并且還可</p><p>  以擴(kuò)展出多

20、種功能。。</p><p><b>  課題研究的背景</b></p><p>  隨著科技的快速發(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í)

21、間校準(zhǔn)等功能。該電路采用AT89S52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p>  此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。</p><p>  課題的研究目的與意義</p><p>  二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字

22、化高速發(fā)展的時(shí)代扮演著極為重要的角色。電子萬(wàn)年歷的開發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場(chǎng)地、教學(xué)室、公共場(chǎng)地等場(chǎng)合,可以說遍及人們生活的每一個(gè)角落。所以說電子萬(wàn)年歷的開發(fā)是國(guó)家之所需,社會(huì)之所需,人民之所需。</p><p>  由于社會(huì)對(duì)信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬(wàn)年歷發(fā)展并且投入市場(chǎng)得到廣泛應(yīng)用</p><p

23、><b>  課題解決的主要內(nèi)容</b></p><p>  本課題所研究的電子萬(wàn)年歷是單片機(jī)控制技術(shù)的一個(gè)具體應(yīng)用,主要研究?jī)?nèi)容包括以下幾個(gè)方面:</p><p> ?。?)選用電子萬(wàn)年歷芯片時(shí),應(yīng)重點(diǎn)考慮功能實(shí)在、使用方便、單片存儲(chǔ)、低功耗、抗斷電的器件。</p><p>  (2)根據(jù)選用的電子萬(wàn)年歷芯片設(shè)計(jì)外圍電路和單片機(jī)的接口電

24、路</p><p> ?。?)在硬件設(shè)計(jì)時(shí),結(jié)構(gòu)要盡量簡(jiǎn)單實(shí)用、易于實(shí)現(xiàn),使系統(tǒng)電路盡量簡(jiǎn)單</p><p> ?。?)根據(jù)硬件電路圖,在開發(fā)板上完成器件的焊接。</p><p>  (5)根據(jù)設(shè)計(jì)的硬件電路,編寫控制AT89S52芯片的單片機(jī)程序。</p><p> ?。?)通過編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實(shí)現(xiàn)本設(shè)計(jì)的功能

25、。</p><p> ?。?)在硬件電路和軟件程序設(shè)計(jì)時(shí),主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。</p><p>  第2章 系統(tǒng)的方案設(shè)計(jì)與論述</p><p><b>  2.1概述</b></p><p>  單片機(jī)電子萬(wàn)年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方

26、案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡(jiǎn)單使用、易于實(shí)現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。</p><p>  系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用三個(gè)8位74LS164串行接口外接LED顯示器,RESPACK-8對(duì)單片機(jī)AT89S52進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)AT89S52。從而實(shí)現(xiàn)電子萬(wàn)年歷的功能

27、。</p><p>  按照系統(tǒng)設(shè)計(jì)的要求,初步確定系統(tǒng)由電源模塊、時(shí)鐘模塊、顯示模塊、鍵盤接口模塊、溫度測(cè)量模塊和鬧鐘模塊共六個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖2.1所示</p><p>  圖2.1 硬件電路框圖</p><p>  2.2單片機(jī)芯片選取</p><p>  采用AT89S52芯片作為硬件核心,采用Flash ROM,能以

28、3V的超低電壓工作,而且與MCS-51系列單片機(jī)完全兼容,該芯片內(nèi)部存儲(chǔ)器為8KB ROM 存儲(chǔ)空間。同樣具有AT89S52的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞。</p><p>  由于AT89S52內(nèi)部具有8KBROM存儲(chǔ)芯片并且支持ISP在線編程,因此采用AT89S52作為主控芯片。</

29、p><p>  2.3 按鍵控制模塊設(shè)計(jì)與論證</p><p>  因系統(tǒng)中所需按鍵不多,為了釋放更多的CPU占有時(shí)間,操作方便采用獨(dú)</p><p>  立按鍵,查詢簡(jiǎn)單,程序處理簡(jiǎn)單,可節(jié)省CPU資源</p><p>  2.4 時(shí)鐘模塊設(shè)計(jì)與論述</p><p>  采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302芯片

30、是一種高性能的時(shí)鐘芯片,可</p><p>  自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,</p><p>  位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時(shí)耗電小于300</p><p><b>  Ma</b></p><p>  2.5 溫度采集模塊設(shè)計(jì)與論證&l

31、t;/p><p>  因?yàn)橛肈S18B20溫度芯片,采用單總線訪問,降低成本、降低制作難度且</p><p>  可節(jié)省單片機(jī)資源,所以采用數(shù)字式溫度傳感器DS18B20,它能直接讀出被測(cè)溫</p><p>  度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。</p><p>  2.6 顯示模塊設(shè)計(jì)與論證</p>

32、<p>  采用LCD的方法,具有硬件制作簡(jiǎn)單可直接與單片機(jī)接口,顯示內(nèi)容多,功耗</p><p>  小,成本低等優(yōu)點(diǎn),LCM1602可顯</p><p>  2.7 系統(tǒng)的機(jī)體設(shè)計(jì) </p><p>  本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)的核心采用的是AT89S52單片機(jī);數(shù)據(jù)顯示模塊采用的是LCD液晶

33、顯示;溫度采集模塊用的是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)整減按鍵。</p><p>  系統(tǒng)在正常工作時(shí),LCD液晶上第一行顯示時(shí)分秒和溫度,第二行顯示年月日和星期,如果想要對(duì)時(shí)間進(jìn)行調(diào)

34、整,可以通過調(diào)整設(shè)置模塊來(lái)實(shí)現(xiàn)。當(dāng)按下P3.3鍵時(shí),系統(tǒng)進(jìn)入另一模式,此時(shí)液晶顯示當(dāng)前溫度以及溫度上限和下限,可以通過按鍵來(lái)設(shè)置溫度上下限,當(dāng)溫度超過溫度上限或低于溫度下限,此時(shí)液晶會(huì)顯示越限標(biāo)志,如果想要退出該模式就在按一下P3.3即可。</p><p>  系統(tǒng)仿真圖如圖2.2:</p><p>  圖2.2 系統(tǒng)仿真圖</p><p>  第3章 系統(tǒng)硬件的

35、設(shè)計(jì)</p><p><b>  3.1概述</b></p><p>  系統(tǒng)硬件的設(shè)計(jì)主要采用AT89S52單片機(jī)的可編程串口其內(nèi)部的震蕩電路產(chǎn)生時(shí)鐘。用其2個(gè)定時(shí)器、計(jì)數(shù)器產(chǎn)生震蕩周期。單片機(jī)中的六個(gè)中斷系統(tǒng)中C</p><p>  PU執(zhí)行各種操作。另外同時(shí)使用時(shí)鐘芯片DS1302能夠向單片機(jī)提供包括秒、分、時(shí)、日、月、年等在內(nèi)的實(shí)時(shí)時(shí)間

36、信息。</p><p>  3.2 AT89S52單片機(jī)</p><p>  3.2.1 單片機(jī)的引腳功能</p><p>  AT89S52單片機(jī)有40個(gè)引腳</p><p>  Vcc:電源電壓+5V</p><p><b>  GND:接地</b></p><p> 

37、 P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí)要求外接上拉電阻。</p><p>  P1口:P1口是一個(gè)帶內(nèi)部上拉電

38、阻的8位雙向I/O,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。Flash 編程和程序校驗(yàn)期間,P1接收低8位地址。</p><p>  P2口:P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。

39、對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。在訪問外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器(MOVX @Ri指令)時(shí),P2口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個(gè)訪問期間不改變。Flash 編程和程序校驗(yàn)期間,

40、P2亦接收低高位地址和其他控制信號(hào)。</p><p>  P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,見表3.1所示P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校

41、驗(yàn)的控制信號(hào)。</p><p>  表3.1 P3口的第二功能圖</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFR AUXR的DISRT0(地址8EH)可打開或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。</p><p>  ALE/PROG:當(dāng)訪

42、問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。</p><p>  PSEN:程序存儲(chǔ)允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)

43、AT89S52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,沒有兩次有效的PSEN信號(hào)。</p><p>  EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平,CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Fla

44、sh存儲(chǔ)器編程時(shí),該引腳加上+12V的變成電壓Vpp。</p><p>  XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。</p><p>  3.2.2 AT89S52單片機(jī)與MCS-51完全兼容</p><p>  看門狗(WDT):WDT是一種需要軟件控制的復(fù)位方式。W

45、DT 由13位計(jì)數(shù)</p><p>  器和特殊功能寄存器中的看門狗定時(shí)器復(fù)位存儲(chǔ)器(WDTRST)構(gòu)成。WDT 在默認(rèn)情況下無(wú)法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個(gè)機(jī)器周期都會(huì)增加。WDT計(jì)時(shí)周期依賴于外部時(shí)鐘頻率。除了復(fù)位(硬件復(fù)位或WDT溢出復(fù)位),沒有辦法停止WDT工作。當(dāng)WDT溢出,它將驅(qū)動(dòng)RSR引腳

46、輸出一個(gè)高電平。</p><p>  可編程串口(UART)在AT89S52中,UART 的操作與AT89S52 和AT89C52 一樣。AT89S52系列單片機(jī)的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方 式時(shí),它具有全雙工的操作功能,也就是說,它可以同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個(gè)字節(jié)從接收寄存器讀走之前就開始接收第二個(gè)字節(jié)(當(dāng)然,如果第二個(gè)字節(jié)接

47、收完畢,而第一個(gè)字節(jié)仍然沒有被讀走,那將會(huì)丟掉一個(gè)字節(jié))。串行口的發(fā)送和接收操作都是通過特殊功能寄存器中的數(shù)據(jù)緩沖寄存器SBUF進(jìn)行的,但在SBUF的內(nèi)部,接收寄存器和發(fā)送寄存器在物理結(jié)構(gòu)上是完全獨(dú)立的。如果將數(shù)據(jù)寫入SBUF,數(shù)據(jù)會(huì)被送入發(fā)送寄存器準(zhǔn)備發(fā)送。如果執(zhí)行SBUF指令,則讀出的數(shù)據(jù)一定來(lái)自接收緩存器。因此,CPU對(duì)SBUF的讀寫,實(shí)際上是分別訪問2個(gè)不同的寄存器。這2個(gè)寄存器的功能決不能混淆。</p><

48、p>  振蕩電路:AT89S52系列單片機(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)緊湊,成本低廉,可靠

49、性高。在電路中,對(duì)電容C1和C2的值要求不是很嚴(yán)格,如果使用高質(zhì)的晶振,則不管頻率為多少,C1、C2通常都選擇30pF。</p><p>  定時(shí)/計(jì)數(shù)器:AT89S52單片機(jī)內(nèi)含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器。當(dāng)用于定時(shí)器方式時(shí),定時(shí)器的輸入來(lái)自內(nèi)部時(shí)鐘發(fā)生電路,每過一個(gè)機(jī)器周期,定時(shí)器加1,而一個(gè)機(jī)器周期包含有12個(gè)振蕩周期,所以,定時(shí)器的技術(shù)頻率為晶振頻率的1/12,而計(jì)數(shù)頻率最高為晶振頻率的1/24。為了實(shí)

50、現(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é)兩部分。</p><p>  RAM:高于7FH內(nèi)部數(shù)據(jù)存儲(chǔ)器的地址是8位的,也就是說其地址空間只有256字節(jié),但內(nèi)部RAM的尋址方式實(shí)際上可提供384字節(jié)。的直接地

51、址訪問同一個(gè)存儲(chǔ)空間,高于7FH的間接地址訪問另一個(gè)存儲(chǔ)空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實(shí)際上它們是分開的。究竟訪問哪一區(qū),存是通過不同的尋址方式加以區(qū)分的。</p><p>  SFR:SFR是具有特殊功能的所有寄存器的集合,共含有22個(gè)不同寄存器,</p><p>  它們的地址分配在80H~FFH中。雖然如此,不是所有的單元都被特殊功

52、能寄存器占用,未被占用的單元,其內(nèi)容是不確定的。如對(duì)這些單元進(jìn)行讀操作,得到的是一些隨機(jī)數(shù),而寫入則無(wú)效,所以在編程時(shí)不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序狀態(tài)字寄存器PSW、堆棧指針SP、數(shù)據(jù)指針DPTR、I/O端口、串行口數(shù)據(jù)緩沖器SBUF、定時(shí)器寄存器、捕捉寄存器、控制寄存器。</p><p>  中斷系統(tǒng):AT89S52單片機(jī)有6個(gè)中斷源,中斷系統(tǒng)主要由中

53、斷允許寄存器IE、中斷優(yōu)先級(jí)寄存器IP、優(yōu)先級(jí)結(jié)構(gòu)和一些邏輯門組成。IE寄存器用于允許或禁止中斷;IP寄存器用于確定中斷源的優(yōu)先級(jí)別;優(yōu)先級(jí)結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門用于輸入中斷請(qǐng)求信號(hào)。在整個(gè)中斷響應(yīng)過程中CPU所執(zhí)行的操作步驟如下:</p><p>  (1)完成當(dāng)前指令的操作</p><p> ?。?)將PC內(nèi)容壓入堆棧</p><p>  (3

54、)保存當(dāng)前的中斷狀態(tài)</p><p> ?。?)阻止同級(jí)的中斷請(qǐng)求</p><p> ?。?)將中斷程序入口地址送PC寄存器</p><p>  (6)執(zhí)行中斷服務(wù)程序</p><p><b> ?。?)返回</b></p><p>  3.3 時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析</p&

55、gt;<p>  3.3.1 DS1302性能簡(jiǎn)介</p><p>  DS1302是Dallas公司生產(chǎn)的一種實(shí)時(shí)時(shí)鐘芯片。它通過串行方式與單片機(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

56、。</p><p>  DS1302時(shí)鐘芯片內(nèi)主要包括移位寄存器、控制邏輯電路、振蕩器。DS1302與單片機(jī)系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統(tǒng)RST引腳驅(qū)動(dòng)至高電平,然后在SCLK時(shí)鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時(shí)鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實(shí)現(xiàn)

57、的,DS1302的引腳排列及內(nèi)部結(jié)構(gòu)圖如圖3.1</p><p>  DS1302引腳說明:</p><p>  X1,X2 32.768kHz晶振引腳</p><p>  GND 地線</p><p>  RST 復(fù)位端</p><p>  I/O

58、 數(shù)據(jù)輸入/輸出端口</p><p>  SCLK 串行時(shí)鐘端口 </p><p>  VCC1 慢速充電引腳 </p><p>  VCC2 電源引腳 </p><p>  圖3.1 DS1302的引腳</p>&

59、lt;p>  3.3.2 DS1302接口電路設(shè)計(jì)</p><p>  時(shí)鐘芯片DS1302的接口電路及工作原理:</p><p>  圖3.2 DS1302與MCU接口電路</p><p>  圖3為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統(tǒng)中提供低電源并提供低功率的電池備份。VCC2在雙電源系統(tǒng)中提

60、供主電源,在這種運(yùn)用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。</p><p>  DS1302由VCC1或VCC2 兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電。當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。</p><p>  DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把

61、RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖5所示。表-1為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é)總是從最低位開始輸入/輸出的。表-2為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該

62、位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行?!癢P”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。</p><p>  DS132的控制字:</p><p>  DS1302的控制字如表3.2所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,

63、位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為1表示進(jìn)行讀操作,為0表示進(jìn)行寫操作??刂谱止?jié)總是從最低位開始輸出。</p><p>  表3.2 DS1302的控制字格式</p><p>  數(shù)據(jù)輸入輸出(I/O)</p><p>  在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS

64、1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖3.3所示。</p><p>  圖3.3 DS1302讀/寫時(shí)序圖</p><p>  DS1302的寄存器AM</p><p>  DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為

65、BCD碼形式,其日歷、時(shí)間寄存器及其控制字見表3.3</p><p>  表3.3 DS1302的日歷、時(shí)間寄存器</p><p>  此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一

66、個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。</p><p>  3.4 溫度芯片DS18B20接口設(shè)計(jì)與性能分析</p><p>  3.4.1 DS18B20性能簡(jiǎn)介</p><p>  DS18B20溫度傳感器

67、是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。現(xiàn)場(chǎng)溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過程控制、測(cè)溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。其性能特點(diǎn)可

68、歸納如下:</p><p>  1獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;</p><p>  2測(cè)溫范圍在-55℃到125℃,分辨率最大可達(dá)0.0625℃;</p><p>  3采用了3線制與單片機(jī)相連,減少了外部硬件電路;</p><p><b>  4零待機(jī)功耗;</b></p><p>

69、;  5可通過數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V;</p><p>  6用戶可定義的非易失性溫度報(bào)警設(shè)置;</p><p>  7報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件; </p><p>  8負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱燒毀,只是不能正常工

70、作。</p><p>  DS18B20工作原理</p><p>  DS18B20的讀寫時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測(cè)溫原理如圖3.4所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為

71、計(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重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖3.4中的斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值

72、。</p><p>  圖3.4 DS18B20測(cè)溫原理</p><p>  3.4.2 DS18B20接口電路設(shè)計(jì)</p><p>  如圖3.5所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。 </p>&

73、lt;p>  圖3.5 溫度傳感器DS18B20接口電路</p><p>  3.4.3 DS18B20的工作時(shí)序</p><p><b>  復(fù)位時(shí)序圖</b></p><p>  圖3.6 復(fù)位時(shí)序圖</p><p><b>  讀時(shí)序圖</b></p><p>&

74、lt;b>  圖3.7讀時(shí)序圖</b></p><p><b>  寫時(shí)序圖</b></p><p>  圖3.8 寫時(shí)序圖</p><p><b>  工作時(shí)序</b></p><p><b>  總線時(shí)序</b></p><p>

75、  圖3.9 總線時(shí)序</p><p><b>  寫周期時(shí)序</b></p><p>  圖3.10 寫周期時(shí)序</p><p><b>  起始/停止時(shí)序</b></p><p>  圖3.11 起始/停止時(shí)序</p><p><b>  應(yīng)答時(shí)序</b

76、></p><p>  圖3.12 應(yīng)答時(shí)序</p><p><b>  立即地址讀時(shí)序</b></p><p>  圖3.13 立即地址讀時(shí)序</p><p>  3.5 LCD顯示模塊</p><p>  3.5.1 LCM1602的特性及使用說明</p><p

77、>  LCM1602的接口信號(hào)說明如表3.4:</p><p>  表3.4 LCM1602的接口信號(hào)</p><p><b>  基本操作時(shí)序如下:</b></p><p>  1)讀狀態(tài):RS=L,RW=H,E=H</p><p>  2)寫指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖</p

78、><p>  3)讀數(shù)據(jù):RS=H,RW=H,E=H</p><p>  4)寫數(shù)據(jù):RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖</p><p><b>  初始化設(shè)置</b></p><p>  顯示模式設(shè)置如表3.5:</p><p>  表3.5 顯示模式設(shè)置</p>&l

79、t;p>  顯示開/關(guān)及光標(biāo)設(shè)置如表6:</p><p>  表3.6 顯示開/關(guān)及光標(biāo)設(shè)置</p><p>  3.5.2 LCM1602與MCU的接口電路</p><p>  LCD的D0~D7分別接單片機(jī)的的P2口,作為數(shù)據(jù)線,因?yàn)镻0口內(nèi)部沒有上拉電阻,所以外部另外加上10K的上拉電阻;P1.0—P1.2分別接LCD的RS、RW、E三個(gè)控制管腳;RV

80、1用來(lái)調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽(yáng)極,接上相應(yīng)電平即點(diǎn)亮背光燈。</p><p>  3.6 按鍵模塊設(shè)計(jì)</p><p>  本系統(tǒng)用到了5個(gè)按鍵,其中一個(gè)用作系統(tǒng)手動(dòng)復(fù)位,另外4個(gè)采用獨(dú)立按鍵,該種接法查詢簡(jiǎn)單,程序處理簡(jiǎn)單,可節(jié)省CPU資源,按鍵電路如圖3.14所示,4個(gè)獨(dú)立按鍵分別與AT89S52的P3.4、P3.5、P3.6、P3.7接口相連。</p

81、><p>  圖3.14 按鍵電路</p><p>  對(duì)以上4個(gè)按鍵作簡(jiǎn)要說明:S4——SET 鍵,S3——UP鍵,S2——DOWN鍵,S5——OUT/STOP鍵。</p><p>  SET 鍵:按下SET鍵進(jìn)入時(shí)間校準(zhǔn)狀態(tài),按一下進(jìn)入秒調(diào)整,兩下分調(diào)整,依此類推可進(jìn)行各年月日,時(shí)分秒以及星期的校準(zhǔn);</p><p>  UP鍵:當(dāng)SET鍵

82、按下時(shí),UP進(jìn)行SET選定項(xiàng)(如:小時(shí))的加操作;</p><p>  DOWN鍵:當(dāng)SET鍵按下時(shí),DOWN進(jìn)行SET選定項(xiàng)(如:小時(shí))的減操作;</p><p>  OUT鍵:當(dāng)OUT鍵按下時(shí),此鍵功能為退出校準(zhǔn)功能,進(jìn)入下一模式,顯示溫度值和上下限的溫度值。</p><p>  3.7 復(fù)位電路的設(shè)計(jì)</p><p>  當(dāng)AT89S5

83、2單片機(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ù)位的可靠性等因素,必須有足夠的余量</p><p>  

84、根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位、手動(dòng)復(fù)位。</p><p>  上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。AT89S52單片機(jī)的上電復(fù)位POR(Power On Reset)實(shí)質(zhì)上就是上電延時(shí)復(fù)位,也就是在上電延時(shí)期間把單片機(jī)鎖定在復(fù)位狀態(tài)上。在單片機(jī)每次初始加電時(shí),首先投入工作的功能部件是復(fù)位電路。 </p><p>  復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一

85、個(gè)延時(shí)(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前, 還要至少推遲2個(gè)機(jī)器周期的延時(shí)。</p><p>  本設(shè)計(jì)采用上電且開關(guān)復(fù)位電路,如圖3.15所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且

86、開關(guān)復(fù)位的操作。通常選擇C=10~30μF,本設(shè)計(jì)采用的電容值為10μF的電容和電阻為4.7K的電阻。</p><p>  圖3.15 復(fù)位電路</p><p>  第4章 系統(tǒng)的軟件設(shè)計(jì)</p><p><b>  4.1 概述 </b></p><p>  電子萬(wàn)年歷的功能是在程序控制下實(shí)現(xiàn)的。該系統(tǒng)的軟件設(shè)計(jì)方法

87、與硬件設(shè)計(jì)相對(duì)應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來(lái)。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。</p><p>  本系統(tǒng)的軟件部分主要要進(jìn)行公歷計(jì)算程序設(shè)計(jì),溫度測(cè)量程序設(shè)計(jì),按鍵的掃描輸入等。程序開始運(yùn)行后首先要進(jìn)行初始化,把單片機(jī)的各引腳的狀態(tài)按程序里面的初始化命令進(jìn)行初始化,初始化完成后運(yùn)行溫度測(cè)量程序,讀取出溫度傳感器測(cè)量出來(lái)的溫度,然

88、后運(yùn)行公歷計(jì)算程序,得到公歷的時(shí)間、日期信息,再運(yùn)行按鍵掃描程序,檢測(cè)有無(wú)按鍵按下,如果沒有按鍵按下則直接調(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ù)碼管讓其顯示。</p><p>  4.2 主程序流程圖的設(shè)計(jì)<

89、/p><p>  主程序流程圖如圖4.1:</p><p>  圖4.1 主程序流程圖</p><p><b>  4.3 程序設(shè)計(jì)</b></p><p>  4.3.1 DS1302讀寫程序設(shè)計(jì)</p><p>  本系統(tǒng)的時(shí)間讀取主要來(lái)源于單片機(jī)對(duì)DS1302的操作,在硬件上時(shí)鐘芯片DS130

90、2與單片機(jī)的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見系統(tǒng)硬件設(shè)計(jì)原理圖。讀取寫程序設(shè)計(jì)如下:</p><p>  sbit clk = P1^3; //ds1302時(shí)鐘線定義</p><p>  sbit io = P1^4; //數(shù)據(jù)線</p><p>  sbit rst = P1^5; //復(fù)位線</p&g

91、t;<p>  //秒 分 時(shí) 日 月 年 星期 </p><p>  uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //寫地址</p><p>  uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};

92、//讀地址</p><p>  uchar code init_ds[] ={0x58,0x00,0x00,0x01,0x01,0x13,0x1}; </p><p>  uchar miao,fen,shi,ri,yue,week,nian;</p><p><b>  uchar i;</b></p><p>

93、  uchar fen1=0x11,shi1=0; //兩個(gè)鬧鐘變量的定義</p><p>  bit open1;</p><p>  /*************寫一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/</p><p>  void write_ds1302(uchar add,uchar dat)</p><p>&

94、lt;b>  {</b></p><p>  rst = 1; //把復(fù)位線拿高</p><p>  for(i=0;i<8;i++)</p><p>  { //低位在前</p><p>  clk = 0; //時(shí)鐘線拿低開始寫數(shù)據(jù)</p><p&g

95、t;  io = add & 0x01; </p><p>  add >>= 1; //把地址右移一位</p><p>  clk = 1; //時(shí)鐘線拿高</p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p>

96、<p><b>  {</b></p><p>  clk = 0; //時(shí)鐘線拿低開始寫數(shù)據(jù)</p><p>  io = dat & 0x01;</p><p>  dat >>= 1; //把數(shù)據(jù)右移一位</p><p>  clk = 1; //時(shí)鐘線拿高</p

97、><p><b>  }</b></p><p>  rst = 0; //復(fù)位線合低</p><p><b>  clk = 0;</b></p><p><b>  io = 0;</b></p><p><b>  }</b>

98、;</p><p>  uchar read_ds1302(uchar add)</p><p><b>  {</b></p><p>  uchar value,i;</p><p>  rst = 1; //把復(fù)位線拿高</p><p>  for(i=0;i<8;i+

99、+)</p><p>  { //低位在前</p><p>  clk = 0; //時(shí)鐘線拿低開始寫數(shù)據(jù)</p><p>  io = add & 0x01; </p><p>  add >>= 1; //把地址右移一位</p><p>  clk

100、= 1; //時(shí)鐘線拿高</p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  clk = 0; //時(shí)鐘線拿低開始讀數(shù)據(jù)</p><p> 

101、 value >>= 1;</p><p>  if(io == 1)</p><p>  value |= 0x80;</p><p>  clk = 1; //時(shí)鐘線拿高</p><p><b>  }</b></p><p>  rst = 0; //復(fù)位線

102、合低</p><p><b>  clk = 0;</b></p><p><b>  io = 0;</b></p><p>  return value; //返回讀出來(lái)的數(shù)據(jù)</p><p><b>  }</b></p><p>  vo

103、id read_time()</p><p><b>  {</b></p><p>  miao = read_ds1302(read_add[0]); //讀秒</p><p>  fen = read_ds1302(read_add[1]); //讀分</p><p>  shi = read_ds1302

104、(read_add[2]); //讀時(shí)</p><p>  ri = read_ds1302(read_add[3]); //讀日</p><p>  yue = read_ds1302(read_add[4]);//讀月</p><p>  nian = read_ds1302(read_add[5]); //讀年</p><

105、;p>  week = read_ds1302(read_add[6]);//讀星期</p><p>  Conversion(0,nian,yue,ri); //農(nóng)歷轉(zhuǎn)換 </p><p>  n_nian = year_moon ;</p><p>  n_yue = month_moon ;</p><

106、;p>  n_ri = day_moon ;</p><p><b>  }</b></p><p>  void write_time()</p><p><b>  {</b></p><p>  write_ds1302(0x8e,0x00);//打開寫保護(hù)</p>

107、<p>  write_ds1302(write_add[0],miao); //寫秒</p><p>  write_ds1302(write_add[1],fen);//寫分</p><p>  write_ds1302(write_add[2],shi);//寫時(shí)</p><p>  write_ds1302(write_add[3],

108、ri);//寫日</p><p>  write_ds1302(write_add[4],yue);//寫月</p><p>  write_ds1302(write_add[5],nian); //寫星期</p><p>  write_ds1302(write_add[6],week); //寫年</p><p>  writ

109、e_ds1302(0x8e,0x80);//關(guān)閉寫保護(hù)</p><p><b>  }</b></p><p>  void write_ds1302ram(uchar add,uchar dat)</p><p><b>  {</b></p><p>  add <<= 1;

110、 //地址是從第二位開始的</p><p>  add &= 0xfe; //把最低位清零 是寫的命令</p><p>  add |= 0xc0; //地址最高兩位為 1 </p><p>  write_ds1302(0x8e,0x0

111、0);</p><p>  write_ds1302(add,dat);</p><p>  write_ds1302(0x8e,0x80);</p><p><b>  }</b></p><p>  uchar read_ds1302ram(uchar add)</p><p><b&

112、gt;  {</b></p><p>  add <<= 1; //地址是從第二位開始的</p><p>  add |= 0x01; //把最高位置1 是讀命令</p><p>  add |= 0xc0; //地址最高兩位

113、為 1 </p><p>  return(read_ds1302(add));</p><p><b>  }</b></p><p>  void init_ds1302()</p><p><b>  {</b></p><p><b>  uchar i

114、;</b></p><p>  rst = 0;//第一次讀寫數(shù)據(jù)時(shí)要把IO品拿低</p><p><b>  clk = 0;</b></p><p><b>  io = 0;</b></p><p>  i = read_ds1302ram(30); </p>

115、<p>  if(i != 3)</p><p><b>  {</b></p><p><b>  i = 3;</b></p><p>  write_ds1302ram(30,i); //4050 4100 3080</p><p>  write_ds

116、1302(0x8e,0x00); //打開寫保護(hù)</p><p>  for(i=0;i<7;i++)</p><p>  write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允許ds1302工作</p><p>  write_ds1302(0x8e,0x80); //

117、關(guān)寫保護(hù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  DS1302與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯 1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6=0,指定時(shí)鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D

118、5~D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入),D0=1,指定讀操作(輸出) 。</p><p>  4.3.2 溫度程序設(shè)計(jì)</p><p>  單總線上最基本的操作有初始化、寫和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對(duì)總線上的器件進(jìn)行狀態(tài)復(fù)位,寫用于主節(jié)點(diǎn)向總線上寫入一位數(shù)據(jù),讀用于主節(jié)點(diǎn)從總線上讀取一位數(shù)據(jù)。在這3種操作中,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論