單片機課程設計報告(萬年歷)_第1頁
已閱讀1頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  一、摘要··························

2、3;····································&#

3、183;·········2</p><p>  二、設計任務.······················

4、;····································

5、83;·········4</p><p>  三、總體方案設計與論證·····················&#

6、183;····································

7、·4</p><p>  1、液晶顯示模塊······························&#

8、183;······························4</p><p>  2、實時時間計算模塊&#

9、183;····································

10、····················5</p><p>  3、實時環(huán)境溫度采集模塊··········

11、3;····································&#

12、183;·····5</p><p>  4、報警模塊··························

13、····································6<

14、;/p><p>  5、設置模塊································&#

15、183;·····························6</p><p>  四、總體方案組成框圖·&#

16、183;····································

17、····················7</p><p>  五、系統(tǒng)硬件設計···········&#

18、183;····································

19、·············8</p><p>  1、LCD顯示模塊··················&

20、#183;····································

21、;···8</p><p>  2、實時時間計算模塊····························

22、;··························12</p><p>  3、實時環(huán)境溫度檢測模塊····&#

23、183;····································

24、········16</p><p>  4、報警模塊·······················

25、83;····································&

26、#183;21</p><p>  5、設置模塊······························

27、3;······························22</p><p>  六、系統(tǒng)軟件設計·

28、;····································

29、83;······················23</p><p>  七、系統(tǒng)硬件電路設計········&#

30、183;····································

31、···········24</p><p>  八、系統(tǒng)硬件PROTEUS仿真原理圖··················

32、83;·························25</p><p>  九、系統(tǒng)硬件仿真運行情況圖·····

33、;····································

34、83;········26</p><p>  1、顯示歡迎界面······················

35、3;··································26</p>

36、<p>  2、顯示實時時間·································

37、83;························26</p><p>  3、顯示當前溫度······

38、3;····································&#

39、183;··············27</p><p>  4、時間設置·················

40、;····································

41、83;········27</p><p>  5、最高報警溫度設置······················&#

42、183;·······························28</p><p>  6、鬧鐘時

43、間設置····································&

44、#183;·····················28</p><p>  7、超溫··········

45、····································

46、3;···················29</p><p>  8、鬧鐘時間到············

47、····································

48、3;···········29</p><p>  附錄一:實物圖····················

49、····································

50、3;·····30</p><p>  附錄二:PCB圖··························

51、;····································32&

52、lt;/p><p>  附錄三:源程序代碼·······························

53、83;···························33</p><p>  附錄四:參考文獻···

54、3;····································&#

55、183;···················62</p><p><b>  摘 要</b></p><p>  單片機就是微控制器,是面向應用對象設計、突出控制功能的芯片。

56、單片機接上晶振、復位電路和相應的接口電路,裝載軟件后就可以構(gòu)成單片機應用系統(tǒng)。將它嵌入到形形色色的應用系統(tǒng)中,就構(gòu)成了眾多產(chǎn)品、設備的智能化核心。本設計就是應用單片機強大的控制功能制作而成的電子萬年歷,該電子萬年歷包括三大功能:實時顯示年、月、日、時、分、秒;實時監(jiān)測環(huán)境溫度(可根據(jù)需要啟動高溫報警功能);電子鬧鐘。M bn</p><p>  本設計采用的是AT89S52單片機,該單片機采用的MCU51內(nèi)核,因

57、此具有很好的兼容性,內(nèi)部帶有8KB的ROM,能夠存儲大量的程序,最突出特點是具有ISP在系統(tǒng)燒寫功能,使得燒寫程序更加方便。</p><p>  計時芯片采用DALLAS公司的涓細充電時鐘芯片DS1302,該芯片通過簡單的串行通信與單片機進行通信,時鐘/日歷電路能夠?qū)崟r提供年、月、日、時分、秒信息,采用雙電源供電,當外部電源掉電時能夠利用后備電池準確計時。</p><p>  溫度檢測采用

58、DALLAS公司的數(shù)字化溫度傳感器,該芯片采用的是獨特的“一線總線”的方式與單片機進行通信,一線總線獨特而且經(jīng)濟的特點,是用戶可以輕松的組建傳感器網(wǎng)絡,為測量系統(tǒng)的構(gòu)建引入全新的概念。實時溫度采用一線總線的方式傳輸大大的提高了信號的抗干擾性,分辨率可通過軟件設置,其小巧的體積為各種環(huán)境下測量溫度提供了方便。</p><p>  顯示器件采用通用型1602液晶,可顯示32個字符,如果使用數(shù)碼管來做顯示器件需消耗大量

