本科生專業課程設計 題目: 數字溫度計 學 院 電子信息工程學院 專 業 電氣工程及其自動化 學 號 2011448024 姓 名 田志興 2014年 8月 5日 目錄 0、 前言………………………………………………………………2 - 任務要求與效果呈現……………………………………………2
- 任務分析…………………………………………………………2
- 硬件與軟件設計…………………………………………………3
- 仿真及調試………………………………………………………5
- 總結………………………………………………………………6
6、 附錄………………………………………………………………6
前言
對于現代工業生產過程,溫度是一個非常重要的參數,例如,倉庫溫度,鍋爐熱水溫度等。對溫度的監測,需要滿足實時性,下面介紹一種簡易的溫度監控系統,其兼具良好的經濟和高效性。 1、任務要求與效果呈現 設計溫度監控系統,采用DS18B20作為測溫傳感器,用AT89C2051作處理器,用數碼管顯示,并用LED燈作報警器。當測量溫度高于100℃或低于-20℃時,發出警報。其效果如圖1所示。
1.004.jpg (11.77 KB, 下載次數: 48)
下載附件
2017-8-5 04:12 上傳
(a)規定溫度范圍內的正溫度,數碼管顯示溫度,LED不亮即不報警
1.005.jpg (11.32 KB, 下載次數: 46)
下載附件
2017-8-5 04:12 上傳
(b)規定溫度范圍內的負溫度,數碼管顯示溫度,LED不亮即不報警
1.006.jpg (9.76 KB, 下載次數: 47)
下載附件
2017-8-5 04:12 上傳
(c)超出溫度上限(100℃),數碼管顯示溫度,LED亮即報警
1.007.jpg (11.7 KB, 下載次數: 52)
下載附件
2017-8-5 04:12 上傳
(d)超出溫度下限(-20℃),數碼管顯示溫度,LED亮即報警 圖1 2、任務分析 DS18B20作為溫度傳感器,可以實現現場溫度的快速采集與反饋,并且其外部只有一個信號引腳,使用方便簡潔。使用AT89C2051作為處理器使得在不影響其處理效果的前提下,有效的精簡了系統結構。數碼管顯示經濟適用,簡單明了。 在實際工作中,溫度往往要有一定的變化范圍,避免出現安全故障。因而,在此處設置了溫度的上限,即100℃,溫度下限,即-20℃。當溫度超出規定范圍-20℃~100℃時,作為報警裝置的LED的被點亮,實現溫度報警,保障了生產過程的安全性。 3、硬件與軟件設計 3.1、硬件設計 3.1.1、硬件原理圖(Proteus)
1.008.jpg (131.93 KB, 下載次數: 48)
下載附件
2017-8-5 04:12 上傳
圖2 說明:利用138譯碼器配合以反相器7404,實現了用三個IO口控制五個數碼管的通斷,節約了資源。 3.1.2、硬件PCB圖
1.009.jpg (55.2 KB, 下載次數: 51)
下載附件
2017-8-5 04:12 上傳
圖3
1.010.jpg (12.12 KB, 下載次數: 54)
下載附件
2017-8-5 04:12 上傳
3.1.3 硬件實物圖
1.011.jpg (9.88 KB, 下載次數: 44)
下載附件
2017-8-5 04:12 上傳
圖4 說明:此處使用的電源是2節4V電池,即8V電源,所以采用7805穩壓芯片構成的簡易穩壓電路,將8V輸入轉換成5V輸出,給測溫系統供電。 3.2、軟件設計 3.2.1、其程序流程圖如圖5所示。 (見附錄) 3.2.2、程序(見附錄) 4、仿真及調試 4.1、HEX文件的生成 打開Keil ,新建建項目“tian”,編寫“tian.asm”程序代碼。經調試、編譯和鏈接,無誤后生成“ttian.hex”文件如圖6所示。
1.027.jpg (69.03 KB, 下載次數: 52)
下載附件
2017-8-5 04:12 上傳
圖6 4.2、仿真調試 在已用Proteus畫好的電路圖中,雙擊單片機“AT89C2051”,加載“tian.hex”,再單擊開始,就可以看到圖7所示的設計效果了。
1.028.jpg (137.94 KB, 下載次數: 48)
下載附件
2017-8-5 04:12 上傳
圖7 5、總結 這次課程設計讓我切實體會到了用DS18B20測溫的便捷。通過動手焊接實際硬件電路,我也感覺到:相比51單片機,使用2051,在硬件電路上相當簡潔,因而也節省了整個電路板的空間,使得系統小型化。還有就是軟件方面,這次設計讓我溫習了keil和Proteus的使用,而且增加了對這兩個軟件的使用技能以及熟練程度。 6、附錄
單片機源程序如下:- ORG 0000H
- LJMP MAIN
- ORG 0030H
- MAIN:LCALL CSH0 ;DS18B20初始化
- MOV A,#0CCH ;單點測溫時執行跳過ROM命令節省訪問時間
- LCALL WRITE
- MOV A,#44H ;發開始溫度轉換命令
- LCALL WRITE
- LCALL CSH0 ;DS18B20初始化
- MOV A,#0CCH ;單點測溫時執行跳過ROM命令節省訪問時間
- LCALL WRITE
- MOV A,#0BEH ;讀存儲器命令(讀的字節暫存存儲器,此后讀操作)
- LCALL WRITE
- LCALL READ ;讀出已轉換的溫度值低字節
- MOV 2BH,A
- LCALL READ ;讀出已轉換的溫度值高字節
- MOV 2CH,A
- LCALL ERSH ;二進制轉化成十進制
- LCALL DISPL ;調用動態顯示的子程序
- LCALL MAXorMIN;***判斷是否超出上下限***
- LJMP MAIN
- ;******************第一個DS18B20初始化子程序*******************
- CSH0:CLR P3.0
- MOV R2,#250
- CSH1:DJNZ R2, CSH1 ;主機發置位脈沖持續2μs*240=480μs
- SETB P3.0 ;主機釋放總線控制P3.2口改為輸入
- MOV R2,#30
- CSH4:DJNZ R2, CSH4 ;DS18B20等待2μs*30=60μs
- JB P3.0,CSH0 ;DS18B20沒準備好,重來
- MOV R3,#120 ;DS18B20數據線變低
- CSH5:DJNZ R3,CSH5 ;DS18B20數據線低電平狀態可持續2μs*120=240us
- JB P3.0,CSH3 ;18B20數據線變高,初始化成功
- LJMP CSH0 ;初始化失敗,重來
- CSH3:MOV R2,#240
- CSH2:DJNZ R2, CSH2;18B20應答過程最少2μs*240=480μs
- RET
- ;******************寫DS18B20子程序**********************
- WRITE:MOV R3,#8
- WR1: SETB P3.0 ;保證連續寫2位間的間隙大于1μs
- MOV R4,#7
-
- CLR P3.0
- RRC A
- WR2: DJNZ R4,WR2 ;18B20數據線變低后2μs*7+1=15μs開始采樣數據
- MOV P3.0,C ;將命令字從低位按位依次送18B20
- MOV R4,#22
- WR3: DJNZ R4,WR3;保證整個寫過程持續2μs*22+1=45μS
- DJNZ R3,WR1;送完整個命令字
- SETB P3.0
- RET
- ;********************讀DS18B20子程序*********************
- READ:MOV R3,#8
- RE1: CLR P3.0
- MOV R4,#4
- NOP ;低電平持續2μs
- SETB P3.0 ;P3.0口設為輸入口
- RE2: DJNZ R4,RE2 ;等待2μs*4=8μs
- MOV C,P3.0 ;主機(從低位)按位讀入18B20數據
- RRC A ;數據逐位(先低位后高位)送入A
- MOV R4,#30
- RE3: DJNZ R4,RE3 ;保證讀數據過程持續2μs*30=60μs
- DJNZ R3,RE1 ;讀完整個轉換值(不含符號位)并存21H中
- RET
- ;************判斷是否為負、溫度精度轉換********************
- ERSH: MOV A,2CH ;把溫度的高字節給了A
- JB ACC.7,BB ;溫度為負轉變補(BB)程序段
- SETB F0 ;F0作為是否為負數的標志
- MOV R7,#0FFH ;溫度為正不點亮
- ZHCH: MOV A,2BH ;屏蔽溫度低字節的小數位
- ANL A,#0F0H
- SWAP A
- MOV 2DH,A
- MOV A,2CH ;屏蔽溫度高字節的符號位
- ANL A,#07H
- SWAP A
- ADD A,2DH
- CFZH: MOV B,#10
- DIV AB
- MOV 41H,B ;41H中為個位
-
- MOV B,#10
- DIV AB
- MOV 42H,B ;42H中存放十位
-
- MOV B,#10
- DIV AB
- MOV 43H,B ;43H中為百位
-
- ESHD: MOV A,2BH ;低精度二十進制轉換小數處理程序
- JB ACC.3,XS ;小數十分位為1,則跳轉到XS
- MOV 40H,#00H
- RET
- XS: MOV 40H,#05H ;43H中存放小數位
- RET
-
- BB: CLR F0
- MOV R7,#0BFH ;負數讓第1個數碼管顯示為"-"
- MOV A,2BH ;負數補碼求補
- CPL A
- ADD A,#1
- MOV 2BH,A ;負溫度低字節求補后送2BH
- MOV A,2CH
- CPL A
- ADDC A,#0
- MOV 2CH,A ;負溫度高字節求補后送2CH
- LJMP ZHCH ;負數求補后轉到ZHCH
- ;*************************顯示子程序**************************
- DISPL:MOV A,R7 ;取顯示的正負號
- MOV P1,A ;發送字段代碼
- CLR P3.5 ;Y5=0, K5=1
- ACALL DL2MS ;符號位
- SETB P3.5 ;138A腳置1,關閉所有位碼
- MOV DPTR,#CSTAB;字段碼表首址送DPTR
- MOV R1,#40H
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4
- CLR P3.7 ;Y2=0,K1=1
- ACALL DL2MS ;小數
- SETB P3.4
- SETB P3.7
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- ANL A,#7FH ;個位小數點亮 數碼管的Dp段點亮,其他段跟隨A中的值
-
- MOV P1,A
- CLR P3.7 ;Y3=0,K2=1
- ACALL DL2MS ;個位
- SETB P3.7
-
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4 ;Y3=0,K3=1
- CLR P3.5
- ACALL DL2MS ;十位
- SETB P3.4
- SETB P3.5
-
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4 ;Y6=0,K4=1
- ACALL DL2MS ;百位
- SETB P3.4
- RET
- ;*************************上下限判斷子程序**************************
- MAXorMIN: PUSH ACC
- JNB F0,MIN
- MAX: MOV A,43H ;正溫度時,判斷是否超過上限100℃
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
013504is95rrl8trztqb5x.png (53.39 KB, 下載次數: 51)
下載附件
2017-8-5 04:12 上傳
所有資料51hei提供下載:
http://www.zg4o1577.cn/bbs/dpj-89441-1.html
|