温度控制器.docx
- 文档编号:18097107
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:25
- 大小:163.49KB
温度控制器.docx
《温度控制器.docx》由会员分享,可在线阅读,更多相关《温度控制器.docx(25页珍藏版)》请在冰豆网上搜索。
温度控制器
单片机课程设计
课题:
温度控制器
系别:
专业:
姓名:
学号:
指导老师:
2013年01月10日
温度控制器
一、设计目的
这次单片机课程设计的目的主要是让生活在信息时代的我们,将所学知识应用于生产生活当中,熟悉单片机的使用方法和技巧,掌握温度控制系统设计的流程,方案的论证,选择,实施与完善。
通过对温度控制器的设计、制作、了解信息采集测试、控制的全过程,提高在电子工程设计和实际操作方面的综合能力,初步培养在完成项目过程中所应具备的基本素质和要求。
培养研发能力,通过对电子电路以及面对硬件对象,利用所学知识进行相应程序的设计,初步掌握在给定条件和要求的情况下,掌握如何巧妙合理地去设计系统中的各部分电路,并将它们有序的连接起来。
提高查阅资料、语言表达能力和将理论转化为实际的能力,以此巩固所学的知识,并将之有效地运用到实际生产生活中。
二、设计要求
用单片机设计一个简单的温控系统。
要求此系统具有对环境温度进行实时测量,并用数码管显示的能力,并且可以设置报警温度,当环境温度达到报警温度时,系统具有相应的报警反应,以达到警示的目的。
三、总体设计
3.1总体框图
如图1-1所示温度控制器电路主要由以下几个部分组成:
稳压电路部分、单片机STC89C52RC控制器、数码管显示部分、继电器、74HC573N锁存器、7805稳压管、DS18B20温度传感器及温度设置部分、报警显示电路等。
图1温度控制器方框图
3.2工作原理
通过DS18B20温度传感器从测试点采集温度,然后把温度转换成电压(或电流),温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏,不同的温度传感器,输出电压的范围也差别很大。
单片机STC89C52是温度测量电路的控制核心,它将采集到的实时的数字温度电压值,经过计算处理,得到相应的温度值,送到LED显示器以数字形式显示测量的温度。
LED显示器用于显示测量温度的结果。
报警温度控制电路用于在不同应用中灵活设定报警温度,在超过设定范围时,报警电路进行报警。
3.3主程序框图
图2主程序框图
温度控制器程序:
#include
#include
#defineKey_UPP2_5//上调温度
#defineKey_DOWNP2_6//下调温度
#defineRelayOutPortP2_2//继电器输出
#defineLEDPortP0//LED控制口
#defineLEDOneCP2_7//LEDDS1控制(十位)
#defineLEDTwoCP2_6//LEDDS2控制(个位)
#defineTMPortP2_3//DS1820DataPortunsignedcharcodeLEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//0-9的LED笔划,0xFF为空,0xF7为负号
staticunsignedcharbdataStateREG;//可位寻址的状态寄存器
sbitDS1820ON=StateREG^0;//DS1820是否存在
sbitSetTF=StateREG^1;//是否是在温度设置状态
sbitKeySETDown=StateREG^2;//是否已按过SET键标识
sbitPowTF=StateREG^3;//电源电源标识
sbitKeyTF=StateREG^4;//键盘是否允许
sbitKeySETDowning=StateREG^5;//SET是否正在按下
staticunsignedcharbdataTLV_at_0x0029;//温度变量高低位
staticunsignedcharbdataTHV_at_0x0028;
staticsignedcharTMV;//转换后的温度值
staticunsignedcharKeyV,TempKeyV;//键值
staticsignedcharTMRomV_at_0x0027;//高温限制
staticsignedcharTMSetV_at_0x0026;//温度设定值
staticunsignedcharKSDNum;//SET键连按时的采集次数
staticunsignedcharIntNum,IntNum2,IntNum3;//中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
staticsignedcharLED_One,LED_Two,LED_Three;//LED的显示位LED_One为十位,LED_Two为个位
voidmain(void)
{
voidInitDS1820(void);//定义函数
voidROMDS1820(void);
voidTMVDS1820(void);
voidTMRDS1820(void);
voidTMWDS1820(void);
voidTMREDS1820(void);
voidTMERDS1820(void);
voidReadDS1820(void);
voidWriteDS1820(void);
voidDelay_510(void);
voidDelay_110(void);
voidDelay_10ms(void);
voidDelay_4s(void);
voidV2ToV(void);
StateREG=0;//初始化变量
SetTF=1;
PowTF=1;//关电源
THV=0;
TLV=0;
TMV=0;
KeyV=0;
TempKeyV=0;
KSDNum=0;
IntNum=0;
IntNum2=0;
IntNum3=0;
LED_One=0;
LED_Two=0;
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMERDS1820();//E2PRAM中温度上限值调入RAM
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
ReadDS1820();//读出温度值和上限值
TMSetV=TMRomV;//拷贝保存在DS18B20ROM里的上限值到TMSetV
EA=1;//允许CPU中断
ET0=1;//定时器0中断打开
TMOD=0x1;//设定时器0为模式1,16位模式
TH0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
TR0=1;//开始定时
while
(1);
}
//定时器0中断外理中键扫描和显示
voidKeyAndDis_Time0(void)interrupt1using2
{0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
LEDPort=0xFF;
if(!
Key_UKeyV=1;(!
Key_DOWN)
KeyV=2;if(!
Key_SET)
KeyV=3;
//KeySETDowning=0;//清除
if(KeyV!
=0)//有键按下
{
Delay_10ms();//延时防抖按下10ms再测
if(!
Key_UP)
TempKeyV=1;
if(!
Key_DOWN)
TempKeyV=2;
if(!
Key_SET)
TempKeyV=3;
if(KeyV==TempKeyV)//两次值相等为确定接下了键
{
if(KeyV==3)//按下SET键,如在SET状态就退出,否则进入
{
//KeySETDowning=1;//表明SET正在按下
PowTF=0;//电源标识开
if(!
KeyTF)
if(SetTF)
{
SetTF=0;//标识位标识退出设定
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMWDS1820();//写温度上限指令
WriteDS1820();//写温度上限到DS18B20ROM
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMREDS1820();//温度上限值COPY回E2PRAM
}
else
SetTF=1;
if(!
KeySETDown)//没有第一次按下SET时,KeySETDown标识置1
KeySETDown=1;
else
KSDNum=KSDNum+1;//前一秒内有按过SET则开始计数
}
if(SetTF)//在SET状态下
{
if((KeyV==1)&&(!
KeyTF))
TMSetV=TMSetV+1;//上调温度
if((KeyV==2)&&(!
KeyTF))
TMSetV=TMSetV-1;//下调温度
if(TMSetV<=-55)//限制温度上下限
TMSetV=-55;
if(TMSetV>=125)
TMSetV=125;
}
if((!
KeyTF)&&(IntNum3==0))KeyTF=1;//当键盘处于可用时,锁定
}
if(KeySETDown)//在2秒内按下了SET则计中断发生次数用于长按SET时计时用
IntNum=IntNum+1;
if(IntNum>55)//中断发生了55次时(大约1.2秒)75为1.5秒左右
{
IntNum=0;
KeySETDown=0;
if(KSDNum==55)//如一直长按了SET1.2秒左右
{
RelayOutPort=1;//关闭继电器输出
PowTF=1;//电源标识关
LEDOneC=0;
LEDTwoC=0;
LEDThreeC=0;
LEDPort=0xBF;//显示"--"
Delay_4s();//延时
LEDOneC=1;
LEDTwoC=1;//关显示
LEDThreeC=1;
Delay_4s();
IntNum=0;
IntNum2=0;
IntNum3=0;
}
KSDNum=0;
}
}
KeyV=0;
TempKeyV=0;//清空变量准备下次键扫描
if(!
PowTF)
{
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMVDS1820();//温度转换指令
Delay_510();
Delay_510();//延时等待转换完成
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
ReadDS1820();//读出温度值
V2ToV();//转换显示值
if(TMV>TMSetV)//根据采集到的温度值控制继电器
{
RelayOutPort=0;
}
else
{
RelayOutPort=1;
}
if(SetTF)IntNum2=IntNum2+1;//用于闪烁计数
if(IntNum2>50)IntNum2=0;
if(KeyTF)IntNum3=IntNum3+1;//用于防止按键连按
if(IntNum3>25)
{
IntNum3=0;
KeyTF=0;
}
if((SetTF)&&(IntNum2<25))gotoInitEnd;//计数在后半段时显示
LEDPort=LED_One;
LEDOneC=0;
Delay_510();
LEDOneC=1;//显示十位数
LEDPort=LED_Two
LEDTwoC=0;
Delay_510();
LEDTwoC=1;//显示个位数
}
InitEnd:
;
}
voidV2ToV(void)//数值转换
{
TLV=TLV>>4;
THV=THV<<4;//读出的高低位数值移位
TMV=TLV|THV;//合并高低位放入TM为实际温度值
Sign=0;
if(SetTF||!
Key_SET)
Sign=TMSetV>>7;//取符号
else
Sign=TMV>>7;
if(Sign)
{
if(SetTF||!
Key_SET)
{
LED_One=(~(TMSetV-1))/10;//SET状态下显示设定值
LED_Two=((~(TMSetV-1))-LED_One*10)/10;
}
else
{
LED_One=(~TMV)/100;//LED_Two=((~TMV)-LED_One*100)/10;
LED_Three=(~TMV)-LED_One*100-LED_Two*10;
}
}
else
{
if(SetTF||!
Key_SET)
{
LED_One=(TMSetV)/10;//SET状态下显示设定值
LED_Two=(TMSetV-LED_One*10)/10
}
else
{
LED_One=(TMV)/10;//
LED_Two=(TMV-LED_One*10)/10;
}
voidInitDS1820(void)//初始化DS1820
}
四、各部分电路设计
4.1温度测量及设置报警温度电路
温度测量主要依靠DS18B20传感器,该传感器耐磨耐碰,体积小,比较抗干扰,使用方便,封装多种多样,适用于各种狭小空间的温度测量以及控制。
与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
4.1.1DS18B20的性能特点
(1)独特的单线接口仅需要一个端口引脚进行通信;
(2)多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
(3)无须外接部件;
(4)可通过数据供电,电压范围为3.0—5.5V;
(5)零待机功耗;
(6)温度以9或12位数字量读出;
(7)用户可定义的非易失性温度报警设置;
(8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
(9)负电压特性,电源极性接反时,温度计不会因发热而烧坏,但不能正常工作..
4.1.2DS18B20与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源,另一种是寄生电源方式。
单片机端口接单总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉。
温度/℃
二进制
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010001
0191H
+10.125
0000000010100010
00A2H
+0.5
0000000000001000
0008H
0
0000000000000000
0000H
—0.5
1111111111111000
FFF8H
—10.125
1111111101011110
FF5EH
—25.0625
1111111001101111
FE6FH
—55
1111110010010000
FC90H
表1DS18B20温度与测得值对应表
上拉开始时间最大为10μs。
采用寄生电源供电方式时VDD和GND端均接地。
由于单线制只有一根线,因此发送接口必须是三态的。
下边是设置报警温度以及温度测量的电路部分的图:
图3设置报警温度以及温度测量的电路部分
4.2稳压电路
7805集成稳压器的典型应用电路如下图4所示,这是一个输出正5V直流电压的稳压电源电路。
IC采用集成稳压器7805,C1、C2分别为输入端和输出端滤波电容,RL为负载电阻。
图47805稳压电路
4.3报警指示电路
在此,我们用到了继电器,下方的三极管是用来控制继电器,三极管型号为NPN9014,当输入高电平,NPN饱和导通,从而使继电器导通从而使开关吸合,当达到报警温度时,三极管给的低电平从而使红色LED灯亮,以此报警,低于此温度时继电器吸合,变为绿灯,正常。
报警指示电路如下图5:
图5报警电路
4.4单片机控制及显示电路
单片机STC89C52是温度测量电路的控制核心,它将采集到的实时的数字温度电压值,经过计算处理,得到相应的温度值,送到LED显示器以数字形式显示测量的温度。
LED显示器用于显示测量温度的结果。
报警温度控制电路用于在不同应用中灵活设定报警温度,在超过设定范围时,报警电路进行报警。
4.4.110引脚数码管
两位共阳数码管:
图6数码管
将数码管正对着自己,dp在右下角。
从上边一行引脚开始,从左至右依次为:
a,b,1位选,2位选,f;下边一行从左至右依次为:
c,dp,e,d,g。
4.5单片机STC89C52RC
STC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统80c51单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
4.5.1单片机STC89C52RC的主要特性
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.。
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,频率可达48MHz。
4.用户应用程序空间为8K字节。
5.片上集成512字节RAM。
6.通用I/O口(32个)复位后为:
P1/P2/P3/P4是准双向口,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。
8.具有EEPROM功能。
9.具有看门狗功能。
10.共3个16位定时器/计数器,即定时器T0、T1、T2。
11.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外中断低电平触发中断方式唤醒。
12.通用异步串行口(UART),还可用定时器软件实现多个UART。
13.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
14.PDIP封装。
4.5.2STC89C52RC单片机的工作模式
掉电模式:
典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序。
空闲模式:
典型功耗2mA典型功耗。
正常工作模式:
典型功耗4Ma~7mA典型功耗。
掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备。
4.5.3STC89C52RC引脚功能说明
VCC(40引脚):
电源电压。
VSS(20引脚):
接地。
P0端口(P0.0~P0.7P0.7,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8TTL负载,对端口P0写入每个引脚能驱动写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。
此时,P0内部上拉电阻有效。
在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;而在校验程序时,则输出指令字节则输出指令字节。
验证时,要求外上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):
P1口是一个内部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(I)。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:
在对FlashROM编程和程序校验时,P1接收低8位表XXP1.0和P1.1引脚复用功能。
P2端口(P2.0~P2.7,21~28引脚):
P2口是一个带上拉电阻的8位双向I/O端口。
P2的输出缓冲器可以驱动(吸收或输出电流方式)4TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I)。
在访问外部程序存储器和16
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 控制器
![提示](https://static.bdocx.com/images/bang_tan.gif)