基于AT89C51单片机的测温系统Word文档下载推荐.docx
- 文档编号:8302770
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:27
- 大小:634.83KB
基于AT89C51单片机的测温系统Word文档下载推荐.docx
《基于AT89C51单片机的测温系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的测温系统Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。
本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机喜爱的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意设定上下限报警温度,它使用起来方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工农业生产中的温度测量,也可以当做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。
DS18B20和AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合与恶劣环境下进行现场温度测量,有广泛的应用前景。
本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus软件上进行仿真,修改,仿真。
本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警,同时根据设定的温度范围通过升降温电路控制环境的温度达到恒温效果。
【关键词】单片机,数字控制,温度计,DS18B20,STC89C52RC
【引言】单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。
“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。
学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。
鉴于此,提高“单片机原理及应用”课的教学效果,让学生参与课程设计实习甚为重要。
单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。
为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。
单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。
通过此次课程设计实现以下三个目标:
第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;
第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。
第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加工作打下一定良好的实践基础。
温度可调上下限检测报警恒温设计
二、设计方案
2.1设计务任和要求
1、基本范围-55℃——125℃
2、精度误差小于0.5℃
3、LCD数码直读显示
4、可以任意设定温度的上下限报警功能.
2.2方案辩证
1温度计软件设计流程图:
2元器件的选取:
单片机芯片的选取:
方案一.
采用89C51芯片作为硬件核心,利用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:
采用STC89C52RC单片机作为硬件核心,该单片机指令代码完全兼容传统的8051单片机。
STC89C52RC的工作电压为5.5-3.4V,工作频率范围0-80MHz,程序存储器flash容量为8KB,随机存储器RAM空间为512字节,完全满足设计温度控制系统的要求。
综上所述:
本课设中单片机芯片采用STC89C52RC。
温度传感器的选取:
方案一:
采用热敏电阻传感器。
利用热敏电阻随温度变化而显著变化,能直接将温度的变化转换为能量的变化,进而制成温度计。
但是其测温传感器比较复杂,而且不易通过编制程序来控制测温精度,增大系统设计的难度。
方案二:
采用DS18B20温度传感器。
DS18B20的内部3脚(或8脚)封装;
使用特有的温度测量技术,将被测温度转换成数值信号;
3.0~5.5V的电源供电方式和寄生电源供电方式;
ROM由64位二进制数字组成,共分为8个字节;
RAM由9个字节的高速暂存器和非易失性电擦写ROM组成。
温度传感器选取智能测温器件DS18B20。
本设计显示电路采用1602液晶显示模块芯片。
3系统最终设计方案:
综上各方案所述,对此次课设的方案选定:
采用STC89C52RC作为主控制系统;
1602液晶显示模块芯片作为温度数据显示装置;
而智能温度传感器DS18B20器件作为测温电路主要组成部分。
至此,系统最终方案确定。
三、设计方案的总体设计框图
温度计电路设计总体设计方框图如图所示,控制器采用单片机STC89C52RC,温度传感器采用DS18B20,用1602液晶显示屏以串口传送数据实现温度显示。
3.1硬件电路框图:
图 总体设计方框图
3.2硬件电路概述:
系统由单片机最小系统、显示电路、按键、温度传感器等组成。
本电路是由STC89C52RC单片机为控制核心,具有与8051系列单片机完全兼容,程序加密等功能,8KB字节可编程闪存,工作电压范围为2.7~6V,全静态工作频率为0~24MHZ;
显示电路由1602液晶显示模块芯片,可以进行多行显示;
温度报警按键设为五个,可以显示华氏温度,调节高低报警温度;
温度传感器电路主要由DS18B20测温器件构成,该器件主要功能有:
采用单总线技术;
每只DS18B20具有一个独立的不可修改的64位序列号;
低压供电,电源范围为3~5V;
测温范围为-55℃~+125℃,误差为±
0.5℃;
复位电路是10K电阻构成的上电自动复位。
3.3主控电路
单片机STC89C52RC具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
晶振采用12MHZ。
复位电路采用上电加自动复位。
主控芯片8051
晶振电路
复位电路
3.4显示电路
本设计显示电路采用1602液晶显示模块芯片,该芯片可现实16x2个字符,比以前的七段数码管LED显示器在显示字符的数量上要多得多。
另外,由于1602芯片编程比较简单,界面直观,因此更加易于使用者的操作和观测。
1602A芯片的接口信号说明
图液晶显示电路
3.5报警温度调节电路
本系统一共设置了四个按键,K1键只是按一下上限报警温度加1,松开后恢复显示正常温度,K2键按一下上限报警温度减1,松开后恢复显示正常温度,当调节的上限报警温度与环境实际的温度相比,环境实际温度高于上限报警温度时系统会出现声音报警及灯光警示,同理,K3,K4的调节方法一样,当环境实际温度低于下限报警温度时,系统出现报警。
报警点调节电路
3.6温度传感器及DS18B20测温原理
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图4所示。
头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
该字节各位的定义如图5所示。
低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;
高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将最低温所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在最低温所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
测温电路
3.6升温、降温控制电路
加温电路
系统在检测到当前温度低于设定的下限值时,在报警器启动报警同时,升温电路开始工作,使得Q2三极管导通,继电器RL1吸合加热灯开始点亮加热,起到升温的效果,此时升温指示灯点亮,表示升温系统开始工作。
降温电路
系统在检测到当前温度超高设定的上限值时,在报警器启动报警同时,降温电路开始工作,使得Q3三极管导通,继电器RL2吸合风扇开始吹风,起到降温的效果,此时降温指示灯点亮,表示降温系统开始工作。
四、系统软件算法设计
整个系统是由硬件配合软件来实现的,在硬件确定后,编写的软件的功能也就基本定型了。
所以软件的功能大致可分为两个部分:
一是监控,这也是系统的核心部分,二是执行部分,完成各个具体的功能。
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
4.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图所示。
图1主程序流程图图2读温度流程图
4.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图示
图温度转换流程图
4.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图9所示
4.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图所示。
图 计算温度流程图 图 显示数据刷新流程图
4.5显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序流程图如图。
1602液晶显示流程图
4.61602的液晶显示
五、软件仿真
5.1系统仿真设计
本设计是在Proteus环境下进行仿真的,仿真所用到的器件有:
单片机AT89C51,DS1820温度传感器,蜂鸣器,液晶显示器,一些电阻,电容等。
仿真结果如下:
显示器显示传感器温度
5.2系统仿真原理图
5.3系统原理图
六、总结与体会
#include<
reg52.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitDQ=P2^3;
//ds18b20与单片机连接口
sbitRS=P2^5;
sbitRW=P2^6;
sbitEN=P2^7;
uchardatadisdata[5];
uinttvalue,CurrentT=0;
//温度值
uchartflag;
//温度正负标志
#defineLCD_BUSP0
sbitSetKey=P2^2;
sbitUpKey=P2^1;
sbitDnKey=P2^0;
sbitBEEP=P2^4;
sbitHeat=P1^0;
sbitCool=P1^1;
unsignedcharAlarmTempLow=10,AlarmTempTop=40,Set=0,NG=0;
voiddelayms(uintms)//延时xx毫秒
{
uchari;
while(ms--)
{
for(i=0;
i<
120;
i++);
}
}
voidcommand(uintcom)//LCD写指令
RS=0;
//RS为0
LCD_BUS=com;
//装载指令
delayms(5);
//延时5ms
EN=1;
//LCD使能
EN=0;
//LCD不使能
voidwrite_dat(uchardat)//LCD写数据
RS=1;
//RS为1
LCD_BUS=dat;
//装载数据
//延时5ms
//LCD使能
//LCD不使能
voidwritestring(ucharx,uchary,uchar*s)//LCD写字符串
{
if(y==0)command(0x80+x);
//表示第一行
elsecommand(0xC0+x);
//表示第二行
while(*s)//判断是否字符串的结尾
{
write_dat(*s);
//显示当前字符
s++;
//字符串地址加1
}
voidwriteChar(ucharx,uchary,uchars)//LCD写字符串
write_dat(s);
voidLCD_Initial()//LCD初始化
RW=0;
//RW为0
command(0x38);
//发送初始化指令
command(0x0c);
command(0x06);
//发送初始化指令
command(0x01);
command(0x80+0x02);
//发送LCD初始位置
/*************************DS1820程序****************************/
voiddelay_18B20(unsignedinti)//延时1微秒
while(i--);
voidds1820rst(void)/*ds1820复位*/
unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
//拉高
delay_18B20(40);
}
uchards1820rd(void)/*读数据*/
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
i>
i--)
DQ=wdata&
0x01;
wdata>
unsignedintRead_Temperature(void)/*读取温度值并转换*/
uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
//*跳过读序列号*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0x0fff)tflag=0;
else{tvalue=~tvalue+1;
tflag=1;
tvalue=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
CurrentT=tvalue;
return(tvalue);
voidDisplay_Temperature()//显示温度
ucharflagdat;
disdata[0]=tvalue/1000+0x30;
//百位数
disdata[1]=tvalue%1000/100+0x30;
//十位数
disdata[2]=tvalue%100/10+0x30;
//个位数
disdata[3]=tvalue%10+0x30;
//小数位
if(tflag==0)flagdat=0x20;
//正温度不显示符号
elseflagdat=0x2d;
//负温度显示负号:
-
//if(disdata[0]==0x30)
//{
//disdata[0]=0x20;
//如果百位为0,不显示
//if(disdata[1]==0x30)disdata[1]=0x20;
//如果百位为0,十位为0也不显示
//}
if(tflag==1)
writeChar(10,0,flagdat);
//wr_com(0x8a);
wr_dat(flagdat);
//显示符号位
writeChar(11,0,disdata[0]);
//wr_com(0x8b);
wr_dat(disdata[0]);
//显示百位
writeChar(12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89C51 单片机 测温 系统