59、的系統(tǒng)資源,因此采用低功耗的1602液晶,該液晶顯示方便,功能強大,完全能滿足數(shù)字萬年歷的顯示要求。</p><p>  通過此次設計能夠更加牢固的掌握單片機的應用技術,增強動手能力、硬件設計能力以及軟件設計能力。</p><p><b>  設計任務</b></p><p>  1、設計任務:利用單片機、時鐘芯片DS1302、溫度傳感器DS1

60、8B20、1602液晶等實現(xiàn)日期、時間、溫度的顯示即一個簡單的萬年歷。</p><p><b>  2、設計要求</b></p><p>  (1)通過DS1302能夠準確的計時,時間可調(diào)并在液晶上顯示出來。</p><p> ?。?)通過DS18B20能夠?qū)崟r、準確的檢測當前環(huán)境溫度。</p><p> ?。?)利用單

61、片機自身功能實現(xiàn)鬧鐘。</p><p><b>  總體方案論證與設計</b></p><p>  本系統(tǒng)以AT89S52單片機為控制核心,通過與DS1302和DS18B20通信獲取實時時間和實時環(huán)境溫度,并將得到的數(shù)據(jù)通過1602液晶顯示出來,同時通過相應的按鍵調(diào)整相應的值。因此本設計可分為一下模塊:顯示模塊、實時時間計算模塊、實時環(huán)境溫度采集模塊、報警模塊、設置模

62、塊(時間設置模塊、最高溫度設置模塊、鬧鐘設置模塊)。下面對各個模塊逐一進行論證分析:</p><p><b>  液晶顯示模塊</b></p><p>  方案(1):數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過控制相應的二極管的狀態(tài)顯示相應的數(shù)字。要使數(shù)碼管正常顯示就得有驅(qū)動電路驅(qū)動相應的段碼,數(shù)碼管的現(xiàn)實方式可分為靜態(tài)顯示和動態(tài)顯示,靜態(tài)顯示方式只適合顯

63、示單個的數(shù)字,因此本設計應采用動態(tài)顯示方式。由于動態(tài)顯示方式利用的是人眼視覺暫留的特性,掃描的時間應不大于20毫秒,占用系統(tǒng)資源大,而且顯示的個數(shù)和字型有限,在本設計中不易采用。</p><p>  方案(2):1602液晶也叫1602字符型液晶 它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊 它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔,每行之

64、間也有也有間隔,起到了字符間距和行間距的作用。1602的驅(qū)動電路帶有11條指令,可以很方便的控制液晶的現(xiàn)實效果如:清屏、左移右移、光標顯示。而且1602顯示的字符在下一條指令為到來之前不會改變,也就是能夠維持顯示的字符,1602液晶占用的系統(tǒng)資源也少。</p><p>  綜合比較上述兩種方案,應采用1602液晶組成本設計的顯示模塊。</p><p><b>  實時時間計算模塊

65、</b></p><p>  方案(1):AT89S52單片機內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進行計數(shù),從而達到計時功能,只要使用11.0592的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時,但因為只有單一的計時功能要實現(xiàn)“萬年歷”的功能需要較復雜的程序,而且如果單片機掉電無法繼續(xù)進行計時,所以使用不便。</p><p>  方案(2):DS13

66、02是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.5~5.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。利用單片機強大的控制功能就可實現(xiàn)

67、實時計時的功能,而且消耗的系統(tǒng)資源少,程序簡單。</p><p>  綜合上述兩種方案,宜采用方案(2)實現(xiàn)實時計時功能。</p><p>  3、實時環(huán)境溫度采集模塊</p><p>  方案(1):熱敏電阻是開發(fā)早、種類多、發(fā)展較成熟的敏感元器件.熱敏電阻由半導體陶瓷材料組成,利用的原理是溫度引起電阻變化.</p><p>  通過一定的

68、電路可以將周圍環(huán)境的溫度變化轉(zhuǎn)化成電壓的變化,通過AD轉(zhuǎn)化器件將信號傳輸給單片機進行分析,從而測出當前環(huán)境溫度,但誤差大,不穩(wěn)定,對環(huán)境要求較高。</p><p>  方案(2):DS18B20是美國DALLAS公司生產(chǎn)的數(shù)字溫度傳感器,采用單總線的接口方式與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20 的雙向通訊。 單總線具有經(jīng)濟性好,抗干擾能力強,適合于惡劣環(huán)境的現(xiàn)場溫度測量,使用方便等優(yōu)點,

69、使用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構(gòu)建引入全新概念。測量溫度范圍寬,測量精度高 ,在使用中不需要任何外圍元件,支持多點組網(wǎng)功能 多個 DS18B20 可以并聯(lián)在惟一的單線上,實現(xiàn)多點測溫,供電方式靈活 DS18B20 可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取電源。因此,當數(shù)據(jù)線上的時序滿足一定的要求時,可以不接外部電源,從而使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高。因此非常適合本系統(tǒng)使用。</p><p>  綜上比較上

