2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要 </b></p><p>  本文借助電路仿真軟件Protues對(duì)基于AT89S51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)方法及仿真進(jìn)行了全面的闡述。該電子萬(wàn)年歷在硬件方面主要采用AT89C51單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、1602LCM點(diǎn)陣液晶顯示屏顯示。AT89C51單片機(jī)是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電;DS13

2、02時(shí)鐘芯片是美國(guó)DALLAS公司推出的具有涓細(xì)電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差??;數(shù)字顯示是采用的LED液晶顯示屏來(lái)顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分、秒等信息。此外,該電子萬(wàn)年歷還具有時(shí)間校準(zhǔn)等功能。在軟件方面,主要包括日歷程序、時(shí)間調(diào)整程序,顯示程序等。所有程序編寫完成后,在Keil軟件中進(jìn)行調(diào)試,確定沒(méi)有問(wèn)題后,在

3、Proteus軟件中嵌入單片機(jī)內(nèi)進(jìn)行仿真。</p><p>  論文主要研究了液晶顯示器LCM及時(shí)鐘芯片DS1302,溫度傳感器DS18B20與單片機(jī)之間的硬件互聯(lián)及通信,對(duì)數(shù)種硬件連接方案進(jìn)行了詳盡的比較,在軟件方面對(duì)日歷算法也進(jìn)行了論述。</p><p>  研究結(jié)果表明,由于萬(wàn)年歷的應(yīng)用相當(dāng)普遍,所以其設(shè)計(jì)的核心在于硬件成本的節(jié)約軟件算法的優(yōu)化,力求做到物美價(jià)廉,才能擁有更廣闊的市場(chǎng)

4、前景。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī);DS1302;DS18B20;LCM1602</p><p><b>  目 錄</b></p><p>  第1章 方案設(shè)計(jì)………………………………………………………………………………………...1</p><p>  1.1 單片機(jī)芯片的選擇1</p>&l

5、t;p>  1.2 顯示模塊選擇方案和論證1</p><p>  1.3 時(shí)鐘芯片的選擇方案和論證1</p><p>  1.4 溫度傳感器的選擇方案與論證2</p><p>  1.5 電路設(shè)計(jì)最終方案決定2</p><p>  第2章 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)3</p><p>  2.1 電路設(shè)計(jì)框圖

6、3</p><p>  2.2 系統(tǒng)硬件概述3</p><p>  2.3 主要單元電路的設(shè)計(jì)4</p><p>  2.3.1 AT89S51單片機(jī)主控制模塊的設(shè)計(jì)4</p><p>  2.3.2 單片機(jī)中斷系統(tǒng)6</p><p>  2.3.3時(shí)鐘電路模塊的設(shè)計(jì)8</p><p&g

7、t;  2.3.4溫度采集模塊設(shè)計(jì)9</p><p>  2.3.5 顯示模塊的設(shè)計(jì)10</p><p>  2.3.6 DS1302原理及說(shuō)明11</p><p>  2.3.7 LCM1602工作原理及說(shuō)明13</p><p>  2.3.8 系統(tǒng)仿真電路14</p><p>  第3章 系統(tǒng)的軟件設(shè)計(jì)

8、16</p><p>  3.1 程序流程框圖16</p><p><b>  3.2子程序18</b></p><p>  第4章 系統(tǒng)測(cè)試19</p><p>  4.1 硬件測(cè)試19</p><p>  4.2 軟件測(cè)試19</p><p>  總結(jié)…………

9、…………………………………………………………………….19</p><p><b>  致謝21</b></p><p><b>  參考文獻(xiàn)22</b></p><p><b>  附錄:程序23</b></p><p><b>  第1章 方案設(shè)計(jì)</

10、b></p><p>  1.1 單片機(jī)芯片的選擇</p><p>  本設(shè)計(jì)采用AT89S51芯片作為硬件核心,該芯片采用Flash ROM,內(nèi)部具有4KB ROM存儲(chǔ)空間,相對(duì)于本設(shè)計(jì)而言程序空間完全夠用。能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,而且運(yùn)用于電路設(shè)計(jì)中時(shí)具備ISP在線編程技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦?/p>

11、時(shí),避免芯片的多次拔插對(duì)芯片造成的損壞。</p><p>  1.2 顯示模塊選擇方案和論證</p><p><b>  方案一:</b></p><p>  采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以也不用此種作為顯示。</p><

12、;p><b>  方案二:</b></p><p>  采用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格雖適中,對(duì)于顯示數(shù)字也最合適,而且采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),占用的單片機(jī)口線少。但是由于數(shù)碼管動(dòng)態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時(shí)往往會(huì)有很多障礙,所以不采用LED數(shù)碼管作為顯示。</p><p><b>  方案三:&

13、lt;/b></p><p>  采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見[3],對(duì)于電子萬(wàn)年歷而言,一個(gè)1602的液晶屏即可,價(jià)格也還能接受,需要的接口線較多,但會(huì)給調(diào)試帶來(lái)諸多方便,所以此設(shè)計(jì)中采用LCD1602液晶顯示屏作為顯示模塊。</p><p>  1.3 時(shí)鐘芯片的選擇方案和論證</p><p>

