電子時鐘畢業(yè)設(shè)計論文_第1頁
已閱讀1頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  電子萬年歷是一種非常廣泛日常計時工具,對現(xiàn)代社會越來越流行。它可以對年、月、日、周日、時、分、秒進(jìn)行計時,還具有閏年補償?shù)榷喾N功能。本系統(tǒng)選用DALLAS公司生產(chǎn)的日歷時鐘芯片DS12C887來作為實時時鐘芯片,為本系統(tǒng)提供詳細(xì)的年、月、日、星期和小時、分鐘等時間信息。數(shù)字萬年歷采用直觀數(shù)字顯示,可以同時顯示年、月、日、周日、

2、時、分、秒和溫度等信息,還具有定時和時間校準(zhǔn)等功能。該電路采用AT89S52單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p>  本系統(tǒng)硬件部分由AT89S52單片機、DS12C887時鐘芯片、1062液晶顯示器、DS18B20溫度測量、鍵盤、蜂鳴器系統(tǒng)等部分構(gòu)成。軟件部分在keil環(huán)境下用C51語言編寫,包括時間設(shè)置、時間顯示、定時設(shè)置、定時鬧鐘、溫度顯示。</p&

3、gt;<p>  沒有良好的基礎(chǔ)知識和實踐經(jīng)驗會受到很大限制,每項功能實現(xiàn)時需要那種硬件,程序該如何編寫,算法如何實現(xiàn)等,沒有一定的基礎(chǔ)就不可能很好的實現(xiàn)。在編寫程序過程中發(fā)現(xiàn)以現(xiàn)有的相關(guān)知識要獨自完成編寫任務(wù)困難重重,在老師和同學(xué)的幫助下才完成了程序部分的編寫。</p><p>  文章后附有電路原理圖、程序清單,以供讀者參考。因水平有限,難免有疏落不足之處,敬請老師和同學(xué)能給與批評指正。<

4、/p><p>  關(guān)鍵詞:時鐘芯片DS12C887;溫度采集DS18B20;單片機AT89S52;液晶顯示1602</p><p><b>  目 錄</b></p><p><b>  第一章 概述6</b></p><p>  §1.1實時時鐘研究的背景及意義6</p>

5、<p>  §1.2論文主要研究內(nèi)容6</p><p>  1.2.1 系統(tǒng)設(shè)計實現(xiàn)的目標(biāo)6</p><p>  1.2.2 系統(tǒng)的總體設(shè)計6</p><p>  第二章 硬件電路設(shè)計8</p><p>  §2.1單片機最小系統(tǒng)8</p><p>  §2.2時鐘芯

6、片電路8</p><p>  2.2.1 時鐘芯片引腳介紹8</p><p>  2.2.2時鐘芯片DS12C887,其內(nèi)存空間介紹10</p><p>  2.2.3 4個控制寄存器介紹10</p><p>  §2.4溫度采集電路設(shè)計12</p><p>  2.4.1 DS18B20的主要特性

7、12</p><p>  2.4.2 DS1820的基本操作指令12</p><p>  2.4.3 溫度測量的步驟13</p><p>  2.4.4 DS18B20的操作時序13</p><p>  §2.5 1602LCD液晶顯示屏15</p><p>  2.5.1 1602字符型LCD簡

8、介15</p><p>  2.5.2 1602引腳功能說明15</p><p>  2.5.3 1602LCD的指令說明及時序15</p><p>  2.5.4 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表17</p><p>  2.5.5 1602LCD的一般初始化(復(fù)位)過程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è)計22</p><p>  §3.1 主程序流程

10、22</p><p>  §3.2 時間設(shè)置子程序流程22</p><p>  §3.3 鬧鐘設(shè)置子程序流程23</p><p>  §3.4 程序設(shè)計問題24</p><p>  3.4.1 按鍵抖動問題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è)置25</p><p><b>  結(jié)束語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實時時鐘研究的背景及意義</p><p>  在現(xiàn)實我們生活中每個人都可能有自己的時鐘,光陰在永不停息的