70、述兩種方案,宜采用方案(2)構(gòu)成本設計的實時溫度采集模塊。</p><p><b>  4、報警模塊</b></p><p>  此模塊采用無源蜂鳴器實現(xiàn),只要編寫相應的程序即可實現(xiàn)發(fā)出不同頻率的聲音。</p><p><b>  5、設置模塊</b></p><p>  因設置模塊只需編寫相應的程

71、序外加相應的按鍵即可實現(xiàn),實現(xiàn)方法較簡單,在此不再論述。</p><p><b>  總體方案組成框圖</b></p><p><b>  系統(tǒng)硬件設計</b></p><p>  1、LCD顯示模塊設計</p><p> ?。?)1602液晶功耗較小可直接與單片機接口相接,電源直接與電源電路相接,

72、使用單片機的P0口和P1口與1602進行通信。</p><p> ?。?)1602相應功能特性介紹</p><p>  +5V電壓,對比度可調(diào)</p><p><b>  內(nèi)含復位電路</b></p><p>  提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能</p><p>

73、  有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM</p><p>  內(nèi)建有160個5X7點陣的字型的字符發(fā)生器CGROM</p><p>  8個可由用戶自定義的5X7的字符發(fā)生器CGRAM</p><p> ?。?)1602引腳介紹</p><p> ?。?)1602液晶11條指令介紹</p><p><b>  

74、1.清屏指令 </b></p><p>  功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的字符碼20H; <2> 光標歸位,即將光標撤回液晶顯示屏的左上方; <3>將地址計數(shù)器(AC)的值設為0;</p><p><b>  2.光標歸位指令 </b></p><p> 

75、 功能:<1> 把光標撤回到顯示器的左上方; <2> 把地址計數(shù)器(AC)的值設置為0; <3> 保持DDRAM的內(nèi)容不變 ;</p><p>  3.輸入模式設置指令 </p><p>  功能:設定每次寫入1位數(shù)據(jù)后光標的移位方向,并且設定每次寫入的一個字符是否</p><p><b>  移動。</b&g

76、t;</p><p>  參數(shù)設定的情況如下所示: 位名              設置 I/D            0=寫入新數(shù)據(jù)后光標左移

77、0;     1=寫入新數(shù)據(jù)后光標右移 S                0=寫入新數(shù)據(jù)后顯示屏不移動 1=寫入新數(shù)據(jù)后顯示屏整體右移1個字 </p><p>  4.顯示開關控制指令</p

78、><p>  功能:控制顯示器開/關、光標顯示/關閉以及光標是否閃爍。參數(shù)設定的情況如下: 位名              設置 D            

79、    0=顯示功能關           1=顯示功能開 C                0=無光標   

80、;                1=有光標 B                0=光標不閃爍   

81、;            1=光標閃爍 </p><p>  5.設定顯示屏或光標移動方向指令</p><p>  功能:使光標移位或使整個顯示屏幕移位。參數(shù)設定的情況如下: S/C        &

82、#160;     R/L                設定情況 0             &

83、#160;   0          光標左移1格,且AC值減1 0                 1    

84、60;     光標右移1格,且AC值加1 1                 0          顯示器上字符全部左移一格,

85、但光標不動 1                 1          顯示器上字符全部右移一格,但光標不動 </p><p>  6.功能設定指令 (非常

86、重要的指令)</p><p>  功能:設定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設定的情況如下: 位名              設置 DL          

87、0;                  0=數(shù)據(jù)總線為4位 1=數(shù)據(jù)總線為8位 N               

88、;                0=顯示1行 1=顯示2行 F                

89、;                0=5×7點陣/每字符  1=5×10點陣/每字符 </p><p>  7.設定CGRAM地址指令 </p><p>  功能:設定下一個要存入數(shù)據(jù)的CGR

90、AM的地址。</p><p>  8.設定DDRAM地址指令 </p><p>  功能:設定下一個要存入數(shù)據(jù)的CGRAM的地址。</p><p>  9.讀取忙信號或AC地址指令 </p><p>  功能:<1> 讀取忙碌信號BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時無法接收單片機</p><p>  

91、送來的數(shù)據(jù)或指令; 當BF=0時,液晶顯示器可以接收單片機送來的數(shù)據(jù)或指令; <2> 讀取地址計數(shù)器(AC)的內(nèi)容。 </p><p>  10.數(shù)據(jù)寫入DDRAM或CGRAM指令 </p><p>  功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應的字符;</p><p>  <2> 將用戶自己設計的圖形存入