14、<b>  方案一:</b></p><p>  直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然可以減少時(shí)鐘芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大。所以不采用此方案。</p><p><b>  方案二:</b></p><p>  采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)

15、鐘,DS130是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,

16、同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。因此,本設(shè)計(jì)中采用DS1302提供時(shí)鐘。</p><p> ?。?4 溫度傳感器的選擇方案與論證</p><p><b>  方案一:</b></p><p>  使用熱敏電阻作為傳

17、感器,用熱敏電阻與一個(gè)相應(yīng)阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個(gè)電阻變化的分壓值,并進(jìn)行A/D轉(zhuǎn)換。此設(shè)計(jì)方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會(huì)產(chǎn)生較大的測(cè)量誤差。</p><p><b>  方案二:</b></p><p>  采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而

18、且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機(jī)連接,可以避免A/D模數(shù)轉(zhuǎn)換模塊,降低硬件成本,簡(jiǎn)化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測(cè)量精度高、測(cè)量范圍廣等優(yōu)點(diǎn)。因此,本設(shè)計(jì)DS18B20溫度傳感器作為溫度采集模塊。</p><p>  1.5 電路設(shè)計(jì)最終方案決定</p><p>  綜上各模塊的選擇方案與論證,確定最后的主要硬件資源如下:采用AT89S51作為主控制系統(tǒng);</p

19、><p>  第2章 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p>  2.1 電路設(shè)計(jì)框圖</p><p>  本系統(tǒng)的電路系統(tǒng)框圖如圖2.1所示。AT89S51單片機(jī)對(duì)DS1302和DS18B20寫入控制字并讀取相應(yīng)的數(shù)據(jù),繼而控制LCM1602作出對(duì)應(yīng)的顯示。</p><p>  圖2.1 系統(tǒng)硬件框圖</p><p>  

20、2.2 系統(tǒng)硬件概述</p><p>  本電路是由AT89S51單片機(jī)作為控制核心,能在3V超低壓工作,AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4kBytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央

21、處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案;時(shí)鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31*8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄

22、存器??僧a(chǎn)生年、月、日、周、時(shí)、分、秒,具有使用壽命長(zhǎng),精度高和低功耗等特點(diǎn),同時(shí)具有掉電自動(dòng)保存功能;溫度的采集由DS18B20完成,它具有獨(dú)特的單線接口方式,DS18B20在與微處理</p><p>  2.3 主要單元電路的設(shè)計(jì)</p><p>  2.3.1 AT89S51單片機(jī)主控制模塊的設(shè)計(jì)</p><p>  AT89S51是一個(gè)低功耗,高性能CMOS

23、 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。AT89S51具有如下特點(diǎn):40個(gè)引腳,4kBy

24、tes Flash片內(nèi)程序存儲(chǔ)器,128Bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。此外,AT89S51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片

25、其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC</p><p>  P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p>&l

26、t;p>  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),

27、其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 </p><p>  P3口:P3口管

28、腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  I/O口作為輸入口時(shí)有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時(shí)實(shí)際上并不從外部讀入數(shù)據(jù),而是把端口鎖存器的內(nèi)容讀入到內(nèi)部總線,經(jīng)過(guò)某種運(yùn)算或變換后再寫回到端口鎖存器。只有讀端口時(shí)才真正地

29、把外部的數(shù)據(jù)讀入到內(nèi)部總線。輸入緩沖器CPU將根據(jù)不同的指令分別發(fā)出讀端口或讀引腳信號(hào)以完成不同的操作。這是由硬件自動(dòng)完成的,不需要我們操心,1然后再實(shí)行讀引腳操作,否則就可能讀入出錯(cuò),如果不對(duì)端口置1,端口鎖存器原來(lái)的狀態(tài)有可能為0Q端為0Q^為1加到場(chǎng)效應(yīng)管柵極的信號(hào)為1,該場(chǎng)效應(yīng)管就導(dǎo)通對(duì)地呈現(xiàn)低阻抗,此時(shí)即使引腳上輸入的信號(hào)為1,也會(huì)因端口的低阻抗而使信號(hào)變低使得外加的1信號(hào)讀入后不一定是1。若先執(zhí)行置1操作,則可以使場(chǎng)效應(yīng)管截

30、止引腳信號(hào)直接加到三態(tài)緩沖器中實(shí)現(xiàn)正確的讀入,由于在輸入操作時(shí)還必須附加一個(gè)準(zhǔn)備動(dòng)作,所以這類I/O口被稱為準(zhǔn)雙向口。89C51的P0/P1/P2/P3口作為輸入時(shí)都是準(zhǔn)雙向口。</p><p>  單片機(jī)的最小系統(tǒng)如圖2.2所示:18引腳和19引腳接時(shí)鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳

