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