92、CGRAM。 </p><p>  11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令 </p><p>  功能:讀取DDRAM或CGRAM中的內(nèi)容。 基本操作時序: 讀狀態(tài)           輸入:RS=L,RW=H,E=H     &

93、#160;輸出:DB0~DB7=狀態(tài)字 寫指令           輸入:RS=L,RW=L,E=下降沿脈沖,DB0~DB7=指令碼 輸出:無 讀數(shù)據(jù)           輸入:RS=H,RW=H,E=H  

94、60;   輸出:DB0~DB7=數(shù)據(jù) 寫數(shù)據(jù)           輸入:RS=H,RW=L,E=下降沿脈沖,DB0~DB7=數(shù)據(jù) 輸出:無 </p><p>  (5)、1602液晶與單片機接口電路</p><p>  2、時間計算模塊設計</p&g

95、t;<p>  DS1302通過三根口線實現(xiàn)與單片機的通信,因DS1302功耗很小,即使電源掉電后通過3V的紐扣電池仍能維持DS1302精確走時。</p><p>  DS1302特性介紹</p><p>  DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的

96、時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.5~5.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。</p><p>  DS1302引腳介紹</p><p><b>  各引腳的功能為:</b></p>&

97、lt;p>  8 、Vcc1:備用電池端;</p><p>  1、Vcc2:5V電源。當Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當Vcc2< Vcc1時,由Vcc1向DS1302供電。</p><p>  7、 SCLK:串行時鐘,輸入;  </p><p>  6、I/O:數(shù)據(jù)輸入輸出口;</p>

98、<p>  5、CE/RST:復位腳</p><p>  2 3、X1、X2 是外接晶振腳 (32.768KHZ的晶振)</p><p><b>  4、地(GND)</b></p><p> ?。?)DS1302有關日歷、時間的寄存器 </p><p>  寄存器的說明如下:1、秒寄存器(81h、80h

99、)的位7定義為時鐘暫停標志(CH)。當初始上電時該位置為1,</p><p>  時鐘振蕩器停止,DS1302處于低功耗狀態(tài);只有將秒寄存器的該位置改寫為0時,時鐘才能開</p><p>  始運行。2、小時寄存器(85h、84h)的位7用于定義DS1302是運行于12小時模式還是24小時模式。當為</p><p>  高時,選擇12小時模式。在12小時模式時,位

100、5是 ,當為1時,表示PM。在24小時模式時,</p><p>  位5是第二個10小時位3、控制寄存器(8Fh、8Eh)的位7是寫保護位(WP),其它7位均置為0。在對任何的時鐘和</p><p>  RAM的寫操作之前,WP位必須為0。當WP位為1時,寫保護位防止對任一寄存器的寫操作。</p><p>  也就是說在電路上電的初始態(tài)WP是1,這時是不能改寫上面

101、任何一個時間寄存器的,</p><p>  只有首先將WP改寫為0,才能進行其它寄存器的寫操作。 </p><p> ?。?)DS1302控制字介紹</p><p>  控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。</p><p>  位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);&

102、lt;/p><p>  位5至位1(A4~A0):指示操作單元的地址;</p><p>  位0(最低有效位):如為0,表示要進行寫操作,為1表示進行讀操作。</p><p><b>  讀數(shù)據(jù):</b></p><p>  讀數(shù)據(jù)時在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),</p&

103、gt;<p>  讀出的數(shù)據(jù)是從最低位到最高位。</p><p><b>  寫數(shù)據(jù):</b></p><p>  控制字總是從最低位開始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,</p><p>  數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入也是從最低位(0位)開始。</p><p>  位0(最低有

104、效位):為1表示進行讀操作。 如為0,表示要進行寫操作,</p><p>  控制字后 SCLK 下降沿 讀數(shù)據(jù) SCLK上升沿寫數(shù)據(jù)</p><p> ?。?)DS1302單字節(jié)讀寫時序介紹</p><p>  DS1302的數(shù)據(jù)讀寫是通過I/O串行進行的。當進行一次讀寫操作時最少得讀寫兩個字節(jié),第一個字節(jié)是控制字節(jié),就是一個命令,告訴DS1302是讀還是寫

105、操作,是對RAM還是對CLOK寄存器操作,以及操作的址。第二個字節(jié)就是要讀或?qū)懙臄?shù)據(jù)了。我們先看</p><p>  單字節(jié)寫:在進行操作之前先得將CE(也可說是RST)置高電平,然后單片機將控制字的位0放到I/O上,當I/O的數(shù)據(jù)穩(wěn)定后,將SCLK置高電平,DS1302檢測到SCLK的上升沿后就將I/O上的數(shù)據(jù)讀取,然后單片機將SCLK置為低電平,再將控制字的位1放到I/O上,如此反復,將一個字節(jié)控制字的8個位