31、為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端.單片機(jī)的最小系統(tǒng)如下圖所示:圖2.2中的晶振頻率為12MHz,復(fù)位方式為上電自動(dòng)復(fù)位。</p><p>  圖2.2 單片機(jī)最小系統(tǒng)</p><p>  2.3.2 單片機(jī)中斷系統(tǒng)</p><p>  在提及單片機(jī)的最小系統(tǒng)后,現(xiàn)對(duì)單片機(jī)的另一重要應(yīng)用系統(tǒng)即中斷系統(tǒng)做一個(gè)比較詳細(xì)

32、的介紹。</p><p>  在CPU 與外設(shè)交換信息時(shí),存在著一個(gè)快速CPU與慢速的外設(shè)之間的矛盾。為解決這個(gè)問(wèn)題,發(fā)展了中斷的概念。單片機(jī)在某一時(shí)刻只能處理一個(gè)任務(wù),當(dāng)多個(gè)任務(wù)同時(shí)要求單片機(jī)處理時(shí),這一要求應(yīng)該怎么實(shí)現(xiàn)呢?通過(guò)中斷可以實(shí)現(xiàn)多個(gè)任務(wù)的資源共享。所謂的中斷就是,當(dāng)CPU正在處理某項(xiàng)事務(wù)的時(shí)候,如果外界或者內(nèi)部發(fā)生了緊急事件,要求CPU暫停正在處理工作而去處理這個(gè)緊急事件,待處理完后,再回到原來(lái)中斷

33、的地方,繼續(xù)執(zhí)行原來(lái)被中斷的程序,這個(gè)過(guò)程稱作中斷。 </p><p>  從中斷的定義我們可以看到中斷應(yīng)具備中斷源、中斷響應(yīng)、中斷返回這樣三個(gè)要素。中斷源發(fā)出中斷請(qǐng)求,單片機(jī)對(duì)中斷請(qǐng)求進(jìn)行響應(yīng),當(dāng)中斷響應(yīng)完成后應(yīng)進(jìn)行中斷返回,返回被中斷的地方繼續(xù)執(zhí)行原來(lái)被中斷的程序。MCS-51單片機(jī)的中斷源共有兩類,它們分別是:外部中斷和內(nèi)部中斷。外部中斷0(INT0)來(lái)自P3.2引腳,通過(guò)外部中斷0觸發(fā)方式控制位IT0(T

34、CON.0),來(lái)決定中斷輸入信號(hào)是低電平有效還是負(fù)跳變有效。一旦輸入信號(hào)有效,便使IE0標(biāo)志置一,向CPU申請(qǐng)中斷;外部中斷1(INT1)來(lái)自P3.3引腳,通過(guò)外部中斷1觸發(fā)方式控制位IT1(TCON.2),來(lái)決定中斷輸入信號(hào)是低電平有效還是負(fù)跳變有效。一旦輸入信號(hào)有效,便使IE0標(biāo)志置一,向CPU申請(qǐng)中斷。內(nèi)部中斷有三個(gè):TF0,TF1,RI或TI。TF0(TCON.5),片內(nèi)定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T0發(fā)生溢

35、出時(shí),置位TF0,并向CPU申請(qǐng)中斷;TF1(TCON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,并向CPU申請(qǐng)中斷;RI(SCON.0)或TI(SCON.1),串行口中斷請(qǐng)求</p><p>  MCS-51單片機(jī)為用戶提供了四個(gè)專用寄存器,來(lái)控制單片機(jī)的中斷系統(tǒng)。定時(shí)器控制寄存器(TCON),該寄存器用于保存外部中斷請(qǐng)求以及定時(shí)器的計(jì)數(shù)溢出。進(jìn)行字節(jié)操作時(shí),寄存器地

36、址為88H。按位操作時(shí),各位的地址為88H~8FH,當(dāng)CPU采樣到INT0(或INT1)端出現(xiàn)有效中斷請(qǐng)求時(shí),IE0(IE1)位由硬件置“1”。當(dāng)中斷響應(yīng)完成轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件把IE0(或IE1)清零, 當(dāng)計(jì)數(shù)器產(chǎn)生計(jì)數(shù)溢出時(shí),相應(yīng)的溢出標(biāo)志位由硬件置“1”。當(dāng)轉(zhuǎn)向中斷服務(wù)時(shí),再由硬件自動(dòng)清“0”。計(jì)數(shù)溢出標(biāo)志位的使用有兩種情況:采用中斷方式時(shí),作中斷請(qǐng)求標(biāo)志位來(lái)使用;采用查詢方式時(shí),作查詢狀態(tài)位來(lái)使用;串行口控制寄存器(SCO

37、N),進(jìn)行字節(jié)操作時(shí),寄存器地址為98H。按位操作時(shí),各位的地址為98H~9FH,當(dāng)發(fā)送完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,用軟件清“0”,當(dāng)接收完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,用軟件清“0”。串行中斷請(qǐng)求由TI和RI的邏輯或得到。就是說(shuō),無(wú)論是發(fā)送標(biāo)志還是接收標(biāo)志,都會(huì)產(chǎn)生串行中斷請(qǐng)求;中斷允許控制寄存器(IE),進(jìn)行字節(jié)操作時(shí),寄存器地</p><p>  MCS-

38、51單片機(jī)復(fù)位后(IE)=00H,因此中斷系統(tǒng)處于禁止?fàn)顟B(tài)。單片機(jī)在中斷響應(yīng)后不會(huì)自動(dòng)關(guān)閉中斷。因此在轉(zhuǎn)中斷服務(wù)程序后,應(yīng)根據(jù)需要使用有關(guān)指令禁止中斷,即以軟件方式關(guān)閉中斷。中斷優(yōu)先級(jí)控制寄存器(IP)MCS-51單片機(jī)的中斷優(yōu)先級(jí)控制比較簡(jiǎn)單,因?yàn)橄到y(tǒng)只定義了高、低2個(gè)優(yōu)先級(jí)。高優(yōu)先級(jí)用“1”表示,低優(yōu)先級(jí)用“0”表示。各中斷源的優(yōu)先級(jí)由中斷優(yōu)先級(jí)寄存器(IP)進(jìn)行設(shè)定。IP寄存器地址0B8H,位地址為0BFH~0B8H。</p

