版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 作品介紹</b></p><p> 基于STC90C516RD+、DS1302、DS18B20、12864液晶顯示萬年歷設(shè)計(jì)</p><p><b> 目 錄</b></p><p><b> 目 錄I</b></p><p> Abst
2、ractII</p><p><b> 1 概 述1</b></p><p> 1.1 系統(tǒng)基本方案選擇和論證1</p><p> 1.2 電路設(shè)計(jì)最終方案3</p><p> 2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)4</p><p> 2.1 電路設(shè)計(jì)框圖4</p><
3、;p> 2.2 系統(tǒng)硬件概述4</p><p> 2.3 主要單元電路的設(shè)計(jì)5</p><p> 3 系統(tǒng)的軟件設(shè)計(jì)15</p><p> 3.1 程序流程框圖15</p><p> 3.2 子程序17</p><p><b> 4 系統(tǒng)測試18</b></p&
4、gt;<p> 4.1 硬件測試18</p><p> 4.2 軟件測試18</p><p><b> 5 結(jié)束語19</b></p><p><b> 參考文獻(xiàn)20</b></p><p><b> 附錄:程序21</b></p>
5、<p><b> 致 謝30</b></p><p><b> 摘 要</b></p><p> 本文借助電路仿真軟件Protues對基于STC90C516RD+單片機(jī)的電子萬年歷的設(shè)計(jì)方法及下載測試進(jìn)行了全面的闡述。該電子萬年歷在硬件方面主要采用STC90C516RD+單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)
6、鐘、12864點(diǎn)陣液晶顯示屏顯示。STC90C516RD+單片機(jī)是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電;DS1302時(shí)鐘芯片是美國DALLAS公司推出的具有涓細(xì)電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差??;數(shù)字顯示是采用的LED液晶顯示屏來顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分、秒等信息。此外,該電子萬年歷還具有時(shí)
7、間校準(zhǔn)等功能。在軟件方面,主要包括日歷程序、時(shí)間調(diào)整程序,顯示程序等。所有程序編寫完成后,在Keil軟件中進(jìn)行調(diào)試,確定沒有問題后,進(jìn)行下載調(diào)試。</p><p> 論文主要研究了液晶顯示器及時(shí)鐘芯片DS1302,溫度傳感器DS18B20與單片機(jī)之間的硬件相互之間通信,對數(shù)種硬件連接方案進(jìn)行了詳盡的比較,在軟件方面對日歷算法也進(jìn)行了論述。</p><p> 研究結(jié)果表明,由于萬年歷的應(yīng)
8、用相當(dāng)普遍,所以其設(shè)計(jì)的核心在于硬件成本的節(jié)約軟件算法的優(yōu)化,力求做到物美價(jià)廉,才能擁有更廣闊的市場前景。</p><p> 關(guān)鍵詞:單片機(jī)STC90C516RD+;DS1302;DS18B20;12864</p><p><b> Abstract</b></p><p> This paper mainly discuss the d
9、esign and simulation of electronic calender based on STC90C516RD+ with the help of Protues.On the hardware side, the electronic calendar using STC90C516RD+ microcontroller as the main control center, clock provided by th
10、e DS1302 clock chip , 12864 dot matrix LCD display.Atmel Corporation STC90C516RD+ microcontroller is producted by Atmel Corporation, low power consumption, voltage can be selected 4V~ 6V voltage power supply; DS1302 cloc
11、k chip, launched in the Unite</p><p> This article focus on liquid crystal screen 12864 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutio
12、ns will also compared with each other.On software side,calender calculation will be discussed as well.</p><p> The results are as follows:as electronic calender are widely used in our daily life.It should&l
13、t;/p><p> be chip and convenient so as to win more profit. </p><p> Keywords:Microcontroller,DS1302;DS18B20;12864</p><p><b> 1 概述</b></p><p> 隨著社會、科技的發(fā)展,
14、人類得知時(shí)間,從觀太陽、擺鐘到現(xiàn)在電子鐘,不斷研究、創(chuàng)新。為了在觀測時(shí)間的同時(shí),能夠了解其它與人類密切相關(guān)的信息,比如溫度、星期、日期等,電子萬年歷誕生了,它集時(shí)間、日期、星期和溫度功能于一身,具有讀取方便、顯示直觀、功能多樣、電路簡潔等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢。伴隨著電子技術(shù)的迅速發(fā)展,特別是隨大規(guī)模集成電路出現(xiàn),給人類生活帶來了根本性的改變。由其是單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來的
15、諸多方便,作為一種附加功能,現(xiàn)在越來越廣泛的被應(yīng)用于各種電子產(chǎn)品中,具有廣闊的市場前景。</p><p> 通過以往對工業(yè)自動化的相關(guān)課程學(xué)習(xí)和理解獨(dú)立完成制作電子萬年歷的設(shè)計(jì)。電子萬年歷作為電子類小產(chǎn)品不僅是市場上的寵兒,也是是單片機(jī)設(shè)計(jì)培訓(xùn)中一個(gè)很實(shí)用的題目。因?yàn)檫@個(gè)課題有很好的開放性和可發(fā)揮性,對制作者的要求比較高,不僅考察了對單片機(jī)的掌握能力更加強(qiáng)調(diào)了對單片機(jī)擴(kuò)展的應(yīng)用。而且要求設(shè)計(jì)的電子萬年歷在操作上
16、力求簡潔,功能上盡量齊全,顯示界面也要出色。所以,電子萬年歷制作無論從實(shí)用目的,還是從培養(yǎng)能力的角度來看都是很有價(jià)值的畢業(yè)設(shè)計(jì)課題。本電子萬年歷的設(shè)計(jì)在硬件方面主要采用STC90C516RD+單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、12864點(diǎn)陣液晶顯示屏顯示。STC90C516RD+單片機(jī)是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電[1];DS1302時(shí)鐘芯片是美國DALLAS公司推出的具有涓細(xì)電流充電功能
17、的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差?。粩?shù)字顯示是采用的LED液晶顯示屏來顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分、秒等信息。此外,該電子萬年歷還具有時(shí)間校準(zhǔn)等</p><p> 1.1 系統(tǒng)基本方案選擇和論證</p><p> 1.1.1 核心單片機(jī)芯片的選擇</p><
18、p> 本設(shè)計(jì)采用STC90C516RD+芯片作為硬件核心,該芯片采用Flash ROM,內(nèi)部具有61KB ROM存儲空間,相對于本設(shè)計(jì)而言程序空間完全夠用。STC90C516RD+系列單片機(jī)是宏晶科技推出的新一代超強(qiáng)/高速/低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),12時(shí)鐘/機(jī)器周期和6時(shí)鐘/機(jī)器周期可任意選擇,內(nèi)部集成MAX810專用復(fù)位電路,時(shí)鐘頻率在12MHz以下時(shí),復(fù)位腳可直接接地。共3個(gè)16位定時(shí)器/計(jì)數(shù)器,
19、其中定時(shí)器0還可以當(dāng)成2個(gè)8位定時(shí)器使用。外部中斷4路,下降沿中斷或低電平觸發(fā)中斷,Power Down模式可由外部中斷低電平觸發(fā)中斷方式喚醒。通用異步串行口(UART),還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART。工作溫度范圍:0-75℃/-40-+85℃。封裝:LQFP-44,PDIP-40,PLCC-44。工作電壓:5.5V - 3.8V(5V 典型單片機(jī)工作電壓)當(dāng)在對電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),避
20、免芯片的多次拔插對芯片造成的損壞。</p><p> 1.1.2 顯示模塊選擇方案和論證</p><p><b> 方案一:</b></p><p> 采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),成本較高,所以不采用此種作為顯示.</p><p>
21、;<b> 方案二:</b></p><p> 采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價(jià)格雖適中,對于顯示數(shù)字也最合適,而且采用動態(tài)掃描法與單片機(jī)連接時(shí),占用的單片機(jī)口線少。但是由于數(shù)碼管動態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在程序和電路調(diào)試時(shí)往往會有很多障礙,所以不采用LED數(shù)碼管作為顯示[2]。</p><p><b> 方案三:
22、</b></p><p> 采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量漢字,圖形,顯示多樣,清晰可見[3],對于電子萬年歷而言,一個(gè)12864的液晶屏即可,價(jià)格也還能接受,需要的接口線較少,便于調(diào)試,所以此設(shè)計(jì)中采用12864液晶顯示屏作為顯示模塊.</p><p> 1.1.3 時(shí)鐘芯片的選擇方案和論證</p><p><b&
23、gt; 方案一:</b></p><p> 直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然可以減少時(shí)鐘芯片的使用,節(jié)約成本,但是,程序量較大不易修改而且實(shí)現(xiàn)的時(shí)間誤差較大。所以不采用此方案。</p><p><b> 方案二:</b></p><p> 采用DS1302時(shí)鐘
24、芯片實(shí)現(xiàn)時(shí)鐘,DS130是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源Vcc2/后
25、背電源Vcc1雙電源引腳,同時(shí)提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振[4]。因此,本設(shè)計(jì)中采用DS1302提供時(shí)鐘信號。</p><p> ?。?1.4 溫度傳感器的選擇方案與論證</p><p><b> 方案一:</b></p>
26、<p> 使用熱敏電阻作為傳感器,用熱敏電阻與一個(gè)相應(yīng)阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個(gè)電阻變化的分壓值,并進(jìn)行A/D轉(zhuǎn)換。此設(shè)計(jì)方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會產(chǎn)生較大的測量誤差[5]。因此,不采用此方法。</p><p><b> 方案二:</b></p><p>
27、 采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機(jī)連接,可以避免A/D模數(shù)轉(zhuǎn)換模塊,降低硬件成本,簡化系統(tǒng)電路[6]。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點(diǎn)。因此,本設(shè)計(jì)DS18B20溫度傳感器作為溫度采集模塊。</p><p> 1.2 電路設(shè)計(jì)最終方案</p><p> 綜上各模塊的選擇方案與論證,確定最
28、后的主要硬件資源如下:采用STC90C516RD+作為主控制系統(tǒng);DS1302提供時(shí)鐘;DS18B20作為數(shù)字式溫度傳感器;12864液晶屏作為顯示。</p><p> 2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 2.1 電路設(shè)計(jì)框圖</p><p> 本系統(tǒng)的電路系統(tǒng)框圖如圖1所示。STC90C516RD+單片機(jī)對DS1302和DS18B20寫入控制字并讀取
29、相應(yīng)的數(shù)據(jù),繼而控制12864作出對應(yīng)的顯示。</p><p><b> 圖1 系統(tǒng)硬件框圖</b></p><p> 2.2 系統(tǒng)硬件概述</p><p> 本電路設(shè)計(jì)采用STC90C516RD+芯片作為硬件核心,該芯片采用Flash ROM,內(nèi)部具有61KB ROM存儲空間,相對于本設(shè)計(jì)而言程序空間完全夠用。STC90C516RD+系
30、列單片機(jī)是宏晶科技推出的新一代超強(qiáng)/高速/低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),12時(shí)鐘/機(jī)器周期和6時(shí)鐘/機(jī)器周期可任意選擇,內(nèi)部集成MAX810專用復(fù)位電路,時(shí)鐘頻率在12MHz以下時(shí),復(fù)位腳可直接接地。工作溫度范圍:0-75℃/-40-+85℃。封裝:LQFP-44,PDIP-40,PLCC-44。工作電壓:5.5V - 3.8V(5V 典型單片機(jī)工作電壓)時(shí)鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM
31、的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31*8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器??僧a(chǎn)生年、月、日、周、時(shí)、分、秒,具有使用壽命長,精度高和低功耗等特點(diǎn),同時(shí)具有掉電自動保存功能;溫度的采集由DS1</p><p> 外觀尺寸:93
32、×70×12.5mm</p><p> 視域尺寸:73×39mm</p><p><b> 主要單元電路的設(shè)計(jì)</b></p><p> 2.3.1STC90C516RD+單片機(jī)主控制模塊的設(shè)計(jì)</p><p> STC90C516RD+是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)
33、含61k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強(qiáng)大的微型計(jì)算機(jī)的STC90C516RD+可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。STC90C516RD+具有如下特點(diǎn):40個(gè)引腳,61
34、kBytes Flash片內(nèi)程序存儲器,128Bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。此外,STC90C516RD+設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM
35、的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。</p><p> P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p> P1口:P
36、1口是一個(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í),其管腳被內(nèi)部上拉電阻拉高,且
37、作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。 </p><p> P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向
38、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)過某種運(yùn)算或變換后再寫回到端口鎖存器。只有讀端口時(shí)才真正地把外部的數(shù)據(jù)讀入到內(nèi)部總線。
39、輸入緩沖器CPU將根據(jù)不同的指令分別發(fā)出讀端口或讀引腳信號以完成不同的操作。這是由硬件自動完成的,不需要我們操心,1然后再實(shí)行讀引腳操作,否則就可能讀入出錯(cuò),如果不對端口置1,端口鎖存器原來的狀態(tài)有可能為0Q端為0Q^為1加到場效應(yīng)管柵極的信號為1,該場效應(yīng)管就導(dǎo)通對地呈現(xiàn)低阻抗,此時(shí)即使引腳上輸入的信號為1,也會因端口的低阻抗而使信號變低使得外加的1信號讀入后不一定是1。若先執(zhí)行置1操作,則可以使場效應(yīng)管截止引腳信號直接加到三態(tài)緩沖器
40、中實(shí)現(xiàn)正確的讀入,由于在輸入操作時(shí)還必須附加一個(gè)準(zhǔn)備動作,所以這類I/O口被稱為準(zhǔn)雙向口。STC90C516RD+的P0/P1/P2/P3口作為輸入時(shí)都是準(zhǔn)雙向口。</p><p> 單片機(jī)的最小系統(tǒng)如圖2所示:18引腳和19引腳接時(shí)鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上
41、電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端.單片機(jī)的最小系統(tǒng)如下圖所示:圖2中的晶振頻率為12MHz,復(fù)位方式為上電自動復(fù)位[8]-[9]。</p><p> 圖2 單片機(jī)最小系統(tǒng)</p><p> 2.3.2 單片機(jī)中斷系統(tǒng)</p><p> 在提及單片機(jī)的最小系統(tǒng)后,現(xiàn)對單片機(jī)的另一重要應(yīng)用系統(tǒng)即中斷系統(tǒng)做一個(gè)比較詳細(xì)的介紹。&l
42、t;/p><p> 在CPU 與外設(shè)交換信息時(shí),存在著一個(gè)快速CPU與慢速的外設(shè)之間的矛盾。為解決這個(gè)問題,發(fā)展了中斷的概念。單片機(jī)在某一時(shí)刻只能處理一個(gè)任務(wù),當(dāng)多個(gè)任務(wù)同時(shí)要求單片機(jī)處理時(shí),這一要求應(yīng)該怎么實(shí)現(xiàn)呢?通過中斷可以實(shí)現(xiàn)多個(gè)任務(wù)的資源共享。所謂的中斷就是,當(dāng)CPU正在處理某項(xiàng)事務(wù)的時(shí)候,如果外界或者內(nèi)部發(fā)生了緊急事件,要求CPU暫停正在處理工作而去處理這個(gè)緊急事件,待處理完后,再回到原來中斷的地方,繼續(xù)
43、執(zhí)行原來被中斷的程序,這個(gè)過程稱作中斷。 </p><p> 從中斷的定義我們可以看到中斷應(yīng)具備中斷源、中斷響應(yīng)、中斷返回這樣三個(gè)要素。中斷源發(fā)出中斷請求,單片機(jī)對中斷請求進(jìn)行響應(yīng),當(dāng)中斷響應(yīng)完成后應(yīng)進(jìn)行中斷返回,返回被中斷的地方繼續(xù)執(zhí)行原來被中斷的程序。MCS-51單片機(jī)的中斷源共有兩類,它們分別是:外部中斷和內(nèi)部中斷。外部中斷0(INT0)來自P3.2引腳,通過外部中斷0觸發(fā)方式控制位IT0(TCON.0)
44、,來決定中斷輸入信號是低電平有效還是負(fù)跳變有效。一旦輸入信號有效,便使IE0標(biāo)志置一,向CPU申請中斷;外部中斷1(INT1)來自P3.3引腳,通過外部中斷1觸發(fā)方式控制位IT1(TCON.2),來決定中斷輸入信號是低電平有效還是負(fù)跳變有效。一旦輸入信號有效,便使IE0標(biāo)志置一,向CPU申請中斷。內(nèi)部中斷有三個(gè):TF0,TF1,RI或TI。TF0(TCON.5),片內(nèi)定時(shí)/計(jì)數(shù)器T0溢出中斷請求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位T
45、F0,并向CPU申請中斷;TF1(TCON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T1溢出中斷請求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,并向CPU申請中斷;RI(SCON.0)或TI(SCON.1),串行口中斷請求</p><p> MCS-51單片機(jī)為用戶提供了四個(gè)專用寄存器,來控制單片機(jī)的中斷系統(tǒng)。定時(shí)器控制寄存器(TCON),該寄存器用于保存外部中斷請求以及定時(shí)器的計(jì)數(shù)溢出。進(jìn)行字節(jié)操作時(shí),寄存器地址為88H。
46、按位操作時(shí),各位的地址為88H~8FH,當(dāng)CPU采樣到INT0(或INT1)端出現(xiàn)有效中斷請求時(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í),再由硬件自動清“0”。計(jì)數(shù)溢出標(biāo)志位的使用有兩種情況:采用中斷方式時(shí),作中斷請求標(biāo)志位來使用;采用查詢方式時(shí),作查詢狀態(tài)位來使用;串行口控制寄存器(SCON),進(jìn)行字
47、節(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”。串行中斷請求由TI和RI的邏輯或得到。就是說,無論是發(fā)送標(biāo)志還是接收標(biāo)志,都會產(chǎn)生串行中斷請求;中斷允許控制寄存器(IE),進(jìn)行字節(jié)操作時(shí),寄存器地</p><p> MCS-51單片機(jī)復(fù)
48、位后(IE)=00H,因此中斷系統(tǒng)處于禁止?fàn)顟B(tài)。單片機(jī)在中斷響應(yīng)后不會自動關(guān)閉中斷。因此在轉(zhuǎn)中斷服務(wù)程序后,應(yīng)根據(jù)需要使用有關(guān)指令禁止中斷,即以軟件方式關(guān)閉中斷。中斷優(yōu)先級控制寄存器(IP)MCS-51單片機(jī)的中斷優(yōu)先級控制比較簡單,因?yàn)橄到y(tǒng)只定義了高、低2個(gè)優(yōu)先級。高優(yōu)先級用“1”表示,低優(yōu)先級用“0”表示。各中斷源的優(yōu)先級由中斷優(yōu)先級寄存器(IP)進(jìn)行設(shè)定。IP寄存器地址0B8H,位地址為0BFH~0B8H。</p>
49、<p> 2.3.3時(shí)鐘電路模塊的設(shè)計(jì)</p><p> DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片,它可以對年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。
50、DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對后背電源進(jìn)行涓細(xì)電流充電的能力[11]。</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小于Vcc
51、1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電
52、運(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> 圖3 DS1302與單片機(jī)的連接</p><p>
53、 2.3.4 溫度采集模塊設(shè)計(jì)</p><p> 采用數(shù)字式溫度傳感器DS18B20,它是數(shù)字式溫度傳感器,具有測量精度高,電路連接簡單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,使用P1.7與DS18B20的I/O口連接加一個(gè)上拉電阻,VCC接電源,GND接地。獨(dú)特的一線接口,只需要一條口線通信多點(diǎn)能力,簡化了分布式溫度傳感應(yīng)用無需外部元件可用數(shù)據(jù)總線供電,電壓范圍為3.0V至5.5V無需備用電源 測量溫度
54、范圍為-55度至+125度。-10度至+85度范圍內(nèi)精度為±0.5度溫度傳感器可編程的分辨率為9~12位[12]。DS18B20連線如圖</p><p> 圖4 DS18B20管腳連線</p><p> 2.3.5 顯示模塊的設(shè)計(jì)</p><p> 如下圖5所示,采用12864液晶顯示器,單片機(jī)P1口作為數(shù)據(jù)輸出口,RS,R\W,E分別通過10K的上
55、拉電阻連接到單片機(jī)的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高(對比度過高時(shí)會產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度)。RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。R/W為讀寫信號線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為
56、雙向數(shù)據(jù)總線,同時(shí)最高位DB7也是忙信號檢測位。BLA、BLK分別為顯示器背光燈的正、負(fù)極[13]。</p><p> 圖5 LCM1602與單片機(jī)的連接 </p><p> 2.3.6 DS1302原理及說明 </p><p> (1) 時(shí)鐘芯片DS1302的工作原理</p><p> DS1302在每次進(jìn)行讀、寫程序前都必須初
57、始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖7所示。圖6為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若對程序進(jìn)行讀/寫時(shí)RAM=1,對時(shí)間進(jìn)行讀/寫時(shí),CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表2為DS1302的日歷、時(shí)間
58、寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行。“WP”是寫保護(hù)位,在任何的對時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對任一寄存器的寫操作。</p><p> (2) DS1302的控制字</p><p> DS1302的控制字如圖6所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如
59、果它為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> 圖6 DS1302的控制字 &l
60、t;/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[14]。如下圖7所示:</p><p> 圖7 DS1302讀與寫的時(shí)序圖</p>
61、<p> DS1302的寄存器</p><p> DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見圖8。</p><p> 圖8 DS1302的日歷、時(shí)間寄存器 </p><p> 此外,DS1302 還有年份寄存器、控制寄存器、
62、充電寄存器、時(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><p&
63、gt; 2.3.7 LCM1602工作原理及說明</p><p> (1)寄存器選擇控制</p><p> 1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個(gè)不同的點(diǎn)陣字符[15],圖形寄存器選擇控制表如表1所示:</p><p> 表1 1602寄存
64、器選擇控制表 </p><p><b> (2)指令集</b></p><p> 1602通過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光標(biāo)閃爍(1有效)。00000
65、1NS 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è)字符后,整屏顯示不移動。數(shù)據(jù)指針設(shè)置:數(shù)據(jù)首地址為80H,所以數(shù)據(jù)地址為80H+地址碼(0-27H,40-67H)。其他設(shè)置:01H(顯示清屏,數(shù)據(jù)指針=0,所有顯示=0);02H(顯示回車,數(shù)據(jù)指針=0)[16]。</p><p> 2.
66、3.8 系統(tǒng)仿真電路</p><p> 本次仿真使用軟件Protues7.0,該軟件元件庫豐富,元件封裝要求相對簡單且參數(shù)調(diào)整方便,除此之外,程序還可進(jìn)行動態(tài)調(diào)試。系統(tǒng)仿真截圖如圖9所示:</p><p> 圖9 系統(tǒng)仿真電路圖</p><p> 如圖,左上角為顯示模塊LCM1602,U1是時(shí)鐘芯片DS1302,U2是主控模塊AT89C51,U3為溫度傳感器D
67、S18B20,右下角是鍵盤控制模塊。</p><p><b> 3 系統(tǒng)的軟件設(shè)計(jì)</b></p><p> 3.1 程序流程框圖</p><p> 圖10 主程序流程圖</p><p> 主程序流程圖如上圖10所示。由于LCM1602,DS18B20,DS1302的數(shù)據(jù)讀取及指令寫入函數(shù)均已在各自的頭文件中完成
68、,在主程序中只須引用即可。</p><p> 由于在硬件電路方面上設(shè)計(jì)了時(shí)間調(diào)整按鍵和開關(guān),因此應(yīng)有對應(yīng)的時(shí)間調(diào)整程序。時(shí)間調(diào)整程序的流程圖如圖11所示。</p><p> 圖11 時(shí)間調(diào)整程序流程圖</p><p><b> 3.2 子程序</b></p><p> 由于本系統(tǒng)程序涉及的可編程器件有LCM160
69、2,DS18B20以及DS1302,各芯片的控制字及數(shù)據(jù)讀寫如果混雜,將會使程序可讀性大大降低,因此采用子程序的方法進(jìn)行調(diào)用并將其封裝于各自的頭文件中。詳盡的程序設(shè)計(jì)見附錄。</p><p><b> 4 系統(tǒng)測試</b></p><p><b> 4.1 硬件測試</b></p><p> 在Protues仿真結(jié)束
70、后,于焊接板上完成了硬件組裝。在調(diào)試硬件時(shí)遇到過很多問題,但只要細(xì)心、認(rèn)真檢查這些問題都是可以避免的,主要問題及解決辦法現(xiàn)列如下:</p><p> 接通電源后LCM1602沒有正確的顯示。在不通電狀態(tài)下用萬用表檢測電路是否正常連接,在檢查回路時(shí)發(fā)現(xiàn)有的點(diǎn)之間看似連接,但由于虛焊導(dǎo)致其并無電氣連接,只能對焊腳進(jìn)行在加工直到解決問題。</p><p> 電路工作一段時(shí)間之后有的芯片發(fā)熱嚴(yán)
71、重。經(jīng)查發(fā)現(xiàn)原來是有尖銳的管腳刺破鄰近的漆包線造成短路,斷掉該線并再次連接可解決問題。</p><p><b> 4.2 軟件測試</b></p><p> 由于本系統(tǒng)涉及到多個(gè)子程序,多個(gè)芯片的編程。首先必須對可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時(shí)鐘輸入端,需要晶振支持。對芯片的讀寫都需要在相應(yīng)的觸發(fā)沿到來時(shí)才能進(jìn)行。由于DS18B20是
72、串行通信數(shù)據(jù),只用一個(gè)口線傳輸,在處理采集的模擬信號時(shí)需要一定的時(shí)間,會對延時(shí)有較高要求。所以在調(diào)用溫度子程序時(shí),先關(guān)閉定時(shí)器1中斷允許,在溫度子程序反回時(shí)再打開定時(shí)器1中斷允許。</p><p><b> 5 結(jié)束語</b></p><p> 以上所述即是電子萬年歷的設(shè)計(jì)全過程,經(jīng)過多次的反復(fù)測試與分析,對電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與及對電路的
73、分析能力.經(jīng)過此設(shè)計(jì),基本完成了設(shè)計(jì)任務(wù)的要求。硬件層面而言操作相對簡單,界面比較友好。</p><p> 在硬件電路方面,詳盡解析了各個(gè)獨(dú)立元件的選擇依據(jù),對數(shù)種方案進(jìn)行了全面的比較。在時(shí)鐘芯片的選擇上,若直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然可以減少時(shí)鐘芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大。因此采用專業(yè)的時(shí)鐘芯片DS1302,它可以對年、
74、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能;在顯示模塊的選擇上,若采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價(jià)格雖適中,對于顯示數(shù)字也最合適,而且采用動態(tài)掃描法與單片機(jī)連接時(shí),占用的單片機(jī)口線少。但是由于數(shù)碼管動態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時(shí)往往會有很多障礙,因此本次設(shè)計(jì)選擇了LCM1602,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字
75、,圖形,顯示多樣,清晰可見;在溫度采集模塊的選擇上,沒有采用熱敏電阻,因?yàn)樵O(shè)計(jì)方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會產(chǎn)生較大的測量誤差。最后選擇了DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行</p><p> 在軟件設(shè)計(jì)方面,對日歷算法和時(shí)間調(diào)整算法都做了比較詳細(xì)的闡述,可讀性較強(qiáng)。</p><p> 美中不足的是并沒有給
76、出與陽歷同步的陰歷算法,久經(jīng)思索卻終究未能達(dá)成。</p><p> 綜上所述,本設(shè)計(jì)雖然實(shí)現(xiàn)了電子萬年歷的功能,但在硬件的選擇上應(yīng)該更優(yōu)化,使成本更低;在軟件方面也需要完善,一個(gè)真正實(shí)用的萬年歷應(yīng)該具有計(jì)算陰歷歷法的功能。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]胡乾斌,李光斌,李玲,喻紅.單片微型計(jì)算機(jī)原理與
77、應(yīng)用.華中科技大學(xué)出版社,1996.</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]王萍.電子技術(shù)實(shí)驗(yàn)教程.
78、機(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> [9]樓然苗,李
79、光飛.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].中國鐵道出版社,200
80、4.</p><p> [13]張培仁.基于匯編語言編程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-walled carbon n
81、anotube 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 Letters,2004.
82、</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></p>
83、<p><b> 主程序:</b></p><p> #include<reg52.h></p><p> #include"lcd1602.h"</p><p> #include"ds1302.h"</p><p> #include"
84、;ds18b20.h"</p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> uint b[6];</p><p> //年、月、日、時(shí)、分、秒</p><p> uchar code row
85、1[]={"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[12]={31,29,
86、31,30,31,30,31,31,30,31,30,31};//潤年</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> //i循環(huán)數(shù),
87、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><
88、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><p&g
89、t; 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></p>&l
90、t;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><p&g
91、t; 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++;</b>
92、;</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><p> {
93、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((b[0]%4==
94、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)b[0]=0;
95、</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]==-1)b[5]=59
96、;</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><p> e
97、lse {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++)</p>
98、<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><
99、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> lcdwrite(
100、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)+a[0]);<
101、;/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></p>
102、;<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[i]);</p
103、><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> {</b><
104、/p><p> lcdshuju(row2[i]);</p><p><b> delay(1);</b></p><p><b> }</b></p><p><b> dsrst=0;</b></p><p><b> dssclk=
105、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();</p&
106、gt;<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> dsrs
107、t=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>>4)&
108、;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<12;i++)&
109、lt;/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('&');}</
110、p><p><b> else </b></p><p> {lcdwrite(0x8e);</p><p> lcdshuju(0x00);}</p><p> if(bigclock==1)</p><p> { speaker=1;</p><p><
111、b> c++;</b></p><p> if(c==100){bigclock=0;speaker=0;}</p><p><b> }</b></p><p> temp=readtemperature();//temp是uint型的。不然會出現(xiàn)溫度到25后回00的現(xiàn)象。可能是由于十六進(jìn)制與十進(jìn)制的差異。</
112、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> 子程序:<
113、/b></p><p> LCM1602頭文件:</p><p> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> sbit lcdrs=P0
114、^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;</b><
115、/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)</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)電子萬年歷畢業(yè)論文
- 單片機(jī)電子萬年歷畢業(yè)論文
- 基于51單片機(jī)電子萬年歷畢業(yè)論文
- 基于單片機(jī)電子萬年歷的設(shè)計(jì)畢業(yè)論文
- 基于51單片機(jī)電子萬年歷
- 基于單片機(jī)的電子萬年歷畢業(yè)論文
- 萬年歷畢業(yè)論文---基于at89s52單片機(jī)的電子萬年歷設(shè)計(jì)
- 電子萬年歷畢業(yè)論文
- 單片機(jī)電子萬年歷課程設(shè)計(jì)
- 單片機(jī)電子萬年歷課程設(shè)計(jì)
- 單片機(jī)電子萬年歷課程設(shè)計(jì)
- 單片機(jī)電子萬年歷課程設(shè)計(jì)
- 畢業(yè)論文(設(shè)計(jì))基于單片機(jī)的電子萬年歷
- 單片機(jī)電子萬年歷課程設(shè)計(jì) (2)
- 51單片機(jī)電子萬年歷課程設(shè)計(jì)
- 單片機(jī)電子萬年歷課程設(shè)計(jì) (2)
- 畢業(yè)論文——電子萬年歷設(shè)計(jì)
- 電子萬年歷設(shè)計(jì)-畢業(yè)論文
- 畢業(yè)論文——電子萬年歷設(shè)計(jì)
- 基于51單片機(jī)的電子萬年歷畢業(yè)論文設(shè)計(jì)
評論
0/150
提交評論