13、流逝,有了時鐘人們就能隨著時間有計劃的過著每一天。然而現(xiàn)在絕大部分的時鐘有的需要不斷地跟換電池,有些時鐘需要外接電源,如果一旦電池沒電或者外接電源無法供電,時鐘就會停止計時了。而美國DALLAS 公司的新型時鐘日歷芯片DS12C887就能解決這一問題。該器件能提供實時時鐘(RTC)/日歷、定時鬧鐘。少于31天的月份,月末日期可自動調(diào)整,其中包括閏年補償。該器件還可以工作于24小時貨代/PM指示的12小時格式。一個精密的溫度補償電路用來監(jiān)

14、視Vcc的狀態(tài)。如果檢測到主電源故障,該器件可以自動切換到備用電源供電。Ds12c887集成了DS12C885l裸片、石英晶體和電池。DS12C885的充電電路被禁止。在沒有提供Vcc的+25℃環(huán)境下,電池容量可為振蕩器和寄存器供電長達(dá)10年之久。</p><p>  本時鐘還具有環(huán)保、走時無噪音、低功耗等非實時時鐘不具有的功能。該實時時鐘不但可以作為家用,而且更可以在公共場合使用,如車站、碼頭、商場等場所。&l

15、t;/p><p>  §1.2論文主要研究內(nèi)容</p><p>  1.2.1 系統(tǒng)設(shè)計實現(xiàn)的目標(biāo)</p><p>  本文是以實時時鐘芯片DS12C887和AT89S52單片機為主要研究對象,著重進(jìn)行51單片機控制系統(tǒng)的設(shè)計研究和如何讀取DS12C887內(nèi)部時鐘信息的研究。以及運用18B20進(jìn)行實時溫度檢測。主要內(nèi)容包括:</p><p&

16、gt;<b>  實時溫度顯示;</b></p><p>  年月日星期時分秒顯示;</p><p>  年月日星期時分秒調(diào)整;</p><p>  鬧鐘定時小時分鐘和秒;</p><p>  1.2.2 系統(tǒng)的總體設(shè)計</p><p>  采用AT89S52作為主控單片機,時鐘模塊選用DS12C

17、887作為時鐘芯片,溫度模塊選用DS18B20作為溫度傳感器,顯示模塊選用LCD1602,設(shè)置部分選用按鍵電路。</p><p>  AT89S52與MCS-51單片機產(chǎn)品兼容 、8K字節(jié)在系統(tǒng)可編程Flash存儲器、 1000次擦寫周期、 全靜態(tài)操作:0Hz~33Hz 、 三級加密程序存儲器 、 32個可編程I/O口線 、三個16位定時器/計數(shù)器 八個中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、

18、掉電后中斷可喚醒 、看門狗定時器 、雙數(shù)據(jù)指針 、掉電標(biāo)識符 。</p><p>  DS12C887 實時時鐘芯片功能豐富,可以用來直接代替IBM PC 上的時鐘日歷芯片DS12887,同時,它的管腳也和MC146818B、DS12887 相兼容。由于DS12C887 能夠自動產(chǎn)生世紀(jì)、年、月、日、時、分、秒等時間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決子“千年”問題;DS12C887 中自帶有鋰電

19、池,外部掉電時,其內(nèi)部時間信息還能夠保持10 年之久;對于一天內(nèi)的時間記錄,有12 小時制和24 小時制兩種模式。用戶還可對DS12C887 進(jìn)行編程以實現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進(jìn)行屏蔽。</p><p>  DS18B20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。可編程的分辨率為9~12位 溫度轉(zhuǎn)換為12位數(shù)字

20、格式最大值為750毫秒 用戶可定義的非易失性溫度報警設(shè)置。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。采用一線通信接口。</p><p>  該系統(tǒng)的系統(tǒng)框圖如圖1.1示:</p><p><b>  圖1-1系統(tǒng)框圖</b></p><p>  第二章 硬件電路設(shè)計&l

21、t;/p><p>  §2.1單片機最小系統(tǒng)</p><p>  本系統(tǒng)以AT89S52單片機為核心,本系統(tǒng)選用11.0592MHZ的晶振,,使得單片機有合理的運行速度。起振電容30pF對振蕩器的頻率高低、振蕩器的穩(wěn)定性和起振的快速性影響較合適,復(fù)位電路為按鍵高電平復(fù)位。</p><p>  AT89S52單片機最小系統(tǒng)電路設(shè)計如圖2.1所示。</p&g