39、><p>  2.3.3時(shí)鐘電路模塊的設(shè)計(jì)</p><p>  DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的R

40、AM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。</p><p>  DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于V

41、cc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。

42、上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),SCLK為時(shí)鐘輸入端。DS1302的控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取</p><p>  圖2.3 DS1302與單片機(jī)的連接</p><p&

43、gt;  2.3.4溫度采集模塊設(shè)計(jì)</p><p>  采用數(shù)字式溫度傳感器DS18B20,它是數(shù)字式溫度傳感器,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,使用P0.7與DS18B20的I/O口連接加一個(gè)上拉電阻,Vcc接電源,Vss接地。獨(dú)特的一線接口,只需要一條口線通信多點(diǎn)能力,簡(jiǎn)化了分布式溫度傳感應(yīng)用無(wú)需外部元件可用數(shù)據(jù)總線供電,電壓范圍為3.0V至5.5V無(wú)需備用電源 測(cè)

44、量溫度范圍為-55度至+125度。-10度至+85度范圍內(nèi)精度為±0.5度溫度傳感器可編程的分辨率為9~12位。DS18B20連線如圖2.4所示。</p><p>  圖2.4 DS18B20管腳連線</p><p>  2.3.5 顯示模塊的設(shè)計(jì)</p><p>  如下圖5所示,采用LCM1602液晶顯示器,單片機(jī)P1口作為數(shù)據(jù)輸出口,RS,R\W,E

45、分別通過(guò)10K的上拉電阻連接到單片機(jī)的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。R/W為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。E(或EN)端為使能(enable)端,下降沿使能

46、。DB0-DB7為雙向數(shù)據(jù)總線,同時(shí)最高位DB7也是忙信號(hào)檢測(cè)位。BLA、BLK分別為顯示器背光燈的正、負(fù)極。</p><p>  圖2.5 LCM1602與單片機(jī)的連接</p><p>  2.3.6 DS1302原理及說(shuō)明 </p><p>  (1) 時(shí)鐘芯片DS1302的工作原理</p><p>  DS1302在每次進(jìn)行讀、寫程序

47、前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖7所示。圖6為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表2為DS1302的

48、日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行。“WP”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。</p><p>  (2) DS1302的控制字</p><p>  DS1302的控制字如圖6所示??刂谱止?jié)的高有效位(位7)必須是

49、邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。</p><p>  圖2.6 DS1302的控制字

50、 </p><p>  (3) 數(shù)據(jù)輸入輸出</p><p>  在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖2.7所示:</p><p>  圖2.7 DS1302讀與寫的時(shí)序圖<

51、;/p><p>  DS1302的寄存器</p><p>  DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見圖2.8。</p><p>  圖2.8 DS1302的日歷、時(shí)間寄存器 </p><p>  此外,DS1302 還有年

52、份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p&

53、gt;<p>  2.3.7 LCM1602工作原理及說(shuō)明</p><p>  (1)寄存器選擇控制</p><p>  1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來(lái)的2條線是背光電源線。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符[15],圖形寄存器選擇控制表如表2.1所示:</p><p&g

54、t;  表2.1 1602寄存器選擇控制表 </p><p><b>  (2)指令集</b></p><p>  1602通過(guò)D0~D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。顯示模式設(shè)置(初始化)00111000[0x38]設(shè)置16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口;顯示開關(guān)及光標(biāo)設(shè)置:(初始化) 00001DCBD顯示(1有效)、C光標(biāo)顯示(1有效)、B