106、傳給DS1302。接下來就是傳一個字節(jié)的數(shù)據(jù)給DS1302,當傳完數(shù)據(jù)后,單片機將CE置為低電平,操作結(jié)束。</p><p>  單字節(jié)讀操作的一開始寫控制字的過程和上面的單字節(jié)寫操作是一樣,但是單字節(jié)讀操作在寫控制字的最后一個位,SCLK還在高電平時,DS1302就將數(shù)據(jù)放到I/O上,單片機將SCLK置為低電平后數(shù)據(jù)鎖存,</p><p>  單機機就可以讀取I/O上的數(shù)據(jù)。如此反復,將

107、一個字節(jié)的數(shù)據(jù)讀入單片機。</p><p>  讀與寫操作的不同就在于,寫操作是在SCLK低電平時單片機將數(shù)據(jù)放到IO上,當SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放數(shù)據(jù)到IO上,將SCLK置為低電平后,單片機就可從IO上讀取數(shù)據(jù)。</p><p> ?。?)DS1302操作指令介紹</p><p><b>  操作說明

108、:</b></p><p>  1 首先要通過8EH將寫保護去掉,將日期,時間的初值寫時各個寄存器。2 然后就可以對80H、82H、84H、86H、88H、8AH、8CH進行初值的寫入。同時也通過秒寄存器將位7的CH值改成0,這樣DS1302就開始走時運了。3 將寫保護寄存器再寫為80H,防止誤改寫寄存器的值。4 不斷讀取80H-8CH的值,將它們格式化后顯示到1602LCD液晶上</p&

109、gt;<p>  (8)DS1302與單片機接口電路</p><p>  3、實時環(huán)境溫度檢測模塊</p><p>  DS18B20通過單總線實現(xiàn)與單片機的通信,每個DS18B20都有一個唯一的序列號,可以方便的實現(xiàn)組網(wǎng)檢測。</p><p><b>  (1)單總線介紹</b></p><p>  單總

110、線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。</p><p>  單總線通常要求外接一個約為 4.7K—10K 的上拉電阻,這樣,當總線閑置時其狀態(tài)為高電平。</p><p> ?。?) DS18B20特性介紹</p><p>  DS18B20 單線數(shù)字溫度傳感器,即“一線器件”,其具有獨特的優(yōu)點:</p><p> ?。?1

111、 )采用單總線的接口方式 與微處理器連接時 僅需要一條口線即可實現(xiàn)微處理器與 DS18B20 的雙向通訊。 單總線具有經(jīng)濟性好,抗干擾能力強,適合于惡劣環(huán)境的現(xiàn)場溫度測量,使用方便等優(yōu)點,使用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構(gòu)建引入全新概念。</p><p>  測量溫度范圍寬,測量精度高 DS18B20 的測量范圍為 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范圍內(nèi),精度為 &

112、#177; 0.5°C 。</p><p>  在使用中不需要任何外圍元件。</p><p>  支持多點組網(wǎng)功能 多個 DS18B20 可以并聯(lián)在惟一的單線上,實現(xiàn)多點測溫。</p><p>  供電方式靈活 DS18B20 可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取電源。因此,當數(shù)據(jù)線上的時序滿足一定的要求時,可以不接外部電源,從而 使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性

113、更高。</p><p>  測量參數(shù)可配置 DS18B20 的測量分辨率可通過程序設定 9~12 位。</p><p>  負壓特性 電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。</p><p>  掉電保護功能 DS18B20 內(nèi)部含有 EEPROM ,在系統(tǒng)掉電以后,它仍可保存分辨率及報警溫度的設定值。</p><p>  D

114、S18B20 具有體積更小、適用電壓更寬、更經(jīng)濟、可選更小的封裝方式,更寬的電壓適用范圍,適合于構(gòu)建自己的經(jīng)濟的測溫系統(tǒng),因此也就被設計者們所青睞。</p><p> ?。?) DS18B20管腳介紹</p><p>  DS18B20的管腳排列</p><p>  1 . GND為電源 地;</p><p>  2. DQ為數(shù)字信號輸入/

115、輸出端;</p><p>  3. VDD為外接供電電源輸入端,在寄生電源接線方式時接地; </p><p> ?。?) DS18B20內(nèi)部結(jié)構(gòu)</p><p>  DS18B20 內(nèi)部結(jié)構(gòu)主要由四部分組成: 64 位光刻 ROM 、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器 TH 和 TL 、配置寄存器。</p><p>  光刻 ROM 中的

