版權(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> 電子萬(wàn)年歷是一種非常廣泛日常計(jì)時(shí)工具,對(duì)現(xiàn)代社會(huì)越來(lái)越流行。它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。本系統(tǒng)選用DALLAS公司生產(chǎn)的日歷時(shí)鐘芯片DS12C887來(lái)作為實(shí)時(shí)時(shí)鐘芯片,為本系統(tǒng)提供詳細(xì)的年、月、日、星期和小時(shí)、分鐘等時(shí)間信息。數(shù)字萬(wàn)年歷采用直觀數(shù)字顯示,可以同時(shí)顯示年、月、日、周日、
2、時(shí)、分、秒和溫度等信息,還具有定時(shí)和時(shí)間校準(zhǔn)等功能。該電路采用AT89S52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p> 本系統(tǒng)硬件部分由AT89S52單片機(jī)、DS12C887時(shí)鐘芯片、1062液晶顯示器、DS18B20溫度測(cè)量、鍵盤、蜂鳴器系統(tǒng)等部分構(gòu)成。軟件部分在keil環(huán)境下用C51語(yǔ)言編寫,包括時(shí)間設(shè)置、時(shí)間顯示、定時(shí)設(shè)置、定時(shí)鬧鐘、溫度顯示。</p&
3、gt;<p> 沒(méi)有良好的基礎(chǔ)知識(shí)和實(shí)踐經(jīng)驗(yàn)會(huì)受到很大限制,每項(xiàng)功能實(shí)現(xiàn)時(shí)需要那種硬件,程序該如何編寫,算法如何實(shí)現(xiàn)等,沒(méi)有一定的基礎(chǔ)就不可能很好的實(shí)現(xiàn)。在編寫程序過(guò)程中發(fā)現(xiàn)以現(xiàn)有的相關(guān)知識(shí)要獨(dú)自完成編寫任務(wù)困難重重,在老師和同學(xué)的幫助下才完成了程序部分的編寫。</p><p> 文章后附有電路原理圖、程序清單,以供讀者參考。因水平有限,難免有疏落不足之處,敬請(qǐng)老師和同學(xué)能給與批評(píng)指正。<
4、/p><p> 關(guān)鍵詞:時(shí)鐘芯片DS12C887;溫度采集DS18B20;單片機(jī)AT89S52;液晶顯示1602</p><p><b> 目 錄</b></p><p><b> 第一章 概述6</b></p><p> §1.1實(shí)時(shí)時(shí)鐘研究的背景及意義6</p>
5、<p> §1.2論文主要研究?jī)?nèi)容6</p><p> 1.2.1 系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)6</p><p> 1.2.2 系統(tǒng)的總體設(shè)計(jì)6</p><p> 第二章 硬件電路設(shè)計(jì)8</p><p> §2.1單片機(jī)最小系統(tǒng)8</p><p> §2.2時(shí)鐘芯
6、片電路8</p><p> 2.2.1 時(shí)鐘芯片引腳介紹8</p><p> 2.2.2時(shí)鐘芯片DS12C887,其內(nèi)存空間介紹10</p><p> 2.2.3 4個(gè)控制寄存器介紹10</p><p> §2.4溫度采集電路設(shè)計(jì)12</p><p> 2.4.1 DS18B20的主要特性
7、12</p><p> 2.4.2 DS1820的基本操作指令12</p><p> 2.4.3 溫度測(cè)量的步驟13</p><p> 2.4.4 DS18B20的操作時(shí)序13</p><p> §2.5 1602LCD液晶顯示屏15</p><p> 2.5.1 1602字符型LCD簡(jiǎn)
8、介15</p><p> 2.5.2 1602引腳功能說(shuō)明15</p><p> 2.5.3 1602LCD的指令說(shuō)明及時(shí)序15</p><p> 2.5.4 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫(kù)表17</p><p> 2.5.5 1602LCD的一般初始化(復(fù)位)過(guò)程19</p><p>
9、2.4.6 1602LCD的電路連接19</p><p> §2.6 蜂鳴器鬧鈴電路20</p><p> §2.7 按鍵調(diào)整電路20</p><p> §2.8 電源模塊21</p><p> 第三章 軟件部分設(shè)計(jì)22</p><p> §3.1 主程序流程
10、22</p><p> §3.2 時(shí)間設(shè)置子程序流程22</p><p> §3.3 鬧鐘設(shè)置子程序流程23</p><p> §3.4 程序設(shè)計(jì)問(wèn)題24</p><p> 3.4.1 按鍵抖動(dòng)問(wèn)題24</p><p> 3.4.2 蜂鳴器設(shè)置24</p>
11、<p> 3.4.3 液晶顯示的設(shè)置24</p><p> 3.4.4 中斷設(shè)置24</p><p> 3.4.5 時(shí)鐘芯片設(shè)置25</p><p><b> 結(jié)束語(yǔ)28</b></p><p><b> 致謝詞29</b></p><p>
12、<b> 參考文獻(xiàn)30</b></p><p><b> 附件131</b></p><p><b> 第一章 概述</b></p><p> §1.1實(shí)時(shí)時(shí)鐘研究的背景及意義</p><p> 在現(xiàn)實(shí)我們生活中每個(gè)人都可能有自己的時(shí)鐘,光陰在永不停息的
13、流逝,有了時(shí)鐘人們就能隨著時(shí)間有計(jì)劃的過(guò)著每一天。然而現(xiàn)在絕大部分的時(shí)鐘有的需要不斷地跟換電池,有些時(shí)鐘需要外接電源,如果一旦電池沒(méi)電或者外接電源無(wú)法供電,時(shí)鐘就會(huì)停止計(jì)時(shí)了。而美國(guó)DALLAS 公司的新型時(shí)鐘日歷芯片DS12C887就能解決這一問(wèn)題。該器件能提供實(shí)時(shí)時(shí)鐘(RTC)/日歷、定時(shí)鬧鐘。少于31天的月份,月末日期可自動(dòng)調(diào)整,其中包括閏年補(bǔ)償。該器件還可以工作于24小時(shí)貨代/PM指示的12小時(shí)格式。一個(gè)精密的溫度補(bǔ)償電路用來(lái)監(jiān)
14、視Vcc的狀態(tài)。如果檢測(cè)到主電源故障,該器件可以自動(dòng)切換到備用電源供電。Ds12c887集成了DS12C885l裸片、石英晶體和電池。DS12C885的充電電路被禁止。在沒(méi)有提供Vcc的+25℃環(huán)境下,電池容量可為振蕩器和寄存器供電長(zhǎng)達(dá)10年之久。</p><p> 本時(shí)鐘還具有環(huán)保、走時(shí)無(wú)噪音、低功耗等非實(shí)時(shí)時(shí)鐘不具有的功能。該實(shí)時(shí)時(shí)鐘不但可以作為家用,而且更可以在公共場(chǎng)合使用,如車站、碼頭、商場(chǎng)等場(chǎng)所。&l
15、t;/p><p> §1.2論文主要研究?jī)?nèi)容</p><p> 1.2.1 系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)</p><p> 本文是以實(shí)時(shí)時(shí)鐘芯片DS12C887和AT89S52單片機(jī)為主要研究對(duì)象,著重進(jìn)行51單片機(jī)控制系統(tǒng)的設(shè)計(jì)研究和如何讀取DS12C887內(nèi)部時(shí)鐘信息的研究。以及運(yùn)用18B20進(jìn)行實(shí)時(shí)溫度檢測(cè)。主要內(nèi)容包括:</p><p&
16、gt;<b> 實(shí)時(shí)溫度顯示;</b></p><p> 年月日星期時(shí)分秒顯示;</p><p> 年月日星期時(shí)分秒調(diào)整;</p><p> 鬧鐘定時(shí)小時(shí)分鐘和秒;</p><p> 1.2.2 系統(tǒng)的總體設(shè)計(jì)</p><p> 采用AT89S52作為主控單片機(jī),時(shí)鐘模塊選用DS12C
17、887作為時(shí)鐘芯片,溫度模塊選用DS18B20作為溫度傳感器,顯示模塊選用LCD1602,設(shè)置部分選用按鍵電路。</p><p> AT89S52與MCS-51單片機(jī)產(chǎn)品兼容 、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器、 1000次擦寫周期、 全靜態(tài)操作:0Hz~33Hz 、 三級(jí)加密程序存儲(chǔ)器 、 32個(gè)可編程I/O口線 、三個(gè)16位定時(shí)器/計(jì)數(shù)器 八個(gè)中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、
18、掉電后中斷可喚醒 、看門狗定時(shí)器 、雙數(shù)據(jù)指針 、掉電標(biāo)識(shí)符 。</p><p> DS12C887 實(shí)時(shí)時(shí)鐘芯片功能豐富,可以用來(lái)直接代替IBM PC 上的時(shí)鐘日歷芯片DS12887,同時(shí),它的管腳也和MC146818B、DS12887 相兼容。由于DS12C887 能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決子“千年”問(wèn)題;DS12C887 中自帶有鋰電
19、池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能夠保持10 年之久;對(duì)于一天內(nèi)的時(shí)間記錄,有12 小時(shí)制和24 小時(shí)制兩種模式。用戶還可對(duì)DS12C887 進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可對(duì)其內(nèi)部的三路中斷通過(guò)軟件進(jìn)行屏蔽。</p><p> DS18B20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域??删幊痰姆直媛蕿?~12位 溫度轉(zhuǎn)換為12位數(shù)字
20、格式最大值為750毫秒 用戶可定義的非易失性溫度報(bào)警設(shè)置。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。采用一線通信接口。</p><p> 該系統(tǒng)的系統(tǒng)框圖如圖1.1示:</p><p><b> 圖1-1系統(tǒng)框圖</b></p><p> 第二章 硬件電路設(shè)計(jì)&l
21、t;/p><p> §2.1單片機(jī)最小系統(tǒng)</p><p> 本系統(tǒng)以AT89S52單片機(jī)為核心,本系統(tǒng)選用11.0592MHZ的晶振,,使得單片機(jī)有合理的運(yùn)行速度。起振電容30pF對(duì)振蕩器的頻率高低、振蕩器的穩(wěn)定性和起振的快速性影響較合適,復(fù)位電路為按鍵高電平復(fù)位。</p><p> AT89S52單片機(jī)最小系統(tǒng)電路設(shè)計(jì)如圖2.1所示。</p&g
22、t;<p> 圖2-1 單片機(jī)最小系統(tǒng)</p><p> §2.2時(shí)鐘芯片電路</p><p> 2.2.1 時(shí)鐘芯片引腳介紹</p><p> 時(shí)鐘芯片DS12C887,其引腳分布圖如下所示</p><p> 圖2-2時(shí)鐘引腳分布</p><p> MOT (1腳) :總線時(shí)序模式
23、選擇腳。接高電平,選擇MOTOROLA總線時(shí);序;接低電平或懸空,擇選擇INTEL總線時(shí)序。</p><p> NC (2,3,16,20,21,22腳):懸空腳。</p><p> AD0~AD7(4~11腳):地址/地址數(shù)據(jù)復(fù)用總線引腳。</p><p> CS(13腳):片選腳,低電平有效。</p><p> AS(14腳):
24、地址鎖存輸入腳。下降沿時(shí),地址被鎖存,緊接著的上升沿來(lái)時(shí)地址被清除。</p><p> R/W(15腳):讀/寫輸入腳。在選擇MOTOROLA總線時(shí)序模式時(shí),此引腳用于指示當(dāng)前的讀寫周期,高電平指示當(dāng)前為讀周期,低電平指示當(dāng)前為寫周期;選擇INTEL中線時(shí)序模式時(shí),此引腳為低電平有效的輸入腳,相當(dāng)于通用RAM的寫使能信號(hào)(/WE)</p><p> DS(17腳):選擇MOTOROLA
25、總線時(shí)序模式時(shí),此引腳為數(shù)據(jù)鎖存腳;選擇INTEL總線時(shí)序模式時(shí),此引腳為讀輸入腳,低電平有效,相當(dāng)于典型的內(nèi)存的輸出使能信號(hào)(/OE)</p><p> RESET(18腳):復(fù)位腳,低電平有效,復(fù)位不會(huì)影響到時(shí)鐘、日歷和RAM。</p><p> IRQ(19腳):中斷申請(qǐng)輸出腳,低電平有效,可作為微處理器的中斷輸入。</p><p> SQW(23腳):
26、方波信號(hào)輸出腳??赏ㄟ^(guò)設(shè)置寄存器位SQWE關(guān)斷此信號(hào)輸出,此信號(hào)的輸出頻率也可通過(guò)對(duì)芯片內(nèi)部的寄存器編程予以改變。</p><p> VCC(24腳):+5v電源端。</p><p> 2.2.2時(shí)鐘芯片DS12C887,其內(nèi)存空間介紹</p><p> 圖2-3 時(shí)鐘、日歷和鬧鐘數(shù)據(jù)模式——BCD模式(DM=0)</p><p>
27、圖2-4 時(shí)鐘、日歷和鬧鐘數(shù)據(jù)模式——二進(jìn)制模式(DM=1)</p><p> 2.2.3 4個(gè)控制寄存器介紹</p><p> DS12C887有4個(gè)控制寄存器,在任何時(shí)間都可以進(jìn)行訪問(wèn),即使處于更新周期。</p><p> 寄存器A字節(jié)的內(nèi)容如下。</p><p> MSB
28、 LSB</p><p> UIP: 更新標(biāo)志位。為只讀位且不受復(fù)位操作的影響,為1時(shí),表示即將發(fā)生的數(shù)據(jù)更新;為0時(shí),表示至少244US不會(huì)更新數(shù)據(jù)。當(dāng)UIP為0時(shí),可以獲得所有時(shí)鐘、日歷、鬧鐘信息。將寄存器B中的SET位置1可以限制任何數(shù)據(jù)更新操作,并且清除UIP位。</p><p> DV2、DV1、DV0:此3位為010時(shí)將
29、打開晶振,并開始計(jì)時(shí)。RES3、RES2、RES1、RES0:用于設(shè)置周期性中斷產(chǎn)生的時(shí)間周期和輸出方波的頻率。</p><p> 寄存器B字節(jié)的內(nèi)容如下。</p><p> MSB LSB</p><p> SET:設(shè)置位,可讀寫,不受復(fù)位操作影響
30、。為0時(shí),不處于設(shè)置狀態(tài),芯片進(jìn)行正常時(shí)間數(shù)據(jù)更新;為1時(shí),抑制數(shù)據(jù)更新,可以通過(guò)程序設(shè)定時(shí)間和日歷信息。</p><p> PIE:周期性中斷使能位,可讀寫,復(fù)位時(shí)清除此位。為1時(shí),允許寄存器C中的周期中斷標(biāo)志位PF,驅(qū)動(dòng)/IRQ引腳為低產(chǎn)生中斷信號(hào)輸出,中斷信號(hào)產(chǎn)生的周期由RS3~RE0決定。</p><p> AIE:鬧鐘中斷使能位,可讀寫。為1時(shí),允許寄存器C中的鬧鐘中斷標(biāo)志位
31、AF、鬧鐘發(fā)生時(shí)就會(huì)通過(guò)/IRQ引腳產(chǎn)生中斷輸出。</p><p> UIE:數(shù)據(jù)更新結(jié)束中斷使能位,可讀寫。復(fù)位或者SET位為1時(shí)清除此位。為1時(shí)允許寄存器C中的更新結(jié)束標(biāo)志UF,更新結(jié)束時(shí)就會(huì)通過(guò)/IRQ引腳產(chǎn)生中斷輸出。</p><p> SQWE:方波使能位,可讀寫,復(fù)位時(shí)清除此位。為0時(shí),SQW引腳保持低電平;為1時(shí),SQW引腳輸出方波信號(hào),其頻率由RS3~RS0決定。<
32、;/p><p> DM:數(shù)據(jù)模式位,可讀寫,不受復(fù)位操作影響。為0時(shí),設(shè)置時(shí)間、日歷信息為二進(jìn)制數(shù)據(jù);為1時(shí),設(shè)置為BCD碼數(shù)據(jù)。</p><p> 24/12:時(shí)間模式設(shè)置為,可讀寫,不受復(fù)位操作影響。為0時(shí),設(shè)置為12小時(shí)模式;為1時(shí),設(shè)置為24小時(shí)模式。</p><p> DSE:為1時(shí),會(huì)引起兩次特殊的時(shí)間更新;4月的第一個(gè)星期日凌晨1:59:59會(huì)直接更
33、新到3:00:00,10月的最后一個(gè)星期日凌晨1:59:59會(huì)直接更新到1:00:00;為0時(shí),時(shí)間信息正常更新,此位可讀寫,不受復(fù)位操作影響。</p><p> 寄存器C字節(jié)內(nèi)容如下。</p><p> MSB LSB</p><p> IQRF:
34、中斷申請(qǐng)標(biāo)志位。為1時(shí),/IRQ引腳為低,產(chǎn)生中斷申請(qǐng)。當(dāng)PF、PIE為1時(shí)或者AF、ATE為1或者UF、UIE為1時(shí),此位為1,否則置0.</p><p> PF:中期中斷標(biāo)志位。為1時(shí),它是只讀位,和PIE位狀態(tài)無(wú)關(guān),由復(fù)位操作或者寄存器C操作清除。</p><p> AF:鬧鐘中斷標(biāo)志位。為1時(shí),表示當(dāng)前時(shí)間和鬧鐘設(shè)定時(shí)間一至,由復(fù)位操作或讀寄存器C操作清除。</p>
35、<p> UF:數(shù)據(jù)更新結(jié)束中斷標(biāo)志位。每個(gè)更新周期后此位都會(huì)置1,當(dāng)UIE位位置1時(shí),UF若為1就會(huì)引起IRQF置1,將驅(qū)動(dòng)/IRQ引腳為低電平,申請(qǐng)中斷。此位由復(fù)位操作或讀寄存器C操作清除。</p><p> 寄存器D字節(jié)的內(nèi)容如下。</p><p> MSB
36、 LSB</p><p> VRT;RAM和時(shí)間有效位。用于指示和VBAT引腳連接的電池狀態(tài)。此位不可寫,也不受操作為影響,正常情況下讀取時(shí)總?cè)?,如果出現(xiàn)讀取為0的情況,則表示電池耗盡,時(shí)間數(shù)據(jù)和RAM中的數(shù)據(jù)就會(huì)出現(xiàn)問(wèn)題。</p><p> 芯片DS12CR887的113字節(jié)普通RAM空間為非易失性RAM空間,他不專門用于某些特別功能,而是可以在未處理器程序中作為非易失性內(nèi)存
37、空間使用。</p><p> §2.4溫度采集電路設(shè)計(jì)</p><p> 2.4.1 DS18B20的主要特性</p><p> 適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。②獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。③DS18B20支持多點(diǎn)組網(wǎng)
38、功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫④DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。⑤溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為0.5℃。⑥可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫。⑦在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750
39、ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。⑧測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。</p><p> ?、嶝?fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。</p><p> 2.4.2 DS1820的基本操作指令</p><p> DS1820的操作指令分為
40、ROM操作命令和存儲(chǔ)器操作命令。</p><p> ?。?)、ROM操作命令及其含義</p><p> Read ROM指令代碼(33h):如果只有一片DS1820,可用此命令讀出其序列號(hào),若在線DS1820多于一個(gè),將發(fā)生沖突。</p><p> Match ROM指令代碼(55h):多個(gè)DS1820在線時(shí),可用此命令匹配一個(gè)給定序列號(hào)的DS1820,此后的命
41、令就針對(duì)該DS1820。</p><p> Skip ROM指令代碼(CCh):此命令執(zhí)行后的存儲(chǔ)器操作將針對(duì)在線的所有DS1820。</p><p> Search ROM指令代碼(F0h):用以讀出在線的DS1820的序列號(hào)。</p><p> Alarm Search指令代碼(ECh):當(dāng)溫度值高于TH或低于TL中的數(shù)值時(shí),此命令可以讀出報(bào)警的DS182
42、0。 </p><p> ?。?)、存儲(chǔ)器操作指令代碼及其含義 </p><p> Write Scratchpad指令代碼(4Eh):寫兩個(gè)字節(jié)的數(shù)據(jù)到溫度寄存器。</p><p> Read Scratchpad指令代碼(BEh):讀取溫度寄存器的溫度值。</p><p> Copy Scratchpad指令代碼
43、(48h):將溫度寄存器的數(shù)值拷貝到EERAM中,保證溫度值不丟失。</p><p> Convert T指令代碼(44h):?jiǎn)?dòng)在線DS1280做溫度A/D轉(zhuǎn)換。</p><p> Recall E2指令代碼(B8h):將EERAM中的數(shù)值拷貝到溫度寄存器中。</p><p> Read Power Supply指令代碼(B4h):在本命令送到DS1280之
44、后的每一個(gè)讀數(shù)據(jù)間隙,指出電源模式:“0”為寄生電源;“1”為外部電源。</p><p> 2.4.3 溫度測(cè)量的步驟</p><p> (1).Read ROM(33 h),每次對(duì)DS1820進(jìn)行操作之前都要對(duì)它進(jìn)行初始化,主要目的在于確定傳感器已經(jīng)連接到單總線上。</p><p> (2).Search ROM(F0h),這條指令使處理器用排除的
45、方法去辨別總線上的DS1820。</p><p> (3).Match ROM(55h),只有準(zhǔn)確的符合64位ROM序列的DS1820才能響應(yīng)其后的指令,當(dāng)然,單點(diǎn)測(cè)溫時(shí)可以使用Skip ROM(CCh)指令來(lái)跳過(guò)這一步。</p><p> (4).Convert T(44h),發(fā)完指令后應(yīng)查詢總線上的電平,當(dāng)電平位高時(shí)溫度轉(zhuǎn)換完成。</p><p>
46、 (5).Read Scratchpad(BEh),將讀指令發(fā)出后,就可從總線上讀得表示溫度的2字節(jié)二進(jìn)制數(shù)。</p><p> 2.4.4 DS18B20的操作時(shí)序</p><p> 由于采用單總線數(shù)據(jù)傳輸方式,DS18B20的數(shù)據(jù)I/O均由同一條線完成,因此,對(duì)讀寫的操作時(shí)序要求嚴(yán)格。它的各種時(shí)序如圖2-5所示</p><p> 圖2-5 DS18B2
47、0的操作時(shí)序</p><p> 為了保證DS18B20的嚴(yán)格I/O時(shí)序。需要做較精確的延時(shí)。在DS18B20操作中,用到的延時(shí)有15μS,90μS,270μS,540μS等。因這些延時(shí)均為15μS的整倍,因此在程序中可以編寫一個(gè)以15μS為基準(zhǔn)的延時(shí)函數(shù)。</p><p> 圖2-6溫度采集電路</p><p> §2.5 1602LCD液晶顯示屏&
48、lt;/p><p> 2.5.1 1602字符型LCD簡(jiǎn)介</p><p> 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,本設(shè)計(jì)采用16列*2行的字符型LCD1602帶背光的液晶顯示屏。</p><p> 1602LCD主要技術(shù)參數(shù):</p><p> 顯示容量:16×2個(gè)字符</p>&
49、lt;p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2.0mA(5.0V)</p><p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W×H)mm</p><p> 2.5.2 1602引腳功能說(shuō)明</p><p> 各引腳接
50、口說(shuō)明如表所示:</p><p><b> 表2-1</b></p><p> 表2-1:引腳接口說(shuō)明:</p><p> 第1腳:VSS為地電源。</p><p> 第2腳:VDD接5V正電源。</p><p> 第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度
51、最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。</p><p> 第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)
52、可以寫入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負(fù)極。</p><p> 2.5.3 1602LCD的指令說(shuō)明及時(shí)
53、序</p><p> 1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2-2所示:</p><p><b> 表2-2</b></p><p> 表2-2字符控制命令說(shuō)明:</p><p> 1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:1為高電平、0為低電平)</p&g
54、t;<p> 指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。</p><p> 指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。</p><p> 指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無(wú)效。</p><p> 指令4:顯示開關(guān)控制。 D:控制整體
55、顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。</p><p> 指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。</p><p> 指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低
56、電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。</p><p> 指令7:字符發(fā)生器RAM地址設(shè)置。</p><p> 指令8:DDRAM地址設(shè)置。</p><p> 指令9:讀忙信號(hào)和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。</p><p><b> 指令
57、10:寫數(shù)據(jù)。</b></p><p><b> 指令11:讀數(shù)據(jù)。</b></p><p><b> 芯片時(shí)序表如下:</b></p><p><b> 表2-3</b></p><p><b> 基本操作時(shí)序表</b></p&
58、gt;<p> 讀寫操作時(shí)序如圖2-7和2-8所示:</p><p><b> 圖2-7讀操作時(shí)序</b></p><p> 圖2-8 寫操作時(shí)序</p><p> 2.5.4 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫(kù)表</p><p> 液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要
59、確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖2-9是1602的內(nèi)部顯示地址。</p><p> 圖2-9液晶內(nèi)部顯示地址</p><p> 例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)
60、據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。</p><p> 在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無(wú)需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。</p><p> 1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如圖10-58所示,
61、這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。</p><p> 圖2-10 字符代碼與圖形對(duì)應(yīng)圖</p><p> 2.5.5 1602LCD的一般初始化(復(fù)位)過(guò)程</p><p
62、><b> 延時(shí)15mS</b></p><p> 寫指令38H(不檢測(cè)忙信號(hào))</p><p><b> 延時(shí)5mS</b></p><p> 寫指令38H(不檢測(cè)忙信號(hào))</p><p><b> 延時(shí)5mS</b></p><p>
63、 寫指令38H(不檢測(cè)忙信號(hào))以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)</p><p> 寫指令38H:顯示模式設(shè)置</p><p> 寫指令08H:顯示關(guān)閉</p><p> 寫指令01H:顯示清屏</p><p> 寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置</p><p> 寫指令0CH:顯示開及光標(biāo)設(shè)置&
64、lt;/p><p> 2.4.6 1602LCD的電路連接</p><p> 液晶5端為讀/寫選擇端,因?yàn)槲覀儾粡囊壕е凶x取數(shù)據(jù),只向其寫入命令和顯示數(shù)據(jù),因此此端始終選擇為寫狀態(tài),即低電平接地。液晶6端為使能信號(hào),是操作時(shí)必須的信號(hào)。其電路如圖2-11所示:</p><p> 圖2-11 1602的電路連接</p><p> §
65、;2.6 蜂鳴器鬧鈴電路</p><p> 當(dāng)單片機(jī)給蜂鳴器一個(gè)低電平時(shí),三極管導(dǎo)通驅(qū)動(dòng)蜂鳴器發(fā)出聲音作為定時(shí)鬧鈴,其電路圖如圖2-12所示:</p><p> 圖2-12 蜂鳴器連接電路</p><p> §2.7 按鍵調(diào)整電路</p><p> 系統(tǒng)四個(gè)獨(dú)立鍵盤均采用查詢方式,S2用于設(shè)置年、月、日、時(shí)、分、秒、星期的數(shù)
66、值加,以及鬧鐘開,S3用于設(shè)置年、月、日、時(shí)、分、秒、星期的數(shù)值減以及鬧鐘關(guān),s1用于具體設(shè)置時(shí)鐘位的切換,s4鍵用于設(shè)置鬧鐘。其電路圖如2-13所示:</p><p> 圖2-13 按鍵電路連接</p><p><b> §2.8 電源模塊</b></p><p> 電子鐘的電源為5伏直流電源,本設(shè)計(jì)中我使用的是5V的充電電池
67、,電源模塊的原理圖如圖2-15所示:</p><p><b> 圖2-14電源模塊</b></p><p> 第三章 軟件部分設(shè)計(jì)</p><p> 本系統(tǒng)主要包括五個(gè)模塊編程:</p><p><b> 蜂鳴器鬧鈴響編程</b></p><p> 時(shí)鐘芯片12C8
68、87的編</p><p> 液晶顯示屏1602的編程</p><p><b> 按鍵編程</b></p><p> DS18B20溫度采集編程</p><p> §3.1 主程序流程</p><p> 主程序開始初始化,并打開中斷,然后執(zhí)行掃描鬧鐘、鍵盤及讀取18B20值。當(dāng)有
69、S1鍵按下時(shí),執(zhí)行時(shí)鐘設(shè)置,當(dāng)有S4鍵按下時(shí),則進(jìn)入鬧鐘設(shè)置,無(wú)論是時(shí)鐘還是鬧鐘,設(shè)置完后退出,溫度、時(shí)鐘恢復(fù)實(shí)時(shí)顯示。主程序流程圖如圖3-1所示:</p><p> 圖3-1主程序流程圖</p><p> §3.2 時(shí)間設(shè)置子程序流程</p><p> 通過(guò)單片機(jī)判斷S1按下的次數(shù)來(lái)設(shè)置,由s1num標(biāo)志位來(lái)記錄次數(shù),用if語(yǔ)句判斷執(zhí)行命令。系統(tǒng)程
70、序不斷掃面鍵盤,當(dāng)s1鍵按下后產(chǎn)生一個(gè)低電平,即s1num加一。在調(diào)節(jié)時(shí)間之前首先進(jìn)行各個(gè)變量初始化,及設(shè)置起始時(shí)間,同時(shí)為讀取數(shù)據(jù)作準(zhǔn)備。當(dāng)s1=1時(shí)進(jìn)入秒的設(shè)置,地址指針指向miao顯示位置處,通過(guò)兩個(gè)if語(yǔ)句分別循環(huán)控制顯示秒數(shù)的加和減。當(dāng)s1=2時(shí),地址指針指向fen顯示位置處,變量最大值為59。當(dāng)s1=3時(shí),地址指針指向shi顯示位置處,變量最大值設(shè)為23。當(dāng)s1=4時(shí),地址指針指向week顯示位置處,最大值設(shè)為7,1至7分別
71、用MON、TUE、WED、THU 、FRI、SAT、SUN字符串顯示。隨著s2、s3值的的變化顯示不同的字符串。當(dāng)s1=5時(shí),地址指針指向day顯示位置,變量最大值為31。當(dāng)s1=6時(shí),地址指針指向month顯示位置,變量最大值為12。</p><p> 當(dāng)s1=7時(shí),地址指針指向year顯示位置,最大值為99。</p><p> 圖3-2時(shí)間設(shè)置流程圖</p><
72、p> §3.3 鬧鐘設(shè)置子程序流程</p><p> 時(shí)間設(shè)置程序流程圖如圖3-3所示。在開始時(shí)間設(shè)置之前程序會(huì)關(guān)閉全局中斷,直至設(shè)置結(jié)束,中斷又會(huì)重新開啟,進(jìn)入計(jì)時(shí)狀態(tài)。</p><p> 鬧鐘的設(shè)置時(shí)通過(guò)S1鍵的按下次數(shù)來(lái)判斷的。當(dāng)單片機(jī)檢測(cè)到S4鍵按下一次時(shí)則進(jìn)入鬧鐘設(shè)置界面,光標(biāo)并自動(dòng)跳到秒設(shè)置位置,可以對(duì)秒進(jìn)行設(shè)置,當(dāng)S1鍵依次按下1、2、3次時(shí),則分別進(jìn)入
73、鬧鐘的秒、分、時(shí)關(guān)的設(shè)置。:</p><p> 圖3-3 鬧鐘設(shè)置流程圖</p><p> §3.4 程序設(shè)計(jì)問(wèn)題</p><p> 3.4.1 按鍵抖動(dòng)問(wèn)題</p><p> 按鍵在按下時(shí)因?yàn)闄C(jī)械原因會(huì)產(chǎn)生抖動(dòng),抖動(dòng)的后果就是當(dāng)按下一次按鍵時(shí)因?yàn)槎秳?dòng)的原因讓系統(tǒng)讀取到多次的按鍵按下的次數(shù),由此導(dǎo)致設(shè)置時(shí)出現(xiàn)錯(cuò)誤。解決的方法
74、如下:當(dāng)按鍵按下時(shí)讀取按鍵鍵值,若5ms后鍵值和按下是相等,則確認(rèn)為有效按鍵,以此消除按鍵抖動(dòng)帶來(lái)的問(wèn)題。</p><p> 3.4.2 蜂鳴器設(shè)置</p><p> 蜂鳴器報(bào)警時(shí),設(shè)置響100毫秒,停100毫秒,循環(huán)響應(yīng),產(chǎn)生滴滴的聲音。</p><p> 3.4.3 液晶顯示的設(shè)置</p><p><b> 初始化設(shè)置&
75、lt;/b></p><p><b> 顯示模式設(shè)置</b></p><p> 寫入指令碼write_com(0x38),設(shè)置功能16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口</p><p> 顯示/開關(guān)及光標(biāo)設(shè)置</p><p> 寫入指令碼write_com(0x0c),設(shè)置開顯示,不顯示光標(biāo),光標(biāo)不閃爍。&
76、lt;/p><p> 寫入指令碼write_com(0x06),設(shè)置當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一,且光標(biāo)加一。當(dāng)寫一個(gè)字符,整屏顯示不移動(dòng)。</p><p> 顯示清屏,寫入指令碼write_com(0x01)。</p><p> 寫入指令碼函數(shù)write_com()寫指令過(guò)程 :輸入:rs=0,D0-D7=指令碼,E=高脈沖</p><p&
77、gt; 寫入數(shù)據(jù)函數(shù) write_date() 寫指令過(guò)程: 輸入:rs=1,D0-D7=數(shù)據(jù),E=高脈沖</p><p> 寫入指令和數(shù)據(jù)時(shí)rw端已經(jīng)接地。</p><p> 數(shù)據(jù)指針設(shè)置 指令碼80H+地址碼(0-27H)顯示第一行的字符</p><p> 指令碼80H+地址碼(40H-67H)顯示的第二行字符</p><p>
78、 3.4.4 中斷設(shè)置</p><p> EA=1;//打開總中斷</p><p> EX1=1;//打開外部中斷</p><p> IT1=1;//設(shè)置負(fù)跳變沿觸發(fā)中斷</p><p> 當(dāng)鬧鐘到點(diǎn)時(shí)響應(yīng)外部中1 時(shí)間到時(shí)IRQ端從高阻態(tài)轉(zhuǎn)為低電平,此時(shí)讀一次c寄存器清除IRQ端的輸出,等待下一次定時(shí)。</p>&
79、lt;p> void exter() interrupt 2 //外部中斷1服務(wù)程序</p><p><b> {</b></p><p> uchar c;//進(jìn)入中斷表示鬧鐘時(shí)間到</p><p> flag_ri=1; //設(shè)置標(biāo)志位,用以大程序中報(bào)警</p><p> c=read_ds(0x
80、0c);//讀取12c887c寄存器表示響應(yīng)了中端</p><p><b> }</b></p><p> 3.4.5 時(shí)鐘芯片設(shè)置</p><p> 首次上電初始化時(shí)間函數(shù):</p><p> void set_time()</p><p> {//首次上電初始化時(shí)間函數(shù)</p&
81、gt;<p> write_ds(0,0);//初始化秒</p><p> write_ds(1,0);//初始化秒鬧鐘</p><p> write_ds(2,0);// 初始化分</p><p> write_ds(3,0);//初始化分鬧鐘</p><p> write_ds(4,0);//初始化時(shí)</p&
82、gt;<p> write_ds(5,0);// 初始化時(shí)鬧鐘</p><p> write_ds(6,0);//初始化星期</p><p> write_ds(7,0);// 初始化日</p><p> write_ds(8,0);//初始化月</p><p> write_ds(9,0);// 初始化年</p
83、><p><b> }</b></p><p> 寫12C887函數(shù):</p><p> void write_ds(uchar add,uchar date)</p><p> { //寫12C887函數(shù)</p><p> dscs=0; 打開片選信號(hào)</p><
84、p><b> dsas=1;</b></p><p><b> dsds=1;</b></p><p><b> dsrw=1;</b></p><p><b> P0=add;</b></p><p> dsas=0; //下降沿鎖存地址
85、</p><p><b> dsrw=0;</b></p><p><b> P0=date;</b></p><p> dsrw=1;//上升沿鎖存數(shù)據(jù)</p><p> dsas=1;//上升沿清除地址</p><p> dscs=1;//關(guān)掉片選信號(hào)&
86、lt;/p><p><b> }</b></p><p><b> 圖3-5 寫時(shí)序圖</b></p><p> 讀12C887函數(shù):</p><p> uchar read_ds(uchar add)</p><p><b> {</b><
87、/p><p> uchar ds_date;</p><p><b> dsas=1;</b></p><p><b> dsds=1;</b></p><p><b> dsrw=1;</b></p><p> dscs=0;打開片選信號(hào)<
88、/p><p><b> P0=add;</b></p><p> dsas=0; //下降沿鎖存地址</p><p><b> dsds=0;</b></p><p><b> P0=0xff;</b></p><p> ds_date=P0;&l
89、t;/p><p> dsds=1; //下降沿鎖存地址</p><p> dsas=1;//上升沿清除地址</p><p> dscs=1;//關(guān)掉片選信號(hào)</p><p> return ds_date;</p><p><b> }</b></p><p><
90、;b> 圖3-6 讀時(shí)序圖</b></p><p><b> 結(jié)束語(yǔ)</b></p><p> 本文是一篇關(guān)于用單片機(jī)實(shí)現(xiàn)萬(wàn)年歷的論文,設(shè)計(jì)中使用到了AT89s52和1602液晶顯示屏。在設(shè)計(jì)過(guò)程中我通過(guò)在網(wǎng)上和圖書館查閱資料,收集了關(guān)于單片機(jī)和液晶顯示方面的資料,通過(guò)對(duì)這些資料的學(xué)習(xí),我了解了單片機(jī)的基本結(jié)構(gòu),使用和單片機(jī)在生活和生產(chǎn)中所發(fā)揮
91、的作用;液晶顯示的原理和使用。本次畢業(yè)設(shè)計(jì)除了讓我回顧以前學(xué)過(guò)的知識(shí)外,也使我學(xué)習(xí)到了新的東西。這次畢業(yè)設(shè)計(jì)可以說(shuō)是對(duì)四年的大學(xué)學(xué)習(xí)的總結(jié)。</p><p> 本次畢業(yè)設(shè)計(jì)完成的主要工作和任務(wù)如下:對(duì)設(shè)計(jì)方案的理論研究,單片機(jī)的合理選型,硬件電路的設(shè)計(jì),電路板的制作,元器件的焊接,軟件的編寫和調(diào)試以及畢業(yè)論文的制作。</p><p> 通過(guò)對(duì)本課題的研究我有以下幾個(gè)方面的收獲:<
92、/p><p> (1)學(xué)習(xí)與掌握了單片機(jī)的基本原理及其各種應(yīng)用,對(duì)它的各種硬件接口與軟件設(shè)計(jì)方法有較深入的認(rèn)識(shí)。</p><p> (2)對(duì)液晶顯示有了一定的認(rèn)識(shí),能夠初步掌握液晶顯示的原理。</p><p> ?。?)通過(guò)對(duì)電路原理圖、pcb圖的繪制,電路板的制作掌握了對(duì)Altium Designer Winter 09和。</p><p>
93、; (4)本設(shè)計(jì)重點(diǎn)在于軟件的設(shè)計(jì),因此在設(shè)計(jì)過(guò)程中使自己在大學(xué)學(xué)到的C語(yǔ)言知識(shí)得到了鞏固,同時(shí)提高了解決實(shí)際問(wèn)題的能力。</p><p> 由于時(shí)間倉(cāng)促,再加上作者水平有限,本文不免有很多錯(cuò)誤,懇請(qǐng)各位讀者批評(píng)指正。</p><p><b> 致謝詞</b></p><p> 這篇論文的完成在一定意義上也代表我大學(xué)生涯的結(jié)束,在此我要
94、感謝學(xué)校為我?guī)?lái)的一切,沒(méi)有學(xué)校為我提供的平臺(tái),我也不可能順利地完成大學(xué)的學(xué)習(xí),更不可能完成本次畢業(yè)設(shè)計(jì)。</p><p> 這篇畢業(yè)論文是在我的導(dǎo)師張祥莉老師的親切關(guān)懷和悉心指導(dǎo)下完成的。沒(méi)有張老師的指導(dǎo)我想我不可能順利地完成此次畢業(yè)設(shè)計(jì),在此我想對(duì)他表示由衷的感謝。</p><p> 最后 ,我想表達(dá)對(duì)所有任職老師的感謝,是你們?cè)谶@大學(xué)四年時(shí)間里給了我們知識(shí)和力量,給了我們踏足社會(huì)
95、的能力。</p><p> 在論文即將完成之際,我的心情無(wú)法平靜,從不知道畢業(yè)論文怎么寫,到開始進(jìn)入課題到論文的完成,再到順利完成了畢業(yè)論文答辯稿,有很多老師,同學(xué),朋友向我提供的幫助,在這里請(qǐng)接受我誠(chéng)摯的謝意!</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 余錫存,曹國(guó)華,單片機(jī)原理及接口技術(shù). 西安:西安電子科
96、技大學(xué)出版社,2000</p><p> [2] 郭天祥,新概念51單片機(jī)c語(yǔ)言教程。北京:電子工業(yè)出版社,2009</p><p> [3] 楊拴科, 模擬電子技術(shù)基礎(chǔ). 北京:高等教育出版社, 2003。</p><p> [4] 李光才,樓然笛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo). 北京:北京航空航天大學(xué)出版社,2004。</p>
97、<p> [6] 楊立民,單片機(jī)技術(shù)及應(yīng)用.西安:西安電子科技大學(xué)出版社,1997.9~12。</p><p> [7] 馬忠梅,單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1997。</p><p> [8]王天曦 ,李洪儒.電子技術(shù)工藝基礎(chǔ).北京:清華大學(xué)出版社,2000。</p><p> [9] 弘道工作室,融會(huì)貫通 Prot
98、el99電路設(shè)計(jì).北京: 人民交通出版設(shè),2000。</p><p> [10] 張偉,王力,趙晶,ProtelDXP 入門與提高.北京:人民郵電出版社, 2003.2。</p><p> [11] 李廣弟,朱月秀,王秀山.單片機(jī)基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社, 2001.7。</p><p> [12] 譚浩
99、強(qiáng),C程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,2003。 </p><p> [13] 付家才,單片機(jī)控制工程實(shí)踐技術(shù)[M]. 北京:化學(xué)工業(yè)出版社,2004.3。</p><p> [14] W.Simpson,Editor,The Point-to-Point Protocol, RFC1661 [EB/OL]. July 1994。</p><
100、;p> [15] WAVECOM,AT Commands Interface Guide, Revision 002[EB/OL].6th November 2003。</p><p><b> 附件1</b></p><p><b> 程序頭文件</b></p><p> #define uchar uns
101、igned char</p><p> #define uint unsigned int</p><p> sbit dsirq=P3^3;</p><p> sbit dsds=P1^7;</p><p> sbit dsrw=P1^6;</p><p> sbit dsas=P1^5;</p>
102、;<p> sbit dscs=P1^4;</p><p> sbit lcden=P2^6;</p><p> sbit rs=P2^5;</p><p> sbit beep=P2^4;</p><p> sbit s1=P1^0;</p><p> sbit s2=P1^1;</p
103、><p> sbit s3=P1^2;</p><p> sbit s4=P1^3;</p><p> sbit ds=P2^3;</p><p> uint temp;//定義整型的溫度數(shù)據(jù)</p><p> float f_temp;//定義浮點(diǎn)型的溫度數(shù)</p><p> bit
104、flag1,flag_ri;</p><p> uchar count,s1num,flag,t0_num;</p><p> char miao,shi,fen,year,month,day,week,amiao,afen,ashi;</p><p> uchar code table[]=" 20 - - ";</p
105、><p> uchar code table1[]=" : : ";</p><p> void write_ds(uchar,uchar);</p><p> void set_alarm(uchar,uchar,uchar);</p><p> void read_alarm();</
106、p><p> uchar read_ds(uchar);</p><p> void set_time();</p><p><b> 附件程序主體</b></p><p> #include<reg52.h></p><p> #include<stdio.h>&l
107、t;/p><p> #include<difine.h></p><p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x-
108、-)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p><b> void di()</b></p><p><b> {</b></p><p><b> beep
109、=0;</b></p><p> delay(100);</p><p><b> beep=1;</b></p><p><b> }</b></p><p> void write_com(uchar com)</p><p><b> {
110、</b></p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5);</b></p>&
111、lt;p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_date(
112、uchar date)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p><b> P0=date;</b></p><p&g
113、t;<b> delay(3);</b></p><p><b> lcden=1;</b></p><p><b> delay(3);</b></p><p><b> lcden=0;</b></p><p><b> }<
114、;/b></p><p> void init()</p><p><b> {</b></p><p> uchar num;</p><p><b> EA=1;</b></p><p><b> EX1=1;</b></p&g
115、t;<p><b> IT1=1;</b></p><p><b> flag1=0;</b></p><p><b> t0_num=0;</b></p><p><b> s1num=0;</b></p><p><b>
116、; week=1;</b></p><p><b> lcden=0;</b></p><p> write_ds(0x0A,0x20);</p><p> write_ds(0x0B,0x26);</p><p> set_time();</p><p> write_c
117、om(0x38);</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p> write_com(0x01);</p><p> write_com(0x80);</p><p> for(num=0;num<15;num++)</p
118、><p><b> {</b></p><p> write_date(table[num]);</p><p><b> delay(1);</b></p><p><b> }</b></p><p> write_com(0x80+0x40)
119、;</p><p> for(num=0;num<16;num++)</p><p><b> {</b></p><p> write_date(table1[num]);</p><p><b> delay(1);</b></p><p><b>
120、; }</b></p><p><b> }</b></p><p> void dsreset(void)//ds18b20復(fù)位,初始化函數(shù)</p><p><b> {</b></p><p><b> uint i;</b></p>&
121、lt;p><b> ds=0;</b></p><p><b> i=103;</b></p><p> while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i=4;</b></
122、p><p> while(i>0)i--;</p><p><b> }</b></p><p> bit tempreadbit(void)//讀一位數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p><b> uint i;</b&
123、gt;</p><p><b> bit dat;</b></p><p><b> ds=0;i++;</b></p><p> ds=1;i++;i++;//i++起延時(shí)作用</p><p><b> dat=ds;</b></p><p>
124、 i=8;while(i>0)i--;</p><p> return(dat);</p><p><b> }</b></p><p> uchar tempread(void)</p><p><b> {</b></p><p> uchar i,j,
125、dat;</p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tempreadbit();</p><p> dat=(j<<7)|(da
126、t>>1);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void tempwritebyte(uchar dat)//向ds18b20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)</p><
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時(shí)鐘畢業(yè)設(shè)計(jì)論文
- 電子時(shí)鐘——畢業(yè)設(shè)計(jì)論文
- 電子時(shí)鐘——畢業(yè)設(shè)計(jì)論文
- 電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 秒表電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 數(shù)字電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 數(shù)字顯示電子時(shí)鐘畢業(yè)設(shè)計(jì)論文(修訂)
- 畢業(yè)設(shè)計(jì)論文----單片機(jī)電子時(shí)鐘
- 單片機(jī)電子時(shí)鐘 畢業(yè)設(shè)計(jì)論文
- 數(shù)字顯示電子時(shí)鐘畢業(yè)設(shè)計(jì)論文(修訂)
- 畢業(yè)論文--電子時(shí)鐘設(shè)計(jì)
- 電子時(shí)鐘設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文-----電子時(shí)鐘設(shè)計(jì)
- 電子時(shí)鐘設(shè)計(jì)畢業(yè)論文
- 畢業(yè)設(shè)計(jì)(論文) 單片機(jī)電子時(shí)鐘設(shè)計(jì)
- 電子畢業(yè)設(shè)計(jì)---多功能電子時(shí)鐘
- 數(shù)字顯示電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 多功能電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 電子時(shí)鐘設(shè)計(jì)論文
- 電子時(shí)鐘設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】
評(píng)論
0/150
提交評(píng)論