55、光標(biāo)閃爍(1有效)。000001NS N=1(讀或?qū)懸粋€(gè)字符后地址指針加1并且光標(biāo)加1),N=0(讀或?qū)懸粋€(gè)字符后地址指針減1并且光標(biāo)減1),S=1且N=1(當(dāng)寫一個(gè)字符后,整屏顯示左移),S=0當(dāng)寫一個(gè)字符后,整屏顯示不移動(dòng)。數(shù)據(jù)指針設(shè)置:數(shù)據(jù)首地址為80H,所以數(shù)據(jù)地址為80H+地址碼(0-27H,40-67H)。其他設(shè)置:01H(顯示清屏,數(shù)據(jù)指針=0,所有顯示=0);02H(顯示回車,數(shù)據(jù)指針=0)。</p>&l

56、t;p>  2.3.8 系統(tǒng)仿真電路</p><p>  本次仿真使用軟件Protues7.0,該軟件元件庫(kù)豐富,元件封裝要求相對(duì)簡(jiǎn)單且參數(shù)調(diào)整方便,除此之外,程序還可進(jìn)行動(dòng)態(tài)調(diào)試。系統(tǒng)仿真截圖如圖2.9所示。</p><p>  圖2.9 系統(tǒng)仿真電路圖</p><p>  如圖,左上角為顯示模塊LCM1602,U1是時(shí)鐘芯片DS1302,U2是主控模塊AT

57、89C51, 第三章 系統(tǒng)的軟件設(shè)計(jì)</p><p>  3.1 程序流程框圖</p><p>  圖3.1 主程序流程圖</p><p>  主程序流程圖如上圖3.1所示。由于LCM1602,DS18B20,DS1302的數(shù)據(jù)讀取及指令寫入函數(shù)均已在各自的頭文件中完成,在主程序中只須引用即可。</p><p>  由于在硬件電路方面上設(shè)計(jì)了

58、時(shí)間調(diào)整按鍵和開關(guān),因此應(yīng)有對(duì)應(yīng)的時(shí)間調(diào)整程序。時(shí)間調(diào)整程序的流程圖如圖3.2所示.</p><p>  圖3.2 時(shí)間調(diào)整程序流程圖</p><p><b>  3.2 子程序</b></p><p>  由于本系統(tǒng)程序涉及的可編程器件有LCM1602,DS18B20以及DS1302,各芯片的控制字及數(shù)據(jù)讀寫如果混雜,將會(huì)使程序可讀性大大降低

59、,因此采用子程序的方法進(jìn)行調(diào)用并將其封裝于各自的頭文件中。詳盡的程序設(shè)計(jì)見附錄。</p><p><b>  第4章 系統(tǒng)測(cè)試</b></p><p><b>  4.1 硬件測(cè)試</b></p><p>  在Protues仿真結(jié)束后,于焊接板上完成了硬件組裝。在調(diào)試硬件時(shí)遇到過(guò)很多問(wèn)題,但只要細(xì)心、認(rèn)真檢查這些問(wèn)題都是

60、可以避免的,主要問(wèn)題及解決辦法現(xiàn)列如下:</p><p>  接通電源后LCM1602沒(méi)有正確的顯示。在不通電狀態(tài)下用萬(wàn)用表檢測(cè)電路是否正常連接,在檢查回路時(shí)發(fā)現(xiàn)有的點(diǎn)之間看似連接,但由于虛焊導(dǎo)致其并無(wú)電氣連接,只能對(duì)焊腳進(jìn)行在加工直到解決問(wèn)題。</p><p>  電路工作一段時(shí)間之后有的芯片發(fā)熱嚴(yán)重。經(jīng)查發(fā)現(xiàn)原來(lái)是有尖銳的管腳刺破鄰近的漆包線造成短路,斷掉該線并再次連接可解決問(wèn)題。&l

61、t;/p><p><b>  4.2 軟件測(cè)試 </b></p><p>  由于本系統(tǒng)涉及到多個(gè)子程序,多個(gè)芯片的編程。首先必須對(duì)可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時(shí)鐘輸入端,需要晶振支持。對(duì)芯片的讀寫都需要在相應(yīng)的觸發(fā)沿到來(lái)時(shí)才能進(jìn)行。由于DS18B20是串行通信數(shù)據(jù),只用一個(gè)口線傳輸,在處理采集的模擬信號(hào)時(shí)需要一定的時(shí)間,會(huì)對(duì)延時(shí)有較高要求

62、。所以在調(diào)用溫度子程序時(shí),先關(guān)閉定時(shí)器1中斷允許,在溫度子程序反回時(shí)再打開定時(shí)器1中斷允許。</p><p><b>  總結(jié)</b></p><p>  在整個(gè)設(shè)計(jì)過(guò)程中,發(fā)揮團(tuán)隊(duì)精神,分工合作,充分發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒(méi)學(xué)到的知識(shí)。較好的完成了作品。達(dá)到了預(yù)期的目的,在最初的設(shè)計(jì)中,發(fā)揮“三個(gè)臭皮匠,頂個(gè)諸葛亮”的作用。相互學(xué)習(xí)、相互討論、研究