22、t;<p>  圖2-1 單片機最小系統(tǒng)</p><p>  §2.2時鐘芯片電路</p><p>  2.2.1 時鐘芯片引腳介紹</p><p>  時鐘芯片DS12C887,其引腳分布圖如下所示</p><p>  圖2-2時鐘引腳分布</p><p>  MOT (1腳) :總線時序模式

23、選擇腳。接高電平,選擇MOTOROLA總線時;序;接低電平或懸空,擇選擇INTEL總線時序。</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、地址鎖存輸入腳。下降沿時,地址被鎖存,緊接著的上升沿來時地址被清除。</p><p>  R/W(15腳):讀/寫輸入腳。在選擇MOTOROLA總線時序模式時,此引腳用于指示當(dāng)前的讀寫周期,高電平指示當(dāng)前為讀周期,低電平指示當(dāng)前為寫周期;選擇INTEL中線時序模式時,此引腳為低電平有效的輸入腳,相當(dāng)于通用RAM的寫使能信號(/WE)</p><p>  DS(17腳):選擇MOTOROLA

25、總線時序模式時,此引腳為數(shù)據(jù)鎖存腳;選擇INTEL總線時序模式時,此引腳為讀輸入腳,低電平有效,相當(dāng)于典型的內(nèi)存的輸出使能信號(/OE)</p><p>  RESET(18腳):復(fù)位腳,低電平有效,復(fù)位不會影響到時鐘、日歷和RAM。</p><p>  IRQ(19腳):中斷申請輸出腳,低電平有效,可作為微處理器的中斷輸入。</p><p>  SQW(23腳):

26、方波信號輸出腳??赏ㄟ^設(shè)置寄存器位SQWE關(guān)斷此信號輸出,此信號的輸出頻率也可通過對芯片內(nèi)部的寄存器編程予以改變。</p><p>  VCC(24腳):+5v電源端。</p><p>  2.2.2時鐘芯片DS12C887,其內(nèi)存空間介紹</p><p>  圖2-3 時鐘、日歷和鬧鐘數(shù)據(jù)模式——BCD模式(DM=0)</p><p>  

27、圖2-4 時鐘、日歷和鬧鐘數(shù)據(jù)模式——二進(jìn)制模式(DM=1)</p><p>  2.2.3 4個控制寄存器介紹</p><p>  DS12C887有4個控制寄存器,在任何時間都可以進(jìn)行訪問,即使處于更新周期。</p><p>  寄存器A字節(jié)的內(nèi)容如下。</p><p>  MSB

28、 LSB</p><p>  UIP: 更新標(biāo)志位。為只讀位且不受復(fù)位操作的影響,為1時,表示即將發(fā)生的數(shù)據(jù)更新;為0時,表示至少244US不會更新數(shù)據(jù)。當(dāng)UIP為0時,可以獲得所有時鐘、日歷、鬧鐘信息。將寄存器B中的SET位置1可以限制任何數(shù)據(jù)更新操作,并且清除UIP位。</p><p>  DV2、DV1、DV0:此3位為010時將

29、打開晶振,并開始計時。RES3、RES2、RES1、RES0:用于設(shè)置周期性中斷產(chǎn)生的時間周期和輸出方波的頻率。</p><p>  寄存器B字節(jié)的內(nèi)容如下。</p><p>  MSB LSB</p><p>  SET:設(shè)置位,可讀寫,不受復(fù)位操作影響

30、。為0時,不處于設(shè)置狀態(tài),芯片進(jìn)行正常時間數(shù)據(jù)更新;為1時,抑制數(shù)據(jù)更新,可以通過程序設(shè)定時間和日歷信息。</p><p>  PIE:周期性中斷使能位,可讀寫,復(fù)位時清除此位。為1時,允許寄存器C中的周期中斷標(biāo)志位PF,驅(qū)動/IRQ引腳為低產(chǎn)生中斷信號輸出,中斷信號產(chǎn)生的周期由RS3~RE0決定。</p><p>  AIE:鬧鐘中斷使能位,可讀寫。為1時,允許寄存器C中的鬧鐘中斷標(biāo)志位

31、AF、鬧鐘發(fā)生時就會通過/IRQ引腳產(chǎn)生中斷輸出。</p><p>  UIE:數(shù)據(jù)更新結(jié)束中斷使能位,可讀寫。復(fù)位或者SET位為1時清除此位。為1時允許寄存器C中的更新結(jié)束標(biāo)志UF,更新結(jié)束時就會通過/IRQ引腳產(chǎn)生中斷輸出。</p><p>  SQWE:方波使能位,可讀寫,復(fù)位時清除此位。為0時,SQW引腳保持低電平;為1時,SQW引腳輸出方波信號,其頻率由RS3~RS0決定。<

