版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 目錄第1章 恒溫控制系統(tǒng)完成的功能1 第2章 總體設(shè)計(jì)方案1 2.1 單片機(jī)主控制電路1 2.3 溫度測量與控制模塊1 2.2 人機(jī)交互模塊2第3 章 硬件電路詳細(xì)設(shè)計(jì) 2 3.1 單片機(jī)最小系統(tǒng)2 3.2 人機(jī)交互模塊3 3.3 測溫模塊5 3.4 溫度控制模塊5 3.5 總電路圖6 第4 章 系統(tǒng)軟件設(shè)計(jì)6 4.1 原
2、理框圖6 4.2 詳細(xì)程序8 結(jié)論16參考文獻(xiàn)16專心-專注-專業(yè) 第1章 恒溫控制系統(tǒng)完成的功能 本恒溫控制系統(tǒng)設(shè)計(jì)采用現(xiàn)在流行的51系列單片機(jī),配以DS18B20數(shù)字溫度傳感器,能夠較精確的控制溫度,并顯示設(shè)定溫度與當(dāng)前溫度。單片機(jī)將實(shí)時檢測到的溫度與設(shè)定的溫度進(jìn)行比較,根據(jù)兩者差值決定是否讓加熱電阻加熱以及加熱多長時間。 實(shí)現(xiàn)了基本的溫度控制功能:當(dāng)溫度低于設(shè)定溫度1時,單片機(jī)輸出高電平,控制大功率三極管導(dǎo)通,進(jìn)而使得加熱電阻通電,加熱電阻加熱,溫度快速上升,同時紅燈亮。當(dāng)溫度上升到與設(shè)定溫度差值小于1時,單片機(jī)輸出高低電平的時間不相等,也就
3、是加熱電阻的通斷時間不等,使得溫度緩慢上升,同時紅、綠燈都亮。當(dāng)溫度上升到設(shè)定溫度時,單片機(jī)輸出低電平,三極管截止,加熱電阻停止加熱,同時綠燈亮。 數(shù)碼管實(shí)時顯示溫度,精確到小數(shù)點(diǎn)后一位,同時可以通過2個按鍵調(diào)節(jié)設(shè)定溫度。 第2章 總體設(shè)計(jì)方案系統(tǒng)總體框圖如圖1所示。 單 片 機(jī) 被 控 制 對 象溫度測量人機(jī)交互模塊 溫度控制2.1 單片機(jī)主控制電路 主控制電路采用STC 89C52的單片機(jī)作為控制主機(jī)。89C52作為51系列單片機(jī)的一種,其使用性能穩(wěn)定,價格便宜,完全能夠滿足此次設(shè)計(jì)的需求。89C52內(nèi)部集成了程序存儲器,可以裝載用戶程序,方便使
4、用。 外 部 接 口 電 路 電 源 STC 89C52 單 片 機(jī) 時鐘電路 復(fù)位電路燒錄口2.2 溫度測量與控制模塊 溫度測量模塊采用美國DALLAS半導(dǎo)體公司的DS18B20溫度傳感器。該傳感器與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度。這一部分主要完成對溫度信號的采集和轉(zhuǎn)換工作,由DS18B20數(shù)字溫度傳感器及其與單片機(jī)的接口部分組成。數(shù)字溫度傳感器DS18B20把采集到的溫度通過數(shù)據(jù)引腳P1.3傳到單片機(jī),單片機(jī)接受溫度并存儲。 溫度控制模塊采用FAIRYCHILD的8N60C開關(guān)管、10W10的水泥電阻。由單片機(jī)根據(jù)設(shè)定溫度與測量溫度之差決定輸出高低電平,控制8
5、N60C開關(guān)管的通斷,近而控制水泥電阻加熱。STC 89C52單片機(jī)被 控 制對 象DS18B20溫度傳感器控制信號8N60C開關(guān)管10W1的水泥電阻10V直流電2.2 人機(jī)交互模塊 人機(jī)交互模塊主要包括鍵盤、數(shù)碼管、LED指示燈,其中鍵盤用于供用戶輸入溫度期望值,數(shù)碼管用于顯示用戶設(shè)定溫度及控制對象中溫度,LED指示燈用于指示系統(tǒng)工作狀態(tài)(加熱中,加熱過高時)。 鍵盤 STC 89C52 單 片 機(jī) 數(shù)碼管 LED指示燈 第3章 硬件電路詳細(xì)設(shè)計(jì)3.1 單片機(jī)最小系統(tǒng): 包括電源電路、復(fù)位電路、時鐘電路、燒錄口共四個單元,其中電源電路與燒錄口省略。電路圖如下:
6、 其中,31端口接高電平,表明單片機(jī)復(fù)位后訪問內(nèi)部程序存儲器;由于P0口作為輸出口時處于漏極開路狀態(tài),所以必須外接上拉電阻,如果后期實(shí)驗(yàn)中不使用其作為輸出口,則此處可省略。 3.2 人機(jī)交互模塊:(1) 、數(shù)碼管: 其中,采用8段共陰數(shù)碼管,P0、P2口輸出段碼、位碼,P1.4和P1.6為段鎖存,P1.5和P1.7為位鎖存。數(shù)碼管上面四位顯示用戶測量溫度,下面四位顯示用戶設(shè)定溫度。(2) 、LED指示燈: 其中,指示燈綠色用于指示加熱溫度過高、紅色用于指示加熱中,當(dāng)兩個LED均亮起時,表示當(dāng)前溫度接近設(shè)定溫度,也可理解成保溫狀態(tài)。(3) 、按鍵 其中,上面的按鍵表示溫度上升1、下面的
7、按鍵表示溫度下降1。3.3 測溫模塊: 測溫模塊采用美國DALLAS半導(dǎo)體公司的DS18B20溫度傳感器。其輸出與P1.3相連。3.4 溫度控制模塊: 8N60C是仙童公司出品的一款N溝道的MOSFET,最小開啟電壓為4V,最大關(guān)斷電壓為2V,故可以直接接在單片機(jī)IO口,由高低電平控制通斷。 8N60C的柵極(G)與P1.2相連,源級(S)接地(注意與單片機(jī)控制端共地,否則將導(dǎo)致無法關(guān)斷),漏極(D)接水泥電阻,水泥電阻另一端接10V直流電。 水泥電阻是將電阻線繞在無堿性耐熱瓷件上,外面加上耐熱、耐濕及耐腐蝕材料,并把繞線電阻體放入方形瓷器框內(nèi),用特殊不燃性耐熱水泥充填密封
8、而成。水泥電阻的外側(cè)主要是陶瓷材質(zhì)。3.5 總電路圖: 第4章 系統(tǒng)軟件設(shè)計(jì)4.1 原理框圖:(1) 、主程序 開始 按鍵輸入端口置高,定時器初始化調(diào)用讀溫度子程序顯示被測溫度和用戶設(shè)定溫度Y是否按下加溫度設(shè)定鍵?設(shè)定溫度加1NY是否按下減溫度設(shè)定鍵?設(shè)定溫度減1N初始設(shè)定溫度為20當(dāng)前溫度<設(shè)定溫度1YP1.2置高電平,加熱電阻加熱,紅燈亮NY當(dāng)前溫度>=設(shè)定溫度?P1.2置低電平,加熱電阻停止加熱,綠燈亮N調(diào)節(jié)P1.2的高低電平時間長短的比例,紅綠燈同時亮系統(tǒng)是否斷電?NY 結(jié)束(2) 、定時器T0中斷程序定時器T0中斷 定時器初始化調(diào)用數(shù)碼管顯示子程序N計(jì)
9、數(shù)>300?Y 讀溫度標(biāo)志置1 中斷返回4.2 詳細(xì)程序:(1)、主程序/*- 名稱:恒溫控制系統(tǒng)采用DS18b20并用數(shù)碼管顯示當(dāng)前測的溫度 和用戶設(shè)定的溫度,用戶可用按鍵增加或減小溫度。 編寫:班小組 日期:2013.10 內(nèi)容:精確到小數(shù)點(diǎn)后一位,顯示格式 符號 xxx.x C-*/#include<reg52.h> /包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include "18b20.h"#include "delay.h"#define DataPort0 P0 /定義數(shù)據(jù)端口 程序中遇到D
10、ataPort0 則用P0 替換#define DataPort1 P2 /定義數(shù)據(jù)端口 程序中遇到DataPort1 則用P1 替換sbit LED_Green=P10;/定義綠色指示燈sbit LED_Red=P11;/定義紅色指示燈sbit PWM=P12; /定義加熱端口sbit LATCH1=P14;/定義鎖存使能端口 段鎖存sbit LATCH2=P15;/ 位鎖存sbit LATCH3=P16;/定義鎖存使能端口 段鎖存sbit LATCH4=P17;/ 位鎖存sbit KEY_ADD=P32;/定義按鍵輸入端口 增加1度sbit KEY_DEC=P33;/減小1度bit Rea
11、dTempFlag1;/定義讀時間標(biāo)志1unsigned char code DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 顯示段碼值09unsigned char code WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsigned char TempData18; /存儲顯示值的全局變量1unsigned char TempData28; /存儲顯示值的全局變量2/*- 函數(shù)聲明-*/void DelayUs2x(unsigned
12、char t);/us延時函數(shù) void DelayMs(unsigned char t); /ms延時函數(shù)void Display1(unsigned char FirstBit,unsigned char Num);/數(shù)碼管1顯示當(dāng)前測的溫度函數(shù)void Display2(unsigned char FirstBit,unsigned char Num);/數(shù)碼管2顯示用戶設(shè)定溫度函數(shù)void Init_Timer0(void);/定時器T0初始化函數(shù)/*- 主函數(shù)-*/void main (void) unsigned int TempH,TempL,temp; unsigned cha
13、r usertemp=20;/開機(jī)設(shè)定20度 KEY_ADD=1; /按鍵輸入端口電平置高 KEY_DEC=1; Init_Timer0(); while (1) /主循環(huán) /*- 顯示當(dāng)前測得的溫度-*/ if(ReadTempFlag1=1) ReadTempFlag1=0; temp=ReadTemperature(); TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10;/小數(shù)近似處理 if(TempH/10=0) /不考慮負(fù)溫度 TempData10=0;/消隱 else TempData10=DuanMaTempH/
14、10; /十位溫度 TempData11=DuanMaTempH%10|0x80; /個位溫度,帶小數(shù)點(diǎn) TempData12=DuanMaTempL;/顯示小數(shù)點(diǎn)后一位 TempData13=0x39; /顯示C符號 /*- 顯示用戶設(shè)定的溫度-*/ if(!KEY_ADD) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY_ADD) /再次確認(rèn)按鍵是否按下,沒有按下則退出 while(!KEY_ADD);/如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待 if(usertemp<50) /加操作 usertemp+; if(!
15、KEY_DEC) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY_DEC) /再次確認(rèn)按鍵是否按下,沒有按下則退出 while(!KEY_DEC);/如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待 if(usertemp>10) /減操作 usertemp-; TempData20=DuanMausertemp/10; TempData21=DuanMausertemp%10|0x80; TempData22=DuanMa0; TempData23=0x39; Display2(0,4);/*- 紅綠燈指示加溫狀態(tài) -*/ i
16、f(TempH<usertemp-1)/當(dāng)測的溫度低于用戶設(shè)定溫度1度時,紅燈亮, /PWM=1三極管導(dǎo)通,加熱電阻快速加熱 LED_Red=0; LED_Green=1; PWM=1; else if(TempH>=usertemp)/當(dāng)測的溫度高于用戶設(shè)定溫度時,綠燈亮, /PWM=0三極管關(guān)閉,加熱電阻停止加熱 LED_Red=1; LED_Green=0; PWM=0; else / 當(dāng)測的溫度與用戶設(shè)定溫度的差值小于1度且沒達(dá)到用戶設(shè)定溫度時,加熱 LED_Red=0;/電阻加熱,紅綠燈都亮,當(dāng)溫度超過設(shè)定溫度時,綠燈亮,加熱電阻又 LED_Green=0;/會斷開,從而
17、導(dǎo)致溫度維持一定范圍,紅燈會閃爍,代表溫度恒定。 PWM=1; /*- 顯示函數(shù),用于動態(tài)掃描數(shù)碼管 輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸入0表示從第一個顯示。 Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2-*/void Display1(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort0=0; /清空數(shù)據(jù),防止有交替重影 LATCH1=1; /段鎖存 LATCH1=0; DataPort0=WeiMai+FirstBit
18、; /取位碼 LATCH2=1; /位鎖存 LATCH2=0; DataPort0=TempData1i; /取顯示數(shù)據(jù),段碼 LATCH1=1; /段鎖存 LATCH1=0; i+; if(i=Num) i=0;void Display2(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;i<Num;i+) DataPort1=0; /清空數(shù)據(jù),防止有交替重影 LATCH3=1; /段鎖存 LATCH3=0; DataPort1=WeiMai+FirstBit; /取位碼 LATCH4=1; /位鎖存
19、LATCH4=0; DataPort1=TempData2i; /取顯示數(shù)據(jù),段碼 LATCH3=1; /段鎖存 LATCH3=0; DelayMs(2); / 掃描間隙延時,時間太長會閃爍,太短會造成重影 /*- 定時器T0初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 /TH0=0x00; /給定初值 /TL0=0x00; EA=1; /總中斷打開 ET0=1; /允許定時器T0中斷 TR0=1; /啟動定時器T0/*- 定時器T0中斷子程序-*/voi
20、d Timer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新賦值 2ms TL0=(65536-2000)%256; Display1(0,4); / 調(diào)用數(shù)碼管掃描 num+; if(num=300) / num=0; ReadTempFlag1=1; /讀標(biāo)志位置1(2) 、18B20.c程序#include"delay.h"#include"18b20.h"/*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=
21、0; DQ = 1; /DQ復(fù)位 DelayUs2x(5); /稍做延時 DQ = 0; /單片機(jī)將DQ拉低 DelayUs2x(200); /精確延時 大于 480us 小于960us DelayUs2x(200); DQ = 1; /拉高總線 DelayUs2x(50); /1560us 后 接收60-240us的存在脈沖 dat=DQ; /如果x=0則初始化成功, x=1則初始化失敗 DelayUs2x(25); /稍作延時返回 return dat;/*- 讀取一個字節(jié)-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigne
22、d char dat = 0;for (i=8;i>0;i-) DQ = 0; / 給脈沖信號 dat>>=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; DelayUs2x(25); return(dat);/*- 寫入一個字節(jié)-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat>>=1; DelayUs2x(25);/*-
23、 讀取溫度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換DelayMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar(); /低位b=Rea
24、dOneChar(); /高位b<<=8;t=a+b;return(t);(3) 、18B20.h程序#ifndef _DS18B20_H_#define _DS18B20_H_#include<reg52.h> /包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<intrins.h>#define uchar unsigned char#define uint unsigned int;/*- 端口定義-*/sbit DQ=P13;/ds18b20 端口/*- 函數(shù)聲明-*/unsigned int ReadTemperatu
25、re(void);bit Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);#endif(4) 、delay.c程序#include "delay.h"/*- uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時請使用匯編,大致延時 長度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t)
26、 while(-t);/*- mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時請使用匯編-*/void DelayMs(unsigned char t) while(t-) /大致延時1mS DelayUs2x(245); DelayUs2x(245); (5) 、delay.h程序#ifndef _DELAY_H_#define _DELAY_H_/*- uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時請使用匯編,大致延時 長度如下 T=tx2+5 uS -*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小額信用借款合同書樣本
- 醫(yī)療器材合作合同樣本
- 農(nóng)村宅基地買賣合同樣本
- 夫妻雙方自愿離婚協(xié)議書撰寫要點(diǎn)
- 2024大學(xué)生就業(yè)協(xié)議書范例
- 離婚標(biāo)準(zhǔn)協(xié)議書815672024年
- 股東之間的投資合作協(xié)議
- 汽車買賣合同書樣本
- 電視劇動畫制作合作協(xié)議
- 合同擔(dān)保書樣本
- 視光門診運(yùn)營計(jì)劃方案
- 護(hù)理評估單工具的使用
- 2021年大慶精神鐵人精神知識競賽題庫
- 浙江泰隆商業(yè)銀行員工手冊
- 審計(jì)技能實(shí)訓(xùn)教程(喻竹 第二版) 教案全套 1.1-9.2 業(yè)務(wù)承接與評價-審計(jì)底稿歸檔
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試卷(含答案解析)
- 生涯發(fā)展報(bào)告通用模板
- 越人歌音樂分析報(bào)告
- 2024年湖北省工業(yè)建筑集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 年輕干部優(yōu)勢分析報(bào)告
- 社區(qū)家庭教育活動指導(dǎo)方案
評論
0/150
提交評論