63、。完了最初的設(shè)想。在研究時(shí)雖然沒(méi)什么大問(wèn)題,但從中也知道了整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來(lái)不能急于求成。反而達(dá)到事半功倍的效果。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問(wèn)題,經(jīng)過(guò)靜下心來(lái)思考,和同組員的討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我們的耐心,做什么事都在有耐心。此

64、次比賽中學(xué)到了很多很多東西,這是最重要的??傊?,我們的能力得到了全方位的提高。</p><p><b>  致謝</b></p><p>  在xx的三年學(xué)習(xí)時(shí)間即將過(guò)去,三年時(shí)間并不算長(zhǎng),但對(duì)我而言,是磨礪青春、揮灑書生意氣的三年,也是承受師恩、增長(zhǎng)才干、提高學(xué)識(shí)的三年。我將以積極的面貌重新投入到火熱的工作和事業(yè)中。在此,謹(jǐn)對(duì)培育我的母校、教導(dǎo)我的老師、幫助我的同學(xué)

65、們致予最誠(chéng)摯的謝意和敬意。 </p><p>  這次課程設(shè)計(jì),我一直很努力地去做,過(guò)程中得到了老師的悉心指導(dǎo)和同學(xué)們大力</p><p>  熱心幫助,并對(duì)我的設(shè)計(jì)提出許多有益的建議,在此對(duì)他們表示衷心的感謝。同時(shí)也要感謝學(xué)校能給我這次機(jī)會(huì)去嘗試自己設(shè)計(jì)一些東西,使自己所學(xué)專業(yè)知識(shí)與實(shí)踐相結(jié)合。最后也要感謝有關(guān)我參考過(guò)的文獻(xiàn)的作者,是他們?yōu)槲姨峁┲R(shí)的源泉,使我最終能順利地完成這次課程設(shè)

66、計(jì)。</p><p>  在畢業(yè)之際,我衷心地同學(xué)和朋友們?cè)谝院蟮娜松缆飞显阶咴綄拸V,也深深相信在未來(lái)的日子里我們將一路攜手前行,會(huì)遇到很多的碰撞和交流,我們將始終記得我們?cè)诤颖被ぢ殬I(yè)技術(shù)學(xué)院同窗學(xué)習(xí),這將是我克服困難、不斷前進(jìn)的精神動(dòng)力。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]胡乾斌,李光斌,李玲,喻紅

67、.單片微型計(jì)算機(jī)原理與應(yīng)用.華中科技大學(xué)出版社,2006</p><p>  [2]劉勇.?dāng)?shù)字電路.電子工業(yè)出版社,2004.</p><p>  [3]陳正振.電子電路設(shè)計(jì)與制作.廣西交通職業(yè)技術(shù)學(xué)院信息工程系,2007.</p><p>  [4]楊子文.單片機(jī)原理及應(yīng)用.西安電子科技大學(xué)出版社,2006.</p><p>  [5]王萍

68、.電子技術(shù)實(shí)驗(yàn)教程.機(jī)械工業(yè)出版社,2009.</p><p>  [6]沈紅衛(wèi).單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)例與分析,北京:北京航空航天大學(xué)出版社.2003</p><p>  [7]李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo),北京:北京航空航天大學(xué)出版社. 2004</p><p>  [8]王法能.單片機(jī)原理及應(yīng)用,科學(xué)出版社. 2004</p><p>

69、  [9]樓然苗,李光飛.51系列單片機(jī)設(shè)計(jì)實(shí)例[M].北京航空航天大學(xué)出版社,2003.</p><p>  [10]朱定華,戴汝平.單片微機(jī)原理與應(yīng)用[M].清華大學(xué)出版社,2003.</p><p>  [11]胡漢才.單片機(jī)原理與接口技術(shù)[M].清華大學(xué)出版社,2004.</p><p>  [12]余家春.Protel 99 SE電路設(shè)計(jì)實(shí)用教程[M].中

70、國(guó)鐵道出版社,2004.</p><p>  [13]張培仁.基于匯編語(yǔ)言編程MCS-51單片機(jī)原理與應(yīng)用.北京:清華大學(xué)出版社,2003.</p><p>  [14]T.Someya,J.Small,P.Kim,C.Nuckolls,J.T.Yardley.Alcohol vapor sensors</p><p>  based on single-walle

71、d carbon nanotube field effect transistors[M].Nano Letters,2003.</p><p>  [15]M.Penza et al.Alcohol detection using carbon nanotubes acoustic and optical </p><p>  sensors[M].Applied Physics Let

72、ters,2004.</p><p>  [16]F.Rettig,R.Moos.Direct thermoelectric gas sensors Design aspects and first gas </p><p>  sensors[M].Sens Actuators B,2007.</p><p><b>  附錄:程序</b>&

73、lt;/p><p><b>  主程序:</b></p><p>  #include<reg52.h></p><p>  #include"lcd1602.h"</p><p>  #include"ds1302.h"</p><p>  #in