32、;/p><p>  DM:數(shù)據(jù)模式位,可讀寫,不受復(fù)位操作影響。為0時,設(shè)置時間、日歷信息為二進(jìn)制數(shù)據(jù);為1時,設(shè)置為BCD碼數(shù)據(jù)。</p><p>  24/12:時間模式設(shè)置為,可讀寫,不受復(fù)位操作影響。為0時,設(shè)置為12小時模式;為1時,設(shè)置為24小時模式。</p><p>  DSE:為1時,會引起兩次特殊的時間更新;4月的第一個星期日凌晨1:59:59會直接更

33、新到3:00:00,10月的最后一個星期日凌晨1:59:59會直接更新到1:00:00;為0時,時間信息正常更新,此位可讀寫,不受復(fù)位操作影響。</p><p>  寄存器C字節(jié)內(nèi)容如下。</p><p>  MSB LSB</p><p>  IQRF:

34、中斷申請標(biāo)志位。為1時,/IRQ引腳為低,產(chǎn)生中斷申請。當(dāng)PF、PIE為1時或者AF、ATE為1或者UF、UIE為1時,此位為1,否則置0.</p><p>  PF:中期中斷標(biāo)志位。為1時,它是只讀位,和PIE位狀態(tài)無關(guān),由復(fù)位操作或者寄存器C操作清除。</p><p>  AF:鬧鐘中斷標(biāo)志位。為1時,表示當(dāng)前時間和鬧鐘設(shè)定時間一至,由復(fù)位操作或讀寄存器C操作清除。</p>

35、<p>  UF:數(shù)據(jù)更新結(jié)束中斷標(biāo)志位。每個更新周期后此位都會置1,當(dāng)UIE位位置1時,UF若為1就會引起IRQF置1,將驅(qū)動/IRQ引腳為低電平,申請中斷。此位由復(fù)位操作或讀寄存器C操作清除。</p><p>  寄存器D字節(jié)的內(nèi)容如下。</p><p>  MSB

36、 LSB</p><p>  VRT;RAM和時間有效位。用于指示和VBAT引腳連接的電池狀態(tài)。此位不可寫,也不受操作為影響,正常情況下讀取時總?cè)?,如果出現(xiàn)讀取為0的情況,則表示電池耗盡,時間數(shù)據(jù)和RAM中的數(shù)據(jù)就會出現(xiàn)問題。</p><p>  芯片DS12CR887的113字節(jié)普通RAM空間為非易失性RAM空間,他不專門用于某些特別功能,而是可以在未處理器程序中作為非易失性內(nèi)存

37、空間使用。</p><p>  §2.4溫度采集電路設(shè)計</p><p>  2.4.1 DS18B20的主要特性</p><p>  適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。②獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。③DS18B20支持多點組網(wǎng)

38、功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫④DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。⑤溫范圍-55℃~+125℃,在-10~+85℃時精度為0.5℃。⑥可編程的分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫。⑦在9位分辨率時最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時最多在750

39、ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。⑧測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。</p><p>  ⑨負(fù)壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。</p><p>  2.4.2 DS1820的基本操作指令</p><p>  DS1820的操作指令分為

40、ROM操作命令和存儲器操作命令。</p><p> ?。?)、ROM操作命令及其含義</p><p>  Read ROM指令代碼(33h):如果只有一片DS1820,可用此命令讀出其序列號,若在線DS1820多于一個,將發(fā)生沖突。</p><p>  Match ROM指令代碼(55h):多個DS1820在線時,可用此命令匹配一個給定序列號的DS1820,此后的命

41、令就針對該DS1820。</p><p>  Skip ROM指令代碼(CCh):此命令執(zhí)行后的存儲器操作將針對在線的所有DS1820。</p><p>  Search ROM指令代碼(F0h):用以讀出在線的DS1820的序列號。</p><p>  Alarm Search指令代碼(ECh):當(dāng)溫度值高于TH或低于TL中的數(shù)值時,此命令可以讀出報警的DS182

