這是一個(gè)51單片機(jī)的溫度控制系統(tǒng),包括proteu仿真程序、代碼和文檔。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.68 KB, 下載次數(shù): 88)
下載附件
2018-5-8 02:27 上傳
0.png (54.29 KB, 下載次數(shù): 73)
下載附件
2018-5-8 02:27 上傳
目錄
一、系統(tǒng)設(shè)計(jì)第 1 頁
系統(tǒng)總體設(shè)計(jì)方案第 1 頁
溫度信號采集電路選擇和數(shù)據(jù)處理第 3 頁
軟件設(shè)計(jì)第 3 頁
二、單元電路設(shè)計(jì)第 5 頁
溫度信號采集電路第 5 頁
步進(jìn)電機(jī)電路 第 5 頁
液晶顯示模塊 第 6 頁
晶振復(fù)位電路第 7 頁
三、總結(jié)體會(huì)第 7 頁
四、參考文獻(xiàn)第 8 頁
附錄:程序清單第 8 頁
一、系統(tǒng)設(shè)計(jì)(一) 系統(tǒng)總體設(shè)計(jì)方案設(shè)計(jì)框圖如下所示: 圖1 系統(tǒng)總體設(shè)計(jì)框圖
總電路圖如下:
圖2 系統(tǒng)總電路圖 簡單功能說明: 一個(gè)顯示實(shí)時(shí)溫度的小系統(tǒng),可以自行設(shè)定高溫報(bào)警和低溫報(bào)警值,實(shí)現(xiàn)溫度控制電機(jī)帶動(dòng)外圍器件功能。本系統(tǒng)通過溫度傳感器DS18B20實(shí)現(xiàn)對溫度數(shù)據(jù)的采集,數(shù)據(jù)處理后顯示到液晶屏上,通過數(shù)據(jù)處理,溫度值精確度為0.1。
簡單操作方法: 系統(tǒng)上電后液晶顯示實(shí)時(shí)溫度,通過按鍵可以設(shè)定高低溫限定值: A.按下K1,顯示系統(tǒng)的高低溫限定值; B.再按K1,進(jìn)入設(shè)定狀態(tài),液晶屏光標(biāo)閃動(dòng)提示設(shè)定,此時(shí)設(shè)定高溫限值還是低溫限值可以在 K1鍵轉(zhuǎn)換; C.進(jìn)入設(shè)定狀態(tài)后,K2鍵用于值加1,K3鍵用于值減1; D.設(shè)定完后,按鍵K4確認(rèn)后退出,返回顯示實(shí)時(shí)溫度! (二) 溫度信號采集電路選擇和數(shù)據(jù)處理方案:采用溫度傳感器DS18B20 美國DALLAS公司的產(chǎn)品可編程單總線數(shù)字式溫度傳感器DS18B20可實(shí)現(xiàn)室內(nèi)溫度信號的采集,有很多優(yōu)點(diǎn):如直接輸出數(shù)字信號,故省去了后繼的信號放大及模數(shù)轉(zhuǎn)換部分,外圍電路簡單,成本低;單總線接口,只有一根信號線作為單總線與MCU連接,且每一只都有自己唯一的64位系列號存儲(chǔ)在其內(nèi)部的ROM存儲(chǔ)器中,故在一根信號線上可以掛接多個(gè)DS18820,便于多點(diǎn)測量且易于擴(kuò)展. DS18B20的測溫范圍較大,集成度較高,故選用此方案。 DS18B20內(nèi)部1,2位寄存器存放實(shí)時(shí)溫度值,本系統(tǒng)對以上兩寄存器數(shù)據(jù)處理后精度為0.1;DS18B20第3,4位寄存器分別存放高溫限值和低溫限值,并且DS18B20內(nèi)部還有EEPROM,因此通過第3,4寄存器與EEPROM的數(shù)據(jù)交換就能實(shí)現(xiàn)對設(shè)定后的值進(jìn)行貯存。 (三) 軟件設(shè)計(jì)本實(shí)驗(yàn)中我選用Keil編程平臺(tái). 主程序流程圖:
圖3 主程序流程圖
二、單元電路設(shè)計(jì)(一) 溫度信號采集電路圖4 溫度信號采集電路 (二) 步進(jìn)電機(jī)電路圖5 步進(jìn)電機(jī)電路
(三) 液晶顯示模塊圖6液晶顯示模塊 (四) 晶振復(fù)位電路圖7 晶振復(fù)位電路
三、總結(jié)體會(huì)本次設(shè)計(jì)給我們提供了一個(gè)將自己所學(xué)的知識(shí)應(yīng)用于實(shí)踐的良機(jī),通過了兩個(gè)周的設(shè)計(jì)我學(xué)到了很多非常有價(jià)值的東西,懂得了如何將理論知識(shí)轉(zhuǎn)化成實(shí)際程序的設(shè)計(jì);掌握的單片機(jī)開發(fā)與設(shè)計(jì)的思路與方案確定;學(xué)會(huì)了更有效的查找自己所需的資料;同時(shí)也意識(shí)到了團(tuán)隊(duì)協(xié)作的重要性;掌握了硬件與程序設(shè)計(jì)的一般步驟和方法。這對我們以后的學(xué)習(xí)和工作的是非常有幫助的。 設(shè)計(jì)是我們將來必需的技能,這次設(shè)計(jì)剛好給我們提供了一個(gè)應(yīng)用自己所學(xué)知識(shí)的機(jī)會(huì),從到圖書館和網(wǎng)上查找資料到對硬件與程序模塊的設(shè)計(jì)對各模塊的調(diào)試再到最后整體設(shè)計(jì)調(diào)試,都對我所學(xué)的知識(shí)進(jìn)行了檢驗(yàn),增強(qiáng)了自信心。 通過本次設(shè)計(jì),我進(jìn)一步溫習(xí)和鞏固了課本的理論知識(shí),對單片機(jī)各接口與外部電路之間的連接關(guān)系有了更加深刻的理解。同時(shí)掌握了Proteus和keil軟件的基本應(yīng)用。同時(shí),在設(shè)計(jì)過程中,將理論知識(shí)應(yīng)用于實(shí)際應(yīng)用,增強(qiáng)了理論聯(lián)系實(shí)際的能力。雖然設(shè)計(jì)時(shí)有時(shí)一個(gè)問題需要我們花費(fèi)很長的時(shí)間,很煩很累但當(dāng)我們通過查找資料解決了之后心里很開心很有成就感。同時(shí)也使我明白了要將理論運(yùn)用于實(shí)踐還是一種非常重要的能力,要想牢固的掌握所學(xué)的知識(shí)我們必須將理論與實(shí)踐結(jié)合起來,用理論來指導(dǎo)實(shí)踐,用實(shí)踐來驗(yàn)證理論,增強(qiáng)對理論的理解。不斷地充實(shí)自己的理論,提高自己的動(dòng)手能力。最終完成了整個(gè)設(shè)計(jì)之后,使我更加堅(jiān)信只要我們努力和采用正確的方法,沒有什么事是我們解決不了的。 最后,我在這里衷心地感謝所有教給我知識(shí)和在設(shè)計(jì)中給予我?guī)椭睦蠋焸兒屯瑢W(xué)們,是他們給我們的知識(shí)才使我們得以順利完成此次設(shè)計(jì)。
單片機(jī)匯編語言源程序如下:
- ;-------------------------------------------------
- ; 簡單功能說明:一個(gè)顯示實(shí)時(shí)溫度的小系統(tǒng),可以自行設(shè)
- ; 定高溫報(bào)警和低溫報(bào)警值,實(shí)現(xiàn)溫度控制電機(jī)帶動(dòng)外圍器
- ; 件功能。
- ;
- ;-------------------------------------------------
- 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 ;溫度高字節(jié)
- TEMPL EQU 23H ;溫度低字節(jié)
- 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 ;報(bào)錯(cuò)
-
- LOOP: ACALL READ_T ;1820讀取溫度
- ACALL DISP_TEMP ;液晶顯示實(shí)時(shí)溫度
- ACALL KEYSCAN ;鍵盤設(shè)定高溫限值和低溫限值
- ACALL TEMP_COMP
- JMP LOOP
- ;=============啟動(dòng)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寫字節(jié)========================
- 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數(shù)據(jù)======================
- 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
- ;===========轉(zhuǎn)換數(shù)據(jù)=============================
- TURN: MOV XIAOSHU,TEMPL ;保存TEMPL值,后面用于取低4位轉(zhuǎn)換小數(shù)部分
- 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,進(jìn)入鍵盤掃描
- ACALL DELAY20
- JNB K1,$
- ACALL CLR_LCD ;清屏
- ACALL DISP_THL ;顯示高溫限值和低溫限值
- ACALL SET_HL ;設(shè)定限值
- ACALL WR_THL ;把高溫限值和低溫限值寫入RAM
- //.../ACALL LED
- ACALL WR_PROM ;限值復(fù)制到EEPROM中
- RETUN: RET
- ;------------設(shè)定高低限值----------------------
- SET_HL: //JNB K4,EXIT
- JB K1,KEY4
- ACALL DELAY20
- JNB K1,$
- CPL 20H.1 ;標(biāo)志位,標(biāo)志設(shè)定高溫限值或低溫限值
- JB 20H.1,SET_H
- JMP SET_L
- ;-------------調(diào)高溫限值-------------------------
- SET_H:
- ACALL TH_SHAN ;光標(biāo)閃,進(jìn)入設(shè)定
-
- KEY2H: JNB K1,SET_L ;高溫限值與低溫限值間設(shè)定轉(zhuǎn)換
- 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
- ;-------------調(diào)低溫限值------------------------------
- SET_L:
- ACALL TL_SHAN
- KEY2L: JNB K1,SET_H ;高溫限值與低溫限值間設(shè)定轉(zhuǎn)換
- 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用于退出設(shè)定
- JMP SET_HL
- //JMP SET_HL
- EXIT: ACALL DELAY20
- JNB K4,$
- MOV LCD,#00001100B ;設(shè)置液晶光標(biāo)不顯示、不閃爍
- 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
- */
- ;=============啟動(dòng)電機(jī)========================
- ;電機(jī)接口是P1低4位,因?yàn)镻1.7是溫度傳感器的控制口
- ;避免沖突,電機(jī)接口按位控制
- 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
- ;===============報(bào)錯(cuò)============================
- ERROR: MOV LCD,#80H
- ACALL WR_COMM
- MOV DPTR,#ERORTAB
- ACALL DISP0
- RET
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
仿真程序和文檔下載:
基于51單片機(jī)的溫度控制系統(tǒng).7z
(252.45 KB, 下載次數(shù): 144)
2022-3-5 23:48 上傳
點(diǎn)擊文件名下載附件
仿真、代碼和文檔解釋 下載積分: 黑幣 -5
|