116、64 位序列號是出廠前被光刻好的,它可以看作是該 DS18B20 的地址序列碼。 64 位光刻 ROM 的排列是:開始 8 位(地址: 28H )是產(chǎn)品類型標號,接著的 48 位是該 DS18B20 自身的序列號,并且每個 DS18B20 的序列號都不相同,因此它可以看作是該 DS18B20 的地址序列碼;最后 8 位則是前面 56 位的循環(huán)冗余校驗碼( CRC=X8+X5+X4+1 )。由于每一個 DS18B20 的 ROM 數(shù)據(jù)都各

117、不相同,因此微控制器就可以通過單總線對多個 DS18B20 進行尋址,從而實現(xiàn)一根總線上掛接多個 DS18B20 的目的。</p><p>  DS18B20中的溫度傳感器完成對溫度的測量,用16位二進制形式提供,形式表達,其中S為符號位。</p><p> ?。?) DS18B20溫度轉(zhuǎn)化示例</p><p>  (6) DS18B20時序介紹</p>

118、<p>  DS18B20的一線工作協(xié)議流程是:</p><p>  初始化→ROM操作指令→存儲器操作指令→數(shù)據(jù)傳輸。</p><p><b>  其工作時序包括:</b></p><p><b>  初始化時序</b></p><p><b>  寫時序</b>

119、;</p><p><b>  讀時序</b></p><p><b>  初始化時序</b></p><p>  主機首先發(fā)出一個480-960微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖?,并在隨后的480微秒時間內(nèi)對總線進行檢測,如果有低電平出現(xiàn)說明總線上有器件已做出應答。若無低電平出現(xiàn)一直都是高電平說明總線上無器件應答。

120、  做為從器件的DS18B20在一上電后就一直在檢測總線上是否有480-960微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待15-60微秒后將總線電平拉低60-240微秒做出響應存在脈沖,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待。 </p><p>  對DS18B20的寫和讀操作</p><p>  接下來就是主機發(fā)出各種操作命令,但各種操作命令都是向DS18B20寫0

121、和寫1組成的命令字節(jié),接收數(shù)據(jù)時也是從DS18B20讀取0或1的過程。因此首先要搞清主機是如何進行寫0、寫1、讀0和讀1的。</p><p>  寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則繼續(xù)拉低電平最少60微秒直至寫周期結(jié)束,然后釋放總線為高電平。若主機想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結(jié)束。而做為從機

122、的DS18B20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。</p><p>  對于讀數(shù)據(jù)操作時序也分為讀0時序和讀1時序兩個過程。讀時序是從主機把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在檢測到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低

123、電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主機在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內(nèi)的15微秒時間內(nèi)完成對總線進行采樣檢測,采樣期內(nèi)總線為低電平則確認為0。采樣期內(nèi)總線為高電平則確認為1。完成一個讀時序過程,至少需要60us才能完成</p><p> ?。?) DS18B20操作步驟</p><p> ?。ǎ保┟看巫x寫前對 DS18B20 進行復位

124、初始化。復位要求主 CPU 將數(shù)據(jù)線</p><p>  下拉 500us ,然后釋放, DS18B20 收到信號后等待 16us~60us 左右,然后發(fā)出</p><p>  60us~240us 的存在低脈沖,主 CPU 收到此信號后表示復位成功。</p><p>  (2)發(fā)送一條 ROM 指令</p><p> ?。ǎ常┌l(fā)送存儲器指令

125、</p><p>  (8) DS18B20與單片機的接口電路</p><p><b>  4、報警模塊</b></p><p>  報警模塊采用單片機輸出一定頻率的方波從而使蜂鳴器發(fā)出聲音</p><p>  蜂鳴器與單片機的接口電路</p><p><b>  5、設置模塊</

126、b></p><p>  設置模塊采用四個按鍵與P1^4、P1^5、P1^6、P1^7</p><p>  相接組成獨立按鍵,接口電路如下;</p><p><b>  系統(tǒng)軟件設計</b></p><p>  軟件設計是本設計的關鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運行情況的良好。因本程序涉及的模塊較多,所以程序

127、編寫也采用模塊化設計,C語言具有編寫靈活、移植方便、便于模塊化設計的特點,所以本系統(tǒng)的軟件采用C51編寫。</p><p><b>  程序框圖如下:</b></p><p><b>  系統(tǒng)硬件電路設計</b></p><p>  本設計硬件電路圖如下</p><p>  系統(tǒng)硬件PROTEUS仿

128、真原理圖</p><p>  系統(tǒng)硬件仿真運行情況圖</p><p><b>  顯示歡迎界面</b></p><p><b>  顯示實時時間</b></p><p><b>  顯示當前溫度</b></p><p><b>  時間設置&l