42、0。 </p><p> ?。?)、存儲器操作指令代碼及其含義 </p><p>  Write Scratchpad指令代碼(4Eh):寫兩個字節(jié)的數(shù)據(jù)到溫度寄存器。</p><p>  Read Scratchpad指令代碼(BEh):讀取溫度寄存器的溫度值。</p><p>  Copy Scratchpad指令代碼

43、(48h):將溫度寄存器的數(shù)值拷貝到EERAM中,保證溫度值不丟失。</p><p>  Convert T指令代碼(44h):啟動在線DS1280做溫度A/D轉(zhuǎn)換。</p><p>  Recall E2指令代碼(B8h):將EERAM中的數(shù)值拷貝到溫度寄存器中。</p><p>  Read Power Supply指令代碼(B4h):在本命令送到DS1280之

44、后的每一個讀數(shù)據(jù)間隙,指出電源模式:“0”為寄生電源;“1”為外部電源。</p><p>  2.4.3 溫度測量的步驟</p><p>  (1).Read ROM(33 h),每次對DS1820進(jìn)行操作之前都要對它進(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)然,單點測溫時可以使用Skip ROM(CCh)指令來跳過這一步。</p><p>  (4).Convert T(44h),發(fā)完指令后應(yīng)查詢總線上的電平,當(dāng)電平位高時溫度轉(zhuǎn)換完成。</p><p>

46、  (5).Read Scratchpad(BEh),將讀指令發(fā)出后,就可從總線上讀得表示溫度的2字節(jié)二進(jìn)制數(shù)。</p><p>  2.4.4 DS18B20的操作時序</p><p>  由于采用單總線數(shù)據(jù)傳輸方式,DS18B20的數(shù)據(jù)I/O均由同一條線完成,因此,對讀寫的操作時序要求嚴(yán)格。它的各種時序如圖2-5所示</p><p>  圖2-5 DS18B2

47、0的操作時序</p><p>  為了保證DS18B20的嚴(yán)格I/O時序。需要做較精確的延時。在DS18B20操作中,用到的延時有15μS,90μS,270μS,540μS等。因這些延時均為15μS的整倍,因此在程序中可以編寫一個以15μS為基準(zhǔn)的延時函數(shù)。</p><p>  圖2-6溫度采集電路</p><p>  §2.5 1602LCD液晶顯示屏&

48、lt;/p><p>  2.5.1 1602字符型LCD簡介</p><p>  字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,本設(shè)計采用16列*2行的字符型LCD1602帶背光的液晶顯示屏。</p><p>  1602LCD主要技術(shù)參數(shù):</p><p>  顯示容量:16×2個字符</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引腳功能說明</p><p>  各引腳接

50、口說明如表所示:</p><p><b>  表2-1</b></p><p>  表2-1:引腳接口說明:</p><p>  第1腳:VSS為地電源。</p><p>  第2腳:VDD接5V正電源。</p><p>  第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度

51、最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。</p><p>  第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。</p><p>  第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時

52、可以寫入數(shù)據(jù)。</p><p>  第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p>  第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p>  第15腳:背光源正極。</p><p>  第16腳:背光源負(fù)極。</p><p>  2.5.3 1602LCD的指令說明及時

53、序</p><p>  1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2-2所示:</p><p><b>  表2-2</b></p><p>  表2-2字符控制命令說明:</p><p>  1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明: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)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。</p><p>  指令4:顯示開關(guān)控制。 D:控制整體

55、顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。</p><p>  指令5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)。</p><p>  指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低

56、電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。</p><p>  指令7:字符發(fā)生器RAM地址設(shè)置。</p><p>  指令8:DDRAM地址設(shè)置。</p><p>  指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。</p><p><b>  指令

57、10:寫數(shù)據(jù)。</b></p><p><b>  指令11:讀數(shù)據(jù)。</b></p><p><b>  芯片時序表如下:</b></p><p><b>  表2-3</b></p><p><b>  基本操作時序表</b></p&

58、gt;<p>  讀寫操作時序如圖2-7和2-8所示:</p><p><b>  圖2-7讀操作時序</b></p><p>  圖2-8 寫操作時序</p><p>  2.5.4 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表</p><p>  液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要

59、確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖2-9是1602的內(nèi)部顯示地址。</p><p>  圖2-9液晶內(nèi)部顯示地址</p><p>  例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)

