基于某单片机的温度控制器附程序代码.docx
- 文档编号:29665842
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:31
- 大小:374.61KB
基于某单片机的温度控制器附程序代码.docx
《基于某单片机的温度控制器附程序代码.docx》由会员分享,可在线阅读,更多相关《基于某单片机的温度控制器附程序代码.docx(31页珍藏版)》请在冰豆网上搜索。
基于某单片机的温度控制器附程序代码
生产实习报告书
报告名称
基于单片机的温度控制系统设计
姓名
学号
541007070138、541007070140、541007070141
院、系、部
计算机与通信工程学院
专业
信息工程10-01
指导教师
2013年9月1日
基于单片机的温度控制系统设计
1.引言
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。
数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。
其中数字温控器就是一个典型的例子。
数字温控器具有读数方便、测温围广、测温精确、功能多样话等优点。
其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC12C5A60S2单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示,并能任意设定报警温度的温度围,实现声光报警。
在我们的实习过程中,我们首先要根据原理图焊接一个STC12C5A60S2单片机的开发板,经测试准确无误后,编写程序实现上面所说的数字温度控制器。
2.设计要求
1.控制温箱温度
2.加热:
电炉丝,这里改成发光二极管
3.冷却:
自然or风冷
4.温度目标区间:
-50-100℃
5.运行环境:
常温
6.供电:
+5v
7.控制精度:
±2℃
8.温度可设定,如果下限超过上限,显示错误。
9.温度可显示
10.超温报警
3.设计思路
设计一个单片机测控系统,一般可分为四个步骤:
(1)需求分析,方案论证和总体设计
需求分析:
被测控参数的形式(电量、非电量、模拟量、数字量等)、被测控参数的围、性能指标、系统功能、工作环境、显示、报警、打印要求等。
方案论证:
根据要求,设计出符合现场条件的软硬件方案,又要使系统简单、经济、可靠,这是进行方案论证与总体设计一贯坚持的原则。
(2)器件选择,电路设计制作,数据处理算法,软件的编制阶段。
(3)系统调试与性能测定。
(4)文件编制。
文件包括:
任务描述、设计的指导思想及设计方案论证、性能测定及现场试用报告与说明、使用指南、软件资料(流程图、子程序使用说明、地址分配、程序清单)、硬件资料(电原理图、元件布置图及接线图、接插件引脚图、线路板图、注意事项)。
文件不仅是设计工作的结果,而且是以后使用、维修以及进一步再设计的依据。
因此,一定要精心编写,描述清楚,使数据及资料齐全。
4.方案论证
4.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。
这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。
4.2方案二
考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。
另外DS18B20具有3引脚的小体积封装,测温围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量围与精度都能符合设计要求。
以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、围等方面都能很好地达到要求,故本设计采用方案二。
5.工作原理
温度传感器DS18B20从设备环境的不同位置采集温度,单片机AT89S51获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。
当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备(压缩制冷器),并通过三极管驱动扬声器发出警笛声。
当采集的温度经处理后低于设定温度的下时,单片机通过三极管驱动继电器开启升温设备(加热器),并通过三极管驱动扬声器发出警笛声。
6.硬件设计
6.1单片机模块
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
1.增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;
2.工作电压:
STC12C5A60S2系列工作电压:
5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:
3.6V-2.2V(3V单片机);
3.工作频率围:
0-35MHz,相当于普通8051的0~420MHz;
4.用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节;
5.片上集成1280字节RAM;
6.通用I/O口(36/40/44个),复位后为:
准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;
8.有EEPROM功能(STC12C5A62S2/AD/PWM无部EEPROM);
9.看门狗;
10.部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);
11.外部掉电检测电路:
在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;
12.时钟源:
外部高精度晶体/时钟,部R/C振荡器(温漂为+/-5%到+/-10%以)1用户在下载用户程序时,可选择是使用部R/C振荡器还是外部晶体/时钟,常温下部R/C振荡器频率为:
5.0V单片机为:
11MHz~15.5MHz,3.3V单片机为:
8MHz~12MHz,精度要求不高时,可选择使用部时钟,但因为有制造误差和温漂,以实际测试为准;
13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器再加上2路PCA模块可再实现2个16位定时器;
14.2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;
15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2),CCP1/P1.4(也可通过寄存器设置到P4.3);
16.PWM(2路)/PCA(可编程计数器阵列,2路):
——也可用来当2路D/A使用
——也可用来再实现2个定时器
——也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);
17.A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;
19.STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);
20.工作温度围:
-40-+85℃(工业级)/0-75℃(商业级)21.封装:
PDIP-40,LQFP-44,LQFP-48I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。
图6-1STC12C5A60S2管脚图
6.2数字温度传感器模块
6.2.1DS18B20性能
●独特的单线接口仅需一个端口引脚进行通信
●简单的多点分布应用
●无需外部器件
●可通过数据线供电
●零待机功耗
●测温围-55~+125℃,以0.5℃递增
●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃
●温度数字量转换时间200ms,12位分辨率时最多在750ms把温度转换为数字
●应用包括温度控制、工业系统、消费品、温度计和任何热感测系统
●负压特性:
电源极性接反时,传感器不会因发热而烧毁,但不能正常工作
6.2.2DS18B20外形及引脚说明
图6.2.2DS18B20外形及引脚
●GND:
地
●DQ:
单线运用的数据输入/输出引脚
●VD:
可选的电源引脚
6.2.3DS18B20接线原理图
单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。
图6.2.3DS18B20接线原理图
6.3按键模块
单片机应用系统中按键或键盘都是以开关状态来设置控制功能或输入数据。
键开关状态的可靠输入:
为了去抖动采用软件方法,它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响
键盘共有3个按键,用于方便设定温度。
图6.3DS18B20接线原理图
,转换,用于转换设置最高或最低温度限度值;
增加,用于增加最高或最低温度限度值;
减少,用于减少最高或最低温度限度值
6.4声光报警模块
当采集的温度经处理后超过规定温度围时,蜂鸣器报警。
当超过温度下限时,二极管报警。
具体电路连接如图所示。
图6.4左图低温,二极管报警。
右图超出围,蜂鸣器报警。
6.5数码管显示模块
本部分电路主要使用七段数码管,单片机通过P0口将要显示的数据信号传送到数码管显示,另外通过P1口的某几位,通过741LS38译码器,将要显示的位送到片选信号。
具体见实际连线图如图6-5。
图6-5数码管连接图
7.程序设计
7.1主程序模块
主程序调用了4个子程序,分别是数码管显示程序、键盘扫描及按键处理程、温度值获取程序、延时程序。
程序开始的时候先设置定时器0初始化,然后进行键盘扫描接着就判断按键是否被按下,按下就进行按键处理。
然后获取温度值并经行处理(判断是否为负温度,以及进行分位),得到温度的十位、个位和十分位。
并判断但前温度与所设置上下限温度关系,大于上限温度或小于下限温度则报警,否则继续向下执行,并开始循环。
其中显示程序在中断中进行。
7.2读温度值模块
对温度传感器送过来的数据进行读取,读温度值模块需要调用4个子程序,分别为:
a)DS18B20初始化子程序:
让单片机知道DS18B20在总线上且已准备好操作
b)DS18B20写字节子程序:
对DS18B20发出命令
c)DS18B20读字节子程序:
读取DS18B20存储器的数据
d)延时子程序:
对DS18B20操作时的时序控制
7.2.1读温度值模块流程图:
7.2.2DS18B20写字节和读字节子程序流程图:
7.3中断模块
中断采用T0方式1,初始值定时为2ms。
7.4温度设定、报警模块
进入模块界面后,按选择上下限键,选择改变上限还是下限,按加减键分别上调和下调设定报警温度值,当实时温度值超过设定值时驱动蜂鸣器发声,
8.实物效果图
温度处于设定围,不做任何反应。
设定温度下限度值为28.5℃,当前温度为28.1℃,蜂鸣器报警,二极管报警。
温度最高上限值为32℃,当前温度为33.6℃,蜂鸣器报警,二极管不报警。
当设定温度下限超过上限时,显示ERRO,并声光报警。
9.实习总结
温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不同,在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。
本次实习是基于STC12C5A60S2单片机,采用数字温度传感器DS18B20,直接进行温度采集显示,报警的数字温度计设计。
包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。
利用STC12C5A60S2单片机和数字温度传感器DS18B20设计的温度控制系统能够实现的温度围是-55℃-100℃,其精度是0.1℃,可以在数码管上显示实时温度,并且可以实现温度上限和下限的设置,超出上下限后单片机系统发出报警。
在实习的过程中,主要分三个部分进行,分别是硬件电路板的焊接、软件的编写、实习报告的总结。
在这三个部分中,王康康主要负责硬件电路的焊接,王会民主要负责程序的编写,我(王乐乐)主要负责实习报告的总结。
在这次实习中我们发现了很多问题,如,对元器件不熟悉,焊接元件不牢固,程序编写无从下手,不熟练,程序编写层次不太清晰,合作存在问题等。
但是这些问题在我们的共同努力下,摸索下最终解决。
通过这次生产实习我们加深了对元器件的认识,提高了程序编写能力,学会了通过自己去查找资料,更学会了合作。
在这样的磕磕碰碰中我们完成了本次生产实习任务,虽然仍存在着这样那样的问题,但是我们的收获无疑是巨大的。
这次生产实习将对我们今后的学习工作产生巨大的影响。
附录
1.主程序
/*-----------------------------------------------
名称:
DS18b20数码管显示
论坛:
编写:
shifang
日期:
2009.5
修改:
无
容:
显示格式符号xxx.xC
可以显示负温度
------------------------------------------------*/
#include
#include"18b20.h"
#include
sbitgaowenjingdeng=P2^7;//高于温度设定上限,做出反应
sbitzuidizuigaojian=P3^2;//选择上限还是下限
sbitzengjia=P3^3;//温度增加按键
sbitjianshao=P3^4;//温度减少按键
sbitbaojing=P3^6;//报警标志
sbitLAIDI=P3^5;//拉低电平,为了使数码管显示
unsignedinttemp0=1;//作为一个设定上限还是下限的标志位。
unsignedinttemp1=2;
unsignedinttemp2=8;
unsignedinttemp3=0;//设定温度下限初值28.0摄氏度
unsignedinttemp4=3;
unsignedinttemp5=2;
unsignedinttemp6=0;//设定温度上限初值38.0摄氏度
unsignedinttemp7=0;
unsignedinttemp8=0;
unsignedinttemp9=0;//设定三个中间变量,来比较环境温度和设定温度之间的关系
externDelayMsUs2x(unsignedchart);
externDelayMs(unsignedchart);//引用外部延时函数。
#defineDataPortP0//定义段数据端口程序中遇到DataPort则用P0替换
#defineSegPortP1//定义位数据端口,用以点亮数码相应数码管。
unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0xff};
//显示段码值01234567
unsignedcharcodedofly_WeiMa[]={0xff,0xef,0xdf,0xcf,0xf0,0xe0,0xd0,0xc0};
//分别对应相应的数码管点亮,即位码
unsignedcharTempData[8];//存储显示值的全局变量
voidKeys_Scan();//键盘扫描函数声明
voidDisplay(void);//数码管显示函数声明
voidInit_Timer0(void);//定时器初始化函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
voidmain(void)
{
unsignedintTempL,TempH;
inttemp;
Init_Timer0();//定时器初始化
while
(1)//主循环
{
LAIDI=0;//拉低74LS138电平
Keys_Scan();//键盘扫描函数
if(temp0%2==1)
{TempData[0]=0x38;
TempData[1]=dofly_DuanMa[temp1];
TempData[2]=dofly_DuanMa[temp2]|0x80;
TempData[3]=dofly_DuanMa[temp3];//把设定的初值转化为相应的段码
}
elseif(temp0%2==0)
{TempData[0]=0x76;//判断按键设定上限还是下限
TempData[1]=dofly_DuanMa[temp4];
TempData[2]=dofly_DuanMa[temp5]|0x80;
TempData[3]=dofly_DuanMa[temp6];//把设定的初值转化为相应的段码
}
if((temp1*100+temp2*10+temp3)>=(temp4*100+temp5*10+temp6))
{TempData[0]=0x79;
TempData[1]=0x70;
TempData[2]=0x70;
TempData[3]=0x3f;//如果在调节过程中,温度下限超过上限,显示ERRO
}
temp=ReadTemperature();//转换温度
if(temp&0x8000)
{
TempData[4]=0x40;//负号标志
temp=~temp;//取反加1
temp+=1;
}
else
TempData[4]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*625/1000;//小数近似处理
TempData[5]=dofly_DuanMa[(TempH%100)/10];//十位温度
TempData[6]=dofly_DuanMa[(TempH%100)%10]|0x80;//个位温度,带小数点
TempData[7]=dofly_DuanMa[TempL];
temp7=temp1*100+temp2*10+temp3;
temp8=TempH*10+TempL;
temp9=temp4*100+temp5*10+temp6;
if((temp9>=temp8)&&(temp8>=temp7))
{baojing=1;
gaowenjingdeng=0;
}
elseif(temp8<=temp9)
{baojing=0;
gaowenjingdeng=1;
}
else{baojing=0;
gaowenjingdeng=0;
}
}
}
/*------------------------------------------------
显示函数,用于动态扫描数码管
------------------------------------------------*/
voidDisplay(void)
{
staticunsignedchari=0;
DataPort=0;//清空数据,防止有交替重影
DataPort=TempData[i];//取显示数据,
SegPort=dofly_WeiMa[i];//取位码段码
i++;
if(i>=8)
i=0;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-2000)/256;//重新赋值2ms
TL0=(65536-2000)%256;
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1
{
TH0=(65536-2000)/256;//重新赋值2ms
TL0=(65536-2000)%256;
Display();//调用显示函数
}
voidKeys_Scan()
{
if(zuidizuigaojian==0)//检测是否有按键按下
{DelayMs(10);//软件去抖动
if(zuidizuigaojian==0)//再次检测按键是否按下
{
dengdai1:
if(zuidizuigaojian==0)gotodengdai1;//等待释放按键
else
{temp0=temp0+1;
gotofanhui;}//如果是此键按下,就不可能是下面按键按下
}
}
if(zengjia==0)
{DelayMs(10);
if(zengjia==0)
dengdai2:
if(zengjia==0)gotodengdai2;
else{
if(temp0%2==1)//对下限增加
{
if(temp3<9){temp3=temp3+1;gotofanhui;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 控制器 程序代码