129、t;/b></p><p><b>  最高報警溫度設置</b></p><p><b>  鬧鐘時間設置</b></p><p><b>  超 溫</b></p><p><b>  鬧鐘時間到</b></p><p>

130、;<b>  附錄一:實物圖</b></p><p><b>  附錄二:PCB圖</b></p><p><b>  附錄三:源程序代碼</b></p><p>  #include<reg52.h></p><p>  #include<intrins.h

131、></p><p>  unsigned char code displaywelcome[]={" Welcome To My Lcd Timer"};//歡迎界面</p><p>  unsigned char code displaywish[]={" Happy Every Day ^_^"}; //歡迎界面</p>

132、;<p>  unsigned char code overtemperature[]={"OVERTEMPERATURE!"};</p><p>  unsigned char code digit[]={"0123456789"}; //數(shù)字代碼</p><p>  unsigned char mode,TH,TL,TN

133、,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,</p><p>  minutea,seconds,houra=12;</p><p>  sbit SCLK=P1^0;//DS1302時鐘輸入</p><p>  sbit DATE=P1^1;//DS1302數(shù)據(jù)輸入

134、</p><p>  sbit REST=P1^2;//DS1302復位端口</p><p>  sbit SET=P1^4;//DS1302設置模式選擇位</p><p>  sbit ADD=P1^5;//增加</p><p>  sbit RED=P1^6;//減小</p><p>  sbit CAN

135、L=P1^7;</p><p>  void delay1ms(int i)//1毫秒延時</p><p><b>  {</b></p><p><b>  int j,k;</b></p><p>  while(i--)</p><p>  for(j=76;j>

136、1;j--);</p><p>  for(k=29;k>1;k--);</p><p><b>  }</b></p><p>  void delaynus(unsigned char n) //延時若干微秒</p><p><b>  {</b></p><

137、p>  unsigned char i;</p><p>  for(i=0;i<n;i++);</p><p><b>  }</b></p><p>  /***********蜂鳴器模塊************/</p><p>  sbit beep=P3^6;//位定義,定義P.6位fmp<

138、;/p><p>  void dely500(void)</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  for(i=250;i>0;i--)</p><p><b>  {</b></p>&

139、lt;p><b>  _nop_();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void baojing(unsigned char n)</p><p><b>  {</b>&l

140、t;/p><p>  unsigned char x,i;</p><p>  while(n--)</p><p><b>  {</b></p><p>  for(i=0;i<5;i++)</p><p><b>  {</b></p><p>

141、;  for(x=0;x<200;x++)</p><p><b>  {</b></p><p>  beep=~beep;</p><p>  dely500();</p><p><b>  }</b></p><p><b>  }</b>

142、</p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  for(x=0;x<200;x++)</p><p><b>  {</b></p><p>  beep=~beep;</p>&l

143、t;p>  dely500();</p><p>  dely500();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b

144、></p><p>  /*******DS1302模塊*************/</p><p>  void Write1302(unsigned char date)//向1302寫數(shù)據(jù)</p><p><b>  {</b></p><p>  unsigned char i;</p>&l

145、t;p><b>  SCLK=0;</b></p><p>  delaynus(2);</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  DATE=date&0x01;</p><p>&l

146、t;b>  SCLK=1;</b></p><p>  delaynus(2);</p><p><b>  SCLK=0;</b></p><p>  delaynus(2);</p><p><b>  date>>=1;</b></p><p&

147、gt;<b>  }</b></p><p><b>  }</b></p><p>  void WriteSet1302(unsigned char cmd,unsigned char date) //根據(jù)相應的命令輸入相應的數(shù)據(jù)</p><p><b>  {</b></p>&l

148、t;p><b>  REST=0;</b></p><p><b>  SCLK=0;</b></p><p><b>  REST=1;</b></p><p>  Write1302(cmd);</p><p>  delaynus(5);</p>&l

149、t;p>  Write1302(date);</p><p><b>  SCLK=1;</b></p><p><b>  REST=0;</b></p><p><b>  }</b></p><p>  unsigned char Read1302(void)/

150、/讀取1302數(shù)據(jù)</p><p><b>  {</b></p><p>  unsigned char i,date;</p><p>  delaynus(2);</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b><

151、/p><p><b>  date>>=1;</b></p><p>  if(DATE==1)</p><p>  date|=0x80;</p><p><b>  SCLK=1;</b></p><p>  delaynus(2);</p><

152、;p><b>  SCLK=0;</b></p><p>  delaynus(2);</p><p><b>  }</b></p><p>  return date; </p><p><b>  }</b></p><p>  unsign

153、ed char ReadSet1302(unsigned char cmd)//根據(jù)命令讀取1302相應的值</p><p><b>  {</b></p><p>  unsigned char date;</p><p><b>  REST=0;</b></p><p><b> 