60、據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。</p><p>  在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。</p><p>  1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如圖10-58所示,

61、這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。</p><p>  圖2-10 字符代碼與圖形對應(yīng)圖</p><p>  2.5.5 1602LCD的一般初始化(復(fù)位)過程</p><p

62、><b>  延時15mS</b></p><p>  寫指令38H(不檢測忙信號)</p><p><b>  延時5mS</b></p><p>  寫指令38H(不檢測忙信號)</p><p><b>  延時5mS</b></p><p>

63、  寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號</p><p>  寫指令38H:顯示模式設(shè)置</p><p>  寫指令08H:顯示關(guān)閉</p><p>  寫指令01H:顯示清屏</p><p>  寫指令06H:顯示光標(biāo)移動設(shè)置</p><p>  寫指令0CH:顯示開及光標(biāo)設(shè)置&

64、lt;/p><p>  2.4.6 1602LCD的電路連接</p><p>  液晶5端為讀/寫選擇端,因為我們不從液晶中讀取數(shù)據(jù),只向其寫入命令和顯示數(shù)據(jù),因此此端始終選擇為寫狀態(tài),即低電平接地。液晶6端為使能信號,是操作時必須的信號。其電路如圖2-11所示:</p><p>  圖2-11 1602的電路連接</p><p>  §

65、;2.6 蜂鳴器鬧鈴電路</p><p>  當(dāng)單片機給蜂鳴器一個低電平時,三極管導(dǎo)通驅(qū)動蜂鳴器發(fā)出聲音作為定時鬧鈴,其電路圖如圖2-12所示:</p><p>  圖2-12 蜂鳴器連接電路</p><p>  §2.7 按鍵調(diào)整電路</p><p>  系統(tǒng)四個獨立鍵盤均采用查詢方式,S2用于設(shè)置年、月、日、時、分、秒、星期的數(shù)

66、值加,以及鬧鐘開,S3用于設(shè)置年、月、日、時、分、秒、星期的數(shù)值減以及鬧鐘關(guān),s1用于具體設(shè)置時鐘位的切換,s4鍵用于設(shè)置鬧鐘。其電路圖如2-13所示:</p><p>  圖2-13 按鍵電路連接</p><p><b>  §2.8 電源模塊</b></p><p>  電子鐘的電源為5伏直流電源,本設(shè)計中我使用的是5V的充電電池

67、,電源模塊的原理圖如圖2-15所示:</p><p><b>  圖2-14電源模塊</b></p><p>  第三章 軟件部分設(shè)計</p><p>  本系統(tǒng)主要包括五個模塊編程:</p><p><b>  蜂鳴器鬧鈴響編程</b></p><p>  時鐘芯片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鍵按下時,執(zhí)行時鐘設(shè)置,當(dāng)有S4鍵按下時,則進(jìn)入鬧鐘設(shè)置,無論是時鐘還是鬧鐘,設(shè)置完后退出,溫度、時鐘恢復(fù)實時顯示。主程序流程圖如圖3-1所示:</p><p>  圖3-1主程序流程圖</p><p>  §3.2 時間設(shè)置子程序流程</p><p>  通過單片機判斷S1按下的次數(shù)來設(shè)置,由s1num標(biāo)志位來記錄次數(shù),用if語句判斷執(zhí)行命令。系統(tǒng)程

70、序不斷掃面鍵盤,當(dāng)s1鍵按下后產(chǎn)生一個低電平,即s1num加一。在調(diào)節(jié)時間之前首先進(jìn)行各個變量初始化,及設(shè)置起始時間,同時為讀取數(shù)據(jù)作準(zhǔn)備。當(dāng)s1=1時進(jìn)入秒的設(shè)置,地址指針指向miao顯示位置處,通過兩個if語句分別循環(huán)控制顯示秒數(shù)的加和減。當(dāng)s1=2時,地址指針指向fen顯示位置處,變量最大值為59。當(dāng)s1=3時,地址指針指向shi顯示位置處,變量最大值設(shè)為23。當(dāng)s1=4時,地址指針指向week顯示位置處,最大值設(shè)為7,1至7分別