74、clude"ds18b20.h"</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uint b[6];</p><p>  //年、月、日、時(shí)、分、秒</p><p>  ucha

75、r code row1[]={"2009-01-01"};</p><p>  uchar code row2[]={"00:00:00"};</p><p>  uchar year1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年</p><p>  uchar year2[1

76、2]={31,29,31,30,31,30,31,31,30,31,30,31};//潤(rùn)年</p><p>  uchar j[6]={0x85,0x88,0x8b,0x84+0x40,0x87+0x40,0x8a+0x40};//LCD地址</p><p>  uchar i,k,jj=0,w,clock=0,bigclock=0,c=0,num;</p><p>

77、;  //i循環(huán)數(shù),k溫度緩存,jj地址位</p><p>  uint temp;</p><p>  sbit b1=P3^0;//設(shè)置</p><p>  sbit b2=P3^1;//上調(diào)</p><p>  sbit b3=P3^2;//下調(diào)</p><p>  sbit b4=P3^3;//轉(zhuǎn)換</p

78、><p>  sbit b5=P3^4;//鬧鐘</p><p>  sbit speaker=P3^5;</p><p><b>  lcdscan()</b></p><p>  {for(i=0;i<6;i++)</p><p>  { lcdwrite(j[i]);</p>

79、;<p>  lcdshuju(a[11-i*2]+0x30);</p><p>  lcdwrite(j[i]+0x01);</p><p>  lcdshuju(a[10-i*2]+0x30);</p><p><b>  }</b></p><p><b>  }</b><