154、 SCLK=0;</b></p><p><b>  REST=1;</b></p><p>  Write1302(cmd);</p><p>  delaynus(2);</p><p>  date=Read1302();</p><p><b>  SCLK=1;&l

155、t;/b></p><p><b>  REST=0;</b></p><p>  return date;</p><p><b>  }</b></p><p>  void IntDS1302(void) //DS1302初始化</p><p><b>

156、  {</b></p><p>  unsigned char flag;</p><p>  flag= ReadSet1302(0x81);</p><p>  if(flag&0x80){ //判斷時鐘芯片是否關閉</p><p>  WriteSet1302(0x8E,0x00);

157、 //根據(jù)寫狀態(tài)寄存器命令字,寫入不保護指令 </p><p>  WriteSet1302(0x80,((0/10)<<4|(0%10))); //根據(jù)寫秒寄存器命令字,寫入秒的初始值</p><p>  WriteSet1302(0x82,((0/10)<<4|(0%10))); //根據(jù)寫分寄存器命令字,寫入分的初始值</p>

158、<p>  WriteSet1302(0x84,((0/10)<<4|(0%10))); //根據(jù)寫小時寄存器命令字,寫入小時的初始值</p><p>  WriteSet1302(0x86,((0/10)<<4|(0%10))); //根據(jù)寫日寄存器命令字,寫入日的初始值</p><p>  WriteSet1302(0x88,((0/10)<&

159、lt;4|(0%10))); //根據(jù)寫月寄存器命令字,寫入月的初始值</p><p>  WriteSet1302(0x8c,((10/10)<<4|(10%10))); //根據(jù)寫年寄存器命令字,寫入年的初始值</p><p>  WriteSet1302(0x90,0xa5); //打開充電功能 選擇2K電阻充電方式</p>

160、<p>  WriteSet1302(0x8E,0x80); //根據(jù)寫狀態(tài)寄存器命令字,寫入保護指令</p><p><b>  }</b></p><p><b>  }</b></p><p>  /***************液晶顯示模塊*****************/</p>

161、<p>  sbit RS=P2^5;</p><p>  sbit RW=P2^6;</p><p>  sbit E=P2^7;</p><p>  sbit BF=P0^7;</p><p><b>  /*液晶忙檢測*/</b></p><p>  bit BusyTest(

162、void)</p><p><b>  {</b></p><p>  bit result;</p><p><b>  RS=0;</b></p><p><b>  RW=1;</b></p><p><b>  E=1;</b&g

163、t;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  result=BF;</p><p><b>  _no

164、p_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  E=0;</b></p><p>  return result;</p><p>&

165、lt;b>  }</b></p><p><b>  /*寫指令*/</b></p><p>  void Write_com(unsigned char command)</p><p><b>  {</b></p><p>  while(BusyTest()!=0);<

166、;/p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b>  E=0;</b></p><p><b>  _nop_();</b></p><p><b>  _

167、nop_();</b></p><p><b>  _nop_();</b></p><p>  P0=command;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p&g

168、t;<b>  _nop_();</b></p><p><b>  E=1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();<

169、;/b></p><p><b>  E=0;</b></p><p><b>  }</b></p><p><b>  /*寫地址*/</b></p><p>  void Write_Address(unsigned char address)</p>

170、<p><b>  {</b></p><p>  Write_com(address|0x80);</p><p>  delay1ms(1);</p><p><b>  } </b></p><p><b>  /*寫數(shù)據(jù)*/</b></p>

171、<p>  void Write_Date(unsigned char date)</p><p><b>  {</b></p><p><b>  RS=1;</b></p><p><b>  RW=0;</b></p><p><b>  E=0;&

172、lt;/b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  P0=date;</b></p>

173、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  E=1;</b></p><p><b>  _no

174、p_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  E=0;</b></p><p>  delay1ms(1);</p><p><

175、;b>  }</b></p><p><b>  /*初始化*/</b></p><p>  void Lcd_Int(void)</p><p><b>  {</b></p><p>  Write_com(0x38);</p><p>  delay1

176、ms(1);</p><p>  Write_com(0x38);</p><p>  delay1ms(1);</p><p>  Write_com(0x06);</p><p>  delay1ms(1);</p><p>  Write_com(0x0c);</p><p>  dela

177、y1ms(1);</p><p>  Write_com(0x01);</p><p><b>  }</b></p><p>  void displaymainpart(void)//顯示液晶主要部分(不變化部分)</p><p><b>  {</b></p><p&g

178、t;  Write_Address(0x01);</p><p>  delay1ms(1);</p><p>  Write_Date('D');</p><p>  Write_Date('A');</p><p>  Write_Date('T');</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論