71、用MON、TUE、WED、THU 、FRI、SAT、SUN字符串顯示。隨著s2、s3值的的變化顯示不同的字符串。當(dāng)s1=5時,地址指針指向day顯示位置,變量最大值為31。當(dāng)s1=6時,地址指針指向month顯示位置,變量最大值為12。</p><p>  當(dāng)s1=7時,地址指針指向year顯示位置,最大值為99。</p><p>  圖3-2時間設(shè)置流程圖</p><

72、p>  §3.3 鬧鐘設(shè)置子程序流程</p><p>  時間設(shè)置程序流程圖如圖3-3所示。在開始時間設(shè)置之前程序會關(guān)閉全局中斷,直至設(shè)置結(jié)束,中斷又會重新開啟,進(jìn)入計時狀態(tài)。</p><p>  鬧鐘的設(shè)置時通過S1鍵的按下次數(shù)來判斷的。當(dāng)單片機檢測到S4鍵按下一次時則進(jìn)入鬧鐘設(shè)置界面,光標(biāo)并自動跳到秒設(shè)置位置,可以對秒進(jìn)行設(shè)置,當(dāng)S1鍵依次按下1、2、3次時,則分別進(jìn)入

73、鬧鐘的秒、分、時關(guān)的設(shè)置。:</p><p>  圖3-3 鬧鐘設(shè)置流程圖</p><p>  §3.4 程序設(shè)計問題</p><p>  3.4.1 按鍵抖動問題</p><p>  按鍵在按下時因為機械原因會產(chǎn)生抖動,抖動的后果就是當(dāng)按下一次按鍵時因為抖動的原因讓系統(tǒng)讀取到多次的按鍵按下的次數(shù),由此導(dǎo)致設(shè)置時出現(xiàn)錯誤。解決的方法

74、如下:當(dāng)按鍵按下時讀取按鍵鍵值,若5ms后鍵值和按下是相等,則確認(rèn)為有效按鍵,以此消除按鍵抖動帶來的問題。</p><p>  3.4.2 蜂鳴器設(shè)置</p><p>  蜂鳴器報警時,設(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點陣,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ū)懸粋€字符后地址指針加一,且光標(biāo)加一。當(dāng)寫一個字符,整屏顯示不移動。</p><p>  顯示清屏,寫入指令碼write_com(0x01)。</p><p>  寫入指令碼函數(shù)write_com()寫指令過程 :輸入:rs=0,D0-D7=指令碼,E=高脈沖</p><p&

77、gt;  寫入數(shù)據(jù)函數(shù) write_date() 寫指令過程: 輸入:rs=1,D0-D7=數(shù)據(jù),E=高脈沖</p><p>  寫入指令和數(shù)據(jù)時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)鬧鐘到點時響應(yīng)外部中1 時間到時IRQ端從高阻態(tài)轉(zhuǎn)為低電平,此時讀一次c寄存器清除IRQ端的輸出,等待下一次定時。</p>&

79、lt;p>  void exter() interrupt 2 //外部中斷1服務(wù)程序</p><p><b>  {</b></p><p>  uchar c;//進(jìn)入中斷表示鬧鐘時間到</p><p>  flag_ri=1; //設(shè)置標(biāo)志位,用以大程序中報警</p><p>  c=read_ds(0x

80、0c);//讀取12c887c寄存器表示響應(yīng)了中端</p><p><b>  }</b></p><p>  3.4.5 時鐘芯片設(shè)置</p><p>  首次上電初始化時間函數(shù):</p><p>  void set_time()</p><p>  {//首次上電初始化時間函數(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);//初始化時</p&

82、gt;<p>  write_ds(5,0);// 初始化時鬧鐘</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; 打開片選信號</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)掉片選信號&

86、lt;/p><p><b>  }</b></p><p><b>  圖3-5 寫時序圖</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;打開片選信號<

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)掉片選信號</p><p>  return ds_date;</p><p><b>  }</b></p><p><

90、;b>  圖3-6 讀時序圖</b></p><p><b>  結(jié)束語</b></p><p>  本文是一篇關(guān)于用單片機實現(xiàn)萬年歷的論文,設(shè)計中使用到了AT89s52和1602液晶顯示屏。在設(shè)計過程中我通過在網(wǎng)上和圖書館查閱資料,收集了關(guān)于單片機和液晶顯示方面的資料,通過對這些資料的學(xué)習(xí),我了解了單片機的基本結(jié)構(gòu),使用和單片機在生活和生產(chǎn)中所發(fā)揮