80、/p><p>  void key()</p><p>  {if(b1==0)</p><p>  { dsaddshuju(0x80,(a[1]<<4)+a[0]+0x80);</p><p>  while(b1==0)</p><p><b>  {</b></p>

81、;<p>  for(i=0;i<6;i++)</p><p>  {b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];}</p><p><b>  if(b4==0)</b></p><p>  { delay(3);</p><p><b>  jj++

82、;</b></p><p><b>  if(jj==6)</b></p><p><b>  {jj=0;}</b></p><p><b>  }</b></p><p><b>  if(b2==0)</b></p><

83、;p>  {delay(3);</p><p><b>  b[jj]++;</b></p><p>  if(b[5]==60)b[5]=0;</p><p>  if(b[4]==60)b[4]=0;</p><p>  if(b[3]==24)b[3]=0;</p><p>  if

84、((b[0]%4==0&&b[0]%100!=0)||b[0]%400==0){if(b[2]>year2[b[1]-1])b[2]=1;}</p><p>  else {if(b[2]>year1[b[1]-1])b[2]=1;}</p><p>  if(b[1]==13)b[1]=1;</p><p>  if(b[0]==100

85、)b[0]=0;</p><p><b>  }</b></p><p><b>  if(b3==0)</b></p><p>  {delay(3);</p><p><b>  b[jj]--;</b></p><p>  if(b[5]==

86、-1)b[5]=59;</p><p>  if(b[4]==-1)b[4]=59;</p><p>  if(b[3]==-1)b[3]=23;</p><p>  if((b[0]%4==0&&b[0]%100!=0) || b[0]%400==0){if(b[2]<=0)b[2]=year2[b[1]-1];}</p>&l

87、t;p>  else {if(b[2]<=0)b[2]=year1[b[1]-1];}</p><p>  if(b[1]==0)b[1]=12;</p><p>  if(b[0]==-1)b[0]=99;</p><p><b>  }</b></p><p>  for(i=0;i<6;i++)&

88、lt;/p><p>  { a[11-i*2+clock]=b[i]/10;</p><p>  a[10-i*2+clock]=b[i]%10;</p><p><b>  }</b></p><p>  lcdwrite(j[jj]);</p><p>  lcdshuju(0);</p

89、><p>  lcdwrite(j[jj]+1);</p><p>  lcdshuju(0);</p><p>  delay(200);</p><p>  lcdwrite(j[jj]);</p><p>  lcdshuju(a[11-2*jj+clock]+0x30);</p><p> 

90、 lcdwrite(j[jj]+1);</p><p>  lcdshuju(a[10-2*jj+clock]+0x30);</p><p>  delay(200);</p><p><b>  if(b1==1)</b></p><p>  { dsaddshuju(0x80,(a[1]<<4)

91、+a[0]);</p><p><b>  dson();}</b></p><p>  if(b5==0)clock=12;}}}</p><p>  void main()</p><p>  {speaker=0;</p><p><b>  lcdrw=0;</b>

92、;</p><p><b>  dson();</b></p><p><b>  lcdon();</b></p><p>  lcdwrite(0x83);</p><p>  for(i=0;i<10;i++)</p><p>  {lcdshuju(row1[

93、i]);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  lcdwrite(0x84+0x40);</p><p>  for(i=0;i<8;i++)</p><p><b>  {<

94、/b></p><p>  lcdshuju(row2[i]);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  dsrst=0;</b></p><p><b>

95、;  dssclk=0;</b></p><p><b>  while(1)</b></p><p>  {for(i=0;i<5;i++)</p><p>  {dsrst=1;</p><p>  dswrite(0x81+i*2);</p><p>  k=dsread

96、();</p><p><b>  dsrst=0;</b></p><p>  a[i*2]=k&0x0f;</p><p>  a[i*2+1]=(k>>4)&0x0f;</p><p><b>  }</b></p><p><b

97、>  dsrst=1;</b></p><p>  dswrite(0x8d);</p><p>  k=dsread();</p><p><b>  dsrst=0;</b></p><p>  a[10]=k&0x0f;</p><p>  a[11]=(k>

98、>4)&0x0f;</p><p>  delay(100);</p><p>  lcdscan();</p><p><b>  key();</b></p><p><b>  if(b5==0)</b></p><p>  {for(i=0;i&l

99、t;12;i++)</p><p>  {if(a[i+12]==a[i])num++;}</p><p>  if(num==12)bigclock=1;</p><p>  else num=0;</p><p>  lcdwrite(0x8e);</p><p>  lcdshuju('&

100、9;);}</p><p><b>  else </b></p><p>  {lcdwrite(0x8e);</p><p>  lcdshuju(0x00);}</p><p>  if(bigclock==1)</p><p>  { speaker=1;</p><

101、;p><b>  c++;</b></p><p>  if(c==100){bigclock=0;speaker=0;}</p><p><b>  }</b></p><p>  temp=readtemperature();//temp是uint型的。不然會(huì)出現(xiàn)溫度到25后回00的現(xiàn)象??赡苁怯捎谑M(jìn)制與十進(jìn)

102、制的差異。</p><p>  lcdwrite(0x8d+0x40);</p><p>  lcdshuju(temp/100+0x30);</p><p>  lcdwrite(0x8e+0x40);</p><p>  lcdshuju(temp/10%10+0x30);}}</p><p><b>

103、  子程序:</b></p><p>  LCM1602頭文件:</p><p>  #include<reg52.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbi

104、t lcdrs=P0^0;</p><p>  sbit lcdrw=P0^1;</p><p>  sbit lcden=P0^2;</p><p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;<

105、/b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p>  }//1毫秒左右延時(shí)</p><p>  //lcdwrite() LCD寫指令</p><p>  void lcdwrite(uchar write)&l

106、t;/p><p><b>  {</b></p><p><b>  lcdrs=0;</b></p><p><b>  P1=write;</b></p><p><b>  delay(1);</b></p><p><b&

107、gt;  lcden=1;</b></p><p><b>  delay(1);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  //lcdshuju() LCD寫數(shù)據(jù)</p>

108、<p>  void lcdshuju(uchar shuju)</p><p><b>  {</b></p><p><b>  lcdrs=1;</b></p><p><b>  P1=shuju;</b></p><p><b>  delay

109、(1);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(1);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p>

110、<p>  //lcdon() LCD顯示初始化</p><p>  void lcdon()</p><p><b>  {</b></p><p><b>  lcden=0;</b></p><p>  lcdwrite(0x38);//顯示模式</p><p&

111、gt;  lcdwrite(0x0c);//開顯示,光標(biāo)不閃爍</p><p>  lcdwrite(0x06);//光標(biāo)設(shè)置</p><p>  lcdwrite(0x01);</p><p><b>  }</b></p><p>  DS18B20頭文件:</p><p>  #includ

112、e<reg52.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit dq=P0^3;</p><p>  void sdelay(unsigned int i)</p><p>

113、;<b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p><p>  ds18b20on(void)//ds18b20初始化</p><p><b>  {</b></p><p>  ucha

114、r x=0;</p><p><b>  dq=1; </b></p><p>  sdelay(8); </p><p><b>  dq=0; </b></p><p>  sdelay(80); </p><p><b>  dq=1; <

115、/b></p><p>  sdelay(14);</p><p>  sdelay(20);</p><p><b>  }</b></p><p><b>  //讀一個(gè)字節(jié)</b></p><p>  readds18b20(void)</p>&l

116、t;p><b>  {</b></p><p>  uchar i=0,dat=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p><b>  dq=0;</b></p><p>

117、;<b>  dat>>=1;</b></p><p><b>  dq=1;</b></p><p><b>  if(dq)</b></p><p>  dat|=0x80;</p><p>  sdelay(4);</p><p>&l

118、t;b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p><b>  //寫一個(gè)字節(jié)</b></p><p>  writeds18b20(uchar dat)</p><p><b&

119、gt;  {</b></p><p>  uchar i=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p><b>  dq=0;</b></p><p>  dq=dat&0x01;

120、</p><p>  sdelay(5);</p><p><b>  dq=1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b&g

121、t;</p><p><b>  //讀取溫度</b></p><p>  readtemperature(void)</p><p><b>  {</b></p><p>  uchar a=0,b=0;</p><p><b>  uint t=0;</

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論