這是一個51單片機的溫度控制系統,包括proteu仿真程序、代碼和文檔。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.68 KB, 下載次數: 88)
下載附件
2018-5-8 02:27 上傳
0.png (54.29 KB, 下載次數: 73)
下載附件
2018-5-8 02:27 上傳
目錄
一、系統設計第 1 頁
系統總體設計方案第 1 頁
溫度信號采集電路選擇和數據處理第 3 頁
軟件設計第 3 頁
二、單元電路設計第 5 頁
溫度信號采集電路第 5 頁
步進電機電路 第 5 頁
液晶顯示模塊 第 6 頁
晶振復位電路第 7 頁
三、總結體會第 7 頁
四、參考文獻第 8 頁
附錄:程序清單第 8 頁
一、系統設計(一) 系統總體設計方案設計框圖如下所示: 圖1 系統總體設計框圖
總電路圖如下:
圖2 系統總電路圖 簡單功能說明: 一個顯示實時溫度的小系統,可以自行設定高溫報警和低溫報警值,實現溫度控制電機帶動外圍器件功能。本系統通過溫度傳感器DS18B20實現對溫度數據的采集,數據處理后顯示到液晶屏上,通過數據處理,溫度值精確度為0.1。
簡單操作方法: 系統上電后液晶顯示實時溫度,通過按鍵可以設定高低溫限定值: A.按下K1,顯示系統的高低溫限定值; B.再按K1,進入設定狀態,液晶屏光標閃動提示設定,此時設定高溫限值還是低溫限值可以在 K1鍵轉換; C.進入設定狀態后,K2鍵用于值加1,K3鍵用于值減1; D.設定完后,按鍵K4確認后退出,返回顯示實時溫度! (二) 溫度信號采集電路選擇和數據處理方案:采用溫度傳感器DS18B20 美國DALLAS公司的產品可編程單總線數字式溫度傳感器DS18B20可實現室內溫度信號的采集,有很多優點:如直接輸出數字信號,故省去了后繼的信號放大及模數轉換部分,外圍電路簡單,成本低;單總線接口,只有一根信號線作為單總線與MCU連接,且每一只都有自己唯一的64位系列號存儲在其內部的ROM存儲器中,故在一根信號線上可以掛接多個DS18820,便于多點測量且易于擴展. DS18B20的測溫范圍較大,集成度較高,故選用此方案。 DS18B20內部1,2位寄存器存放實時溫度值,本系統對以上兩寄存器數據處理后精度為0.1;DS18B20第3,4位寄存器分別存放高溫限值和低溫限值,并且DS18B20內部還有EEPROM,因此通過第3,4寄存器與EEPROM的數據交換就能實現對設定后的值進行貯存。 (三) 軟件設計本實驗中我選用Keil編程平臺. 主程序流程圖:
圖3 主程序流程圖
二、單元電路設計(一) 溫度信號采集電路圖4 溫度信號采集電路 (二) 步進電機電路圖5 步進電機電路
(三) 液晶顯示模塊圖6液晶顯示模塊 (四) 晶振復位電路圖7 晶振復位電路
三、總結體會本次設計給我們提供了一個將自己所學的知識應用于實踐的良機,通過了兩個周的設計我學到了很多非常有價值的東西,懂得了如何將理論知識轉化成實際程序的設計;掌握的單片機開發與設計的思路與方案確定;學會了更有效的查找自己所需的資料;同時也意識到了團隊協作的重要性;掌握了硬件與程序設計的一般步驟和方法。這對我們以后的學習和工作的是非常有幫助的。 設計是我們將來必需的技能,這次設計剛好給我們提供了一個應用自己所學知識的機會,從到圖書館和網上查找資料到對硬件與程序模塊的設計對各模塊的調試再到最后整體設計調試,都對我所學的知識進行了檢驗,增強了自信心。 通過本次設計,我進一步溫習和鞏固了課本的理論知識,對單片機各接口與外部電路之間的連接關系有了更加深刻的理解。同時掌握了Proteus和keil軟件的基本應用。同時,在設計過程中,將理論知識應用于實際應用,增強了理論聯系實際的能力。雖然設計時有時一個問題需要我們花費很長的時間,很煩很累但當我們通過查找資料解決了之后心里很開心很有成就感。同時也使我明白了要將理論運用于實踐還是一種非常重要的能力,要想牢固的掌握所學的知識我們必須將理論與實踐結合起來,用理論來指導實踐,用實踐來驗證理論,增強對理論的理解。不斷地充實自己的理論,提高自己的動手能力。最終完成了整個設計之后,使我更加堅信只要我們努力和采用正確的方法,沒有什么事是我們解決不了的。 最后,我在這里衷心地感謝所有教給我知識和在設計中給予我幫助的老師們和同學們,是他們給我們的知識才使我們得以順利完成此次設計。
單片機匯編語言源程序如下:
- ;-------------------------------------------------
- ; 簡單功能說明:一個顯示實時溫度的小系統,可以自行設
- ; 定高溫報警和低溫報警值,實現溫度控制電機帶動外圍器
- ; 件功能。
- ;
- ;-------------------------------------------------
- DQ EQU P1.7 ;DS18B20控制口
- RS EQU P2.4
- RW EQU P2.5
- E EQU P2.6
- LCD EQU P0
- FLAG EQU 30H
- GEWEI EQU 29H
- SHI EQU 28H
- XIAOSHU EQU 27H
- TEMP_TL EQU 20H ;低溫限值
- TEMP_TH EQU 21H ;高溫限值
- TEMPH EQU 22H ;溫度高字節
- TEMPL EQU 23H ;溫度低字節
- TEMP EQU 24H
- K1 EQU P3.0
- K2 EQU P3.1
- K3 EQU P3.2
- K4 EQU P3.3
- ;===============================================
- MAIN: MOV TEMP_TH,#25
- MOV TEMP_TL,#01
- ACALL INIT_LCD ;初始化液晶
- ACALL WR_THL ;寫入高溫限值和低溫限值寄存器
- ACALL WR_PROM
- ACALL RE_PROM ;從EEPROM中返回高溫限值和低溫限值
- ACALL RESET ;初始化1820
- JB FLAG,LOOP
- ACALL ERROR ;報錯
-
- LOOP: ACALL READ_T ;1820讀取溫度
- ACALL DISP_TEMP ;液晶顯示實時溫度
- ACALL KEYSCAN ;鍵盤設定高溫限值和低溫限值
- ACALL TEMP_COMP
- JMP LOOP
- ;=============啟動1820讀取溫度====================
- READ_T: SETB DQ
- ACALL RESET
- JB FLAG,READ_T1
- RET
- READ_T1:
- MOV A,#0CCH
- ACALL WR_1820
- MOV A,#44H
- ACALL WR_1820
- ACALL RESET
- MOV A,#0CCH
- ACALL WR_1820
- MOV A,#0BEH
- ACALL WR_1820
- ACALL READ_1820
- RET
- ;=========把高溫和低溫限值寫入寄存器=================
- WR_THL: JB FLAG,WR_HL
- RET
- WR_HL: ACALL RESET
- MOV A,#0CCH
- ACALL WR_1820
- MOV A,#4EH
- ACALL WR_1820
- MOV A,TEMP_TH
- ACALL WR_1820
- MOV A,TEMP_TL
- ACALL WR_1820
- RET
- ;==========把高溫和低溫限值寫入EEPROM=================
- WR_PROM:ACALL RESET
- MOV A,#0CCH
- ACALL WR_1820
- MOV A,#48H
- ACALL WR_1820
- RET
- ;========把EEPROM的值返回到高溫和低溫限值寄存器========
- RE_PROM:
- ACALL RESET
- MOV A,#0CCH
- ACALL WR_1820
- MOV A,#0B8H
- ACALL WR_1820
- RET
- ;===========初始化1820==================================
- RESET: SETB DQ
- NOP
- CLR DQ
- MOV R5,#250
- DJNZ R5,$
- SETB DQ
- NOP
-
- MOV R5,#25H
- RESET1: JNB DQ,FLAG1
- DJNZ R5,RESET1
- JMP NDQ
- FLAG1: SETB FLAG
- MOV R5,#100
- DJNZ R5,$
- SETB DQ
- MOV R5,#100
- DJNZ R5,$
- JMP RETU
- NDQ: CLR FLAG
- ACALL ERROR
- RETU: SETB DQ
- RET
- ;=============1820寫字節========================
- WR_1820:
- MOV R6,#8
- CLR C
-
- WR1: CLR DQ
- MOV R5,#7
- DJNZ R5,$
- RRC A
- MOV DQ,C
- MOV R5,#25
- DJNZ R5,$
- SETB DQ
- NOP
- NOP
- DJNZ R6,WR1
- SETB DQ
- RET
- ;==============讀取1820數據======================
- READ_1820:
- MOV R2,#4
- MOV R1,#TEMPL
-
- RE1: MOV R6,#8
- RE2: SETB DQ
- NOP
- CLR DQ
- CLR C
- NOP
- NOP
- SETB DQ
- MOV R5,#9
- DJNZ R5,$
- MOV C,DQ
- MOV R5,#24
- DJNZ R5,$
- RRC A
- DJNZ R6,RE2
- MOV @R1,A
- DEC R1
- DJNZ R2,RE1
- RET
- ;===========轉換數據=============================
- TURN: MOV XIAOSHU,TEMPL ;保存TEMPL值,后面用于取低4位轉換小數部分
- MOV A,TEMPL
- MOV C,16 ;22H的位尋址
- RRC A
- MOV C,17
- RRC A
- MOV C,18
- RRC A
- MOV C,19
- RRC A
- MOV TEMP,A
- MOV A,XIAOSHU
- ANL A,#00001111B
- MOV XIAOSHU,A
-
- RET
- ;========鍵盤掃描=============================
- KEYSCAN:
- JB K1,RETUN ;按下K1,進入鍵盤掃描
- ACALL DELAY20
- JNB K1,$
- ACALL CLR_LCD ;清屏
- ACALL DISP_THL ;顯示高溫限值和低溫限值
- ACALL SET_HL ;設定限值
- ACALL WR_THL ;把高溫限值和低溫限值寫入RAM
- //.../ACALL LED
- ACALL WR_PROM ;限值復制到EEPROM中
- RETUN: RET
- ;------------設定高低限值----------------------
- SET_HL: //JNB K4,EXIT
- JB K1,KEY4
- ACALL DELAY20
- JNB K1,$
- CPL 20H.1 ;標志位,標志設定高溫限值或低溫限值
- JB 20H.1,SET_H
- JMP SET_L
- ;-------------調高溫限值-------------------------
- SET_H:
- ACALL TH_SHAN ;光標閃,進入設定
-
- KEY2H: JNB K1,SET_L ;高溫限值與低溫限值間設定轉換
- JNB K4,EXIT
- JB K2,KEY3H ;按下K2,值加1
- ACALL DELAY20
- JNB K2,$
- INC TEMP_TH
- MOV A,TEMP_TH
- CJNE A,#99,A0
- MOV TEMP_TH,#00
- A0: ACALL DISP_THL
- KEY3H:
- JB K3,KEY2H ;按下K3,值減1
- ACALL DELAY20
- JNB K3,$
- DEC TEMP_TH
- MOV A,TEMP_TH
- CJNE A,#0,A1
- MOV TEMP_TH,#99
- A1: ACALL DISP_THL
- JMP SET_H
- ;-------------調低溫限值------------------------------
- SET_L:
- ACALL TL_SHAN
- KEY2L: JNB K1,SET_H ;高溫限值與低溫限值間設定轉換
- JNB K4,EXIT
- JB K2,KEY3L ;按下K2,值加1
-
- ACALL DELAY20
- JNB K2,$
- INC TEMP_TL
- MOV A,TEMP_TL
- CJNE A,#99,A2
- MOV TEMP_TL,#00
- A2: ACALL DISP_THL
- KEY3L: JB K3,KEY2L ;按下K3,值減1
- ACALL DELAY20
- JNB K3,$
- DEC TEMP_TL
- MOV A,TEMP_TL
- CJNE A,#0,A3
- MOV TEMP_TL,#99
- A3: ACALL DISP_THL
- JMP SET_L
-
- ;----------------------
- KEY4: JNB K4,EXIT ;K4用于退出設定
- JMP SET_HL
- //JMP SET_HL
- EXIT: ACALL DELAY20
- JNB K4,$
- MOV LCD,#00001100B ;設置液晶光標不顯示、不閃爍
- ACALL WR_COMM
- ACALL CLR_LCD
- ACALL DISP_TEMP
- RET
- ;==============溫度比較======================================
- TEMP_COMP:
- MOV A,TEMP_TH
- SUBB A,TEMP
- ACALL DIANJI
- MOV A,TEMP
- SUBB A,TEMP_TL
- ACALL DIANJI
- RET
- ;============================================
- /*MORE: MOV DPTR,#MORE0
- MOV LCD,#0CEH
- ACALL WR_COMM
- ACALL DISP0
- RET
- MORE0: DB '>H',0H
- */
- ;=============啟動電機========================
- ;電機接口是P1低4位,因為P1.7是溫度傳感器的控制口
- ;避免沖突,電機接口按位控制
- DIANJI: JC DIAN0
- RET
- DIAN0: MOV R0,#4
- //ACALL MORE
- DIAN1:
- SETB P1.0
- CLR P1.1
- CLR P1.2
- CLR P1.3
- ACALL DELAY
- CLR P1.0
- SETB P1.1
- ACALL DELAY
- CLR P1.1
- SETB P1.2
- ACALL DELAY
- CLR P1.2
- SETB P1.3
- ACALL DELAY
- //RL A
- DJNZ R0,DIAN1
- CLR P1.0
- CLR P1.1
- CLR P1.2
- CLR P1.3
- RET
- DELAY: MOV R5,#5
- DLY1: MOV R6,#10
- DLY2: MOV R7,#50
- DJNZ R7,$
- DJNZ R6,DLY2
- DJNZ R5,DLY1
- RET
- ;============清屏=============================
- CLR_LCD:
- MOV LCD,#80H
- ACALL WR_COMM
- MOV R0,#16
- CLR1: MOV LCD,#' '
- ACALL WR_DATA
- DJNZ R0,CLR1
- MOV LCD,#0C0H
- ACALL WR_COMM
- MOV R0,#16
- CLR2: MOV LCD,#' '
- ACALL WR_DATA
- DJNZ R0,CLR2
- RET
- ;===============報錯============================
- ERROR: MOV LCD,#80H
- ACALL WR_COMM
- MOV DPTR,#ERORTAB
- ACALL DISP0
- RET
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
仿真程序和文檔下載:
基于51單片機的溫度控制系統.7z
(252.45 KB, 下載次數: 144)
2022-3-5 23:48 上傳
點擊文件名下載附件
仿真、代碼和文檔解釋 下載積分: 黑幣 -5
|