91、的作用;液晶顯示的原理和使用。本次畢業(yè)設(shè)計除了讓我回顧以前學(xué)過的知識外,也使我學(xué)習(xí)到了新的東西。這次畢業(yè)設(shè)計可以說是對四年的大學(xué)學(xué)習(xí)的總結(jié)。</p><p>  本次畢業(yè)設(shè)計完成的主要工作和任務(wù)如下:對設(shè)計方案的理論研究,單片機的合理選型,硬件電路的設(shè)計,電路板的制作,元器件的焊接,軟件的編寫和調(diào)試以及畢業(yè)論文的制作。</p><p>  通過對本課題的研究我有以下幾個方面的收獲:<

92、/p><p>  (1)學(xué)習(xí)與掌握了單片機的基本原理及其各種應(yīng)用,對它的各種硬件接口與軟件設(shè)計方法有較深入的認(rèn)識。</p><p>  (2)對液晶顯示有了一定的認(rèn)識,能夠初步掌握液晶顯示的原理。</p><p> ?。?)通過對電路原理圖、pcb圖的繪制,電路板的制作掌握了對Altium Designer Winter 09和。</p><p>

93、; ?。?)本設(shè)計重點在于軟件的設(shè)計,因此在設(shè)計過程中使自己在大學(xué)學(xué)到的C語言知識得到了鞏固,同時提高了解決實際問題的能力。</p><p>  由于時間倉促,再加上作者水平有限,本文不免有很多錯誤,懇請各位讀者批評指正。</p><p><b>  致謝詞</b></p><p>  這篇論文的完成在一定意義上也代表我大學(xué)生涯的結(jié)束,在此我要

94、感謝學(xué)校為我?guī)淼囊磺?,沒有學(xué)校為我提供的平臺,我也不可能順利地完成大學(xué)的學(xué)習(xí),更不可能完成本次畢業(yè)設(shè)計。</p><p>  這篇畢業(yè)論文是在我的導(dǎo)師張祥莉老師的親切關(guān)懷和悉心指導(dǎo)下完成的。沒有張老師的指導(dǎo)我想我不可能順利地完成此次畢業(yè)設(shè)計,在此我想對他表示由衷的感謝。</p><p>  最后 ,我想表達(dá)對所有任職老師的感謝,是你們在這大學(xué)四年時間里給了我們知識和力量,給了我們踏足社會

95、的能力。</p><p>  在論文即將完成之際,我的心情無法平靜,從不知道畢業(yè)論文怎么寫,到開始進(jìn)入課題到論文的完成,再到順利完成了畢業(yè)論文答辯稿,有很多老師,同學(xué),朋友向我提供的幫助,在這里請接受我誠摯的謝意!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 余錫存,曹國華,單片機原理及接口技術(shù). 西安:西安電子科

96、技大學(xué)出版社,2000</p><p>  [2] 郭天祥,新概念51單片機c語言教程。北京:電子工業(yè)出版社,2009</p><p>  [3] 楊拴科, 模擬電子技術(shù)基礎(chǔ). 北京:高等教育出版社, 2003。</p><p>  [4] 李光才,樓然笛.單片機課程設(shè)計實例指導(dǎo). 北京:北京航空航天大學(xué)出版社,2004。</p>

97、<p>  [6] 楊立民,單片機技術(shù)及應(yīng)用.西安:西安電子科技大學(xué)出版社,1997.9~12。</p><p>  [7] 馬忠梅,單片機的C語言應(yīng)用程序設(shè)計.北京:北京航空航天大學(xué)出版社,1997。</p><p>  [8]王天曦 ,李洪儒.電子技術(shù)工藝基礎(chǔ).北京:清華大學(xué)出版社,2000。</p><p>  [9] 弘道工作室,融會貫通 Prot

98、el99電路設(shè)計.北京: 人民交通出版設(shè),2000。</p><p>  [10] 張偉,王力,趙晶,ProtelDXP 入門與提高.北京:人民郵電出版社, 2003.2。</p><p>  [11] 李廣弟,朱月秀,王秀山.單片機基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社,    2001.7。</p><p>  [12] 譚浩

99、強,C程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,2003。 </p><p>  [13] 付家才,單片機控制工程實踐技術(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;//定義浮點型的溫度數(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++起延時作用</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寫一個字節(jié)數(shù)據(jù)函數(shù)</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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論