数字温度警报器的设计毕业设计.docx
- 文档编号:8915345
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:26
- 大小:735.68KB
数字温度警报器的设计毕业设计.docx
《数字温度警报器的设计毕业设计.docx》由会员分享,可在线阅读,更多相关《数字温度警报器的设计毕业设计.docx(26页珍藏版)》请在冰豆网上搜索。
数字温度警报器的设计毕业设计
数字温度警报器的设计
中文摘要
数字温度警报器是利用传感器检测温度。
采用数码管显示当前温度。
当温度低于下限温度或者高于上限温度时系统发出报警声,从而起到测量和报警的功能。
本系统以AT89C52单片机作为主控系统,利用DS18B20数字温度传感器作为温度传感器件。
通过四位共阳极数码管作为显示器件,通过单片机控制温度显示温度。
并可以设置温度上下限,当温度不在设置的温度范围内,蜂鸣器发出报警声。
分析了温度传感器的工作原理。
系统硬件电路以及软件部分的设计。
实际测试表明。
该方案切实可行并已在许多通信领域得到广泛应用。
关键词:
单片机,温度警报,DS18B20,AT89C52
ABSTRACT
Istousedigitaltemperaturealarmtemperaturesensordetection.Usingdigitaltubedisplaythecurrenttemperature.Whenthetemperatureislowerthanthefloortemperatureorhigherthanceilingtemperaturealarmsystem,tomeasureandalarmfunction.ThissystemwithAT89C52single-chipcomputerasthemastercontrolsystem,usingDS18B20digitaltemperaturesensorastemperaturesensor.Throughthefourdigitaltubeasadisplaydevice,atotalofanode,bysingle-chipmicrocomputercontroltemperaturedisplaytemperature.Andcansettheupperandlowertemperature,whenthetemperatureisbeyondthescopeofthetemperatureoftheset,alarmbuzzer.Analyzedtheworkingprincipleoftemperaturesensor.Thesystemhardwarecircuitandsoftwarepartofthedesign.Thepracticaltestsshowthat.Theschemeisfeasibleandhasbeen
usedwidelyinmanyfieldsofcommunications.
Keywords:
singlechipmicrocomputer,temperaturealarm,DS18B20,AT89C52
第一章引言…………………………………………………………………………
1.1概论………………………………………………………………………………
1.2设计方案及研究内容……………………………………………………………
第二章相关技术……………………………………………………………………
1.1温度检测芯片DS18B20…………………………………………………………
1.2所用代码…………………………………………………………………………
第三章系统硬件设计………………………………………………………………
1.1所用硬件及简介…………………………………………………………………
1.2各个部分电路与分析…………………………………………………………
最小系统………………………………………………………………………
温度采集电路…………………………………………………………………
LED显示报警电路………………………………………………………………
第四章系统软件设计………………………………………………………………
1.1流程图…………………………………………………………………………
主程序流程图…………………………………………………………………
DS18B20读温度流程图…………………………………………………………
报警程序流程图………………………………………………………………
1.2实物图及测试结果……………………………………………………………
总结…………………………………………………………………………………
参考文献………………………………………………………………
附录A……………………………………………………………………
附录B………………………………………………………………………
附录C…………………………………………………………………………………致谢…………………………………………………………………………………
第一章引言
1.1概论
本次试验主要运用在单片机方面实行软件控制硬件及用简单的C语言程序加上在最小系统的基础上做一些简单的修改做到对温度的检测
什么是单片机呢?
单片机一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。
从上世纪80年代,由当时的4位、8位单片机、发展到现在的32位300M的高速单片机。
1.2设计方案及研究内容
随着传感器在生产生活中更加广泛的应用,一种新型的数字式温度传感器实现对温度的测试与控制得到了更快的开发。
本文设计了一种基于单片机AT89C52的温度检测及报警系统。
该系统将温度传感器DS18B20接到单片机的一个端口上,单片机对温度传感器进行循环采集。
将采集到的温度值与设定的上下限进行比较,当超出设定范围的上下限时,通过单片机控制的报警电路就会发出报警信号,从而实现了本次课程设计的要求。
该系统设计和布线简单、结构紧凑、体积小、重量轻、抗干扰能力较强、性价比高、扩展方便,在工农业等领域的温度检测中有广阔的应用前景。
本次课程设计的测量范围为0℃--99℃,测量误差为±2℃。
第二章相关技术
1.1温度检测芯片DS18B20
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢
封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。
前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。
1.2温度所用代码
voidconvert(void)//启动DS18B20开始温度转换
{biterr;
err=reset();//复位传感器
wrbyte(0xcc);//跳过多传感器识别
wrbyte(0x44);//启动温度转换
}
intreadt(void)//读取DS18B20暂存器中的温度值
{ucharh,l;
biterr;
err=reset();//复位传感器
wrbyte(0xcc);//跳过多传感器识别
wrbyte(0xbe);//读暂存器指令
l=rdbyte();//读温度低位
h=rdbyte();//读温度高位
return(h*256+l);
}
main()
{
bitzf;//正负标记,0:
正数1:
负数
while
(1)
{convert();//启动温度转换
t=readt();//读取温度值
zf=0;
if(t<0)//如果温度在0度以下
{zf=1;//置负数标志
t=-t;//求补
}
dbuf[0]=dp[t&0x0f];//求出温度的小数
t=t>>4;
dbuf[3]=t/100;//求出百位
t=t%100;
dbuf[2]=t/10;//求出十位
dbuf[1]=t%10;//求出个位
if(zf==1)//如果是负数
{if(dbuf[2]==0)//如果十位为0
{dbuf[3]=0x13;//显示格式为'-x.x'
dbuf[2]=0x12;
}
else//如果十位不为0
dbuf[3]=0x12;//显示格式为'-xx.x'
}
else//否则,如果是正数
{if(dbuf[3]==0)//如果百位、十位都是0
{if(dbuf[2]==0)//显示格式为'x.x'
dbuf[2]=0x13;//如果只有百位为0
dbuf[3]=0x13;//显示格式为'xx.x'
}
}
disp();
alarm();
}
}
voidalarm()//报警
{
if(setValue_low>=t||setValue_high<=t)
{beep=~beep;
led=~led;}//在温度允许范围,不报警
else
beep=1;
}
第三章系统硬件设计
1.1所用硬件及简介
RP1排阻C1、C2电容33P;C3电容100u;S1按键开关;X1晶振12M;Q1三极管PNP;
LS1蜂鸣器;U151单片机;U2温度传感器;U3集成芯片;U44位7段数码管共阳;串口头母头;USB头;洞洞板
其中(一些元器件需要注意):
4位数码管共阳--焊接的时候顺序一定要对,千万不能跟共阴的数码管搞混合;
DS18B20温度传感器—注意接地和VCC接口不要接反和最小系统电路连接时要接对引脚不能搞混;
串口头母头RS-232端口引脚定义:
(因为计算机后面的串口多为公头,所以此母头可以直接插入计算机的COM口进行连接)
引脚序号:
235
信号定义:
TXDRXD地(只要接2号、3号和5号口接可以了);
PNP三极管:
左边第一脚是b,中间是c,右边是e这样的话c接高电平,e接低电平,b接低电平三极管就会导通。
b接高电平就会截止。
还有些情况,中间是b左边是e右边是c。
可用万用表测一下就好了(得接的时候要在后面加个小电阻不然三极管会烧坏)
1.2各个部分电路与分析
最小系统
本次课程设计中选用AT89C52式单片机,其最小系统主要由电复位、振荡电路组成。
单片机的最小系统如图所示。
单片机的复位电路原理是在单片机的复位引脚RST上电阻和电容,实现上电复位。
当复位电平持续两个时钟周期以上时复位有效。
复位电路由按键复位和上电复位两部分组成,上电复位是在复位引脚上连接一个电容到VCC,再连接一个电阻到GND;按键复位是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
AT89C51单片机使用12MHZ的晶振最为振荡源,由于单片机内部有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容一般在15pF至50pF之间。
外部晶振结合单片机内部电路产生单片机所需的时钟频率。
温度采集电路
温度采集电路部分,采用数字温度传感器DS18B20进行温度采集。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3个引脚;温度侧量范围为-55℃—+125℃,测量精度为0.5℃;被测温度用符号扩展的16位数字量方式串行输出;CPU只需用一个端口线就可以与DS18B20通信。
温度采集电路如图所示
LED显示报警电路
LED数码管与单片机的P0口相连,单片机将采集到的温度值转化为与数码管对应的数据,通过P0
口输出显示。
即信号通过译码管的端口a、b、c、d、e、f、g、dp端来控制每段译码管的亮灭与否,同时通过端口1、2、3、4四个端口来控制四个译码管。
在本次设计中,用三极管驱动数码管。
同时当采集到的温度值超过所设置的范围时,单片机会输出一信号,通过三极管放大后驱动蜂鸣器发出报警信号。
LED数码管报警电路如图所示
第四章系统软件设计
1.1流程图
主程序流程图
主程序中对单片机做了初始化的设计,包含温度的读取、数码管显示、报警三个子系统,运行时由主程序先调用DS18B20读取温度的子函数进行温度采集,再将数据送入数码管显示。
同时判断所采集的数据是否超出所设置的温度范围。
如果超出,调用报警子系统;未超出,程序自动返回。
主程序流程图如图所示
DS18B20读取温度流程图
根据DS18B200的通讯协议,单片机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作(复位要求主CPU将数据线下拉500微秒然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功)。
DS18B20读取温度时先读取温度低字节,在读取温度高字节。
程序中命令0xCC:
跳过读序号列号的操作;命令0x44:
启动温度转换;命令0xBE:
读取温度寄存器等,前两个字节就是温度。
后面的寄存器省略不读。
DS18B20读取温度流程图如图所示
报警程序流程图
程序中首先判断所读取的温度是否超出所设定的下限,如果超出下限,报警器报警;如果没超出下限,再跟上限值比较判断是否超出上限。
如果超出,则报警;若无,程序返回。
报警程序流程图如图所示
1.2实物图及测试结果
经本人测试结果显示,当我用手握住传感器,温度超过30°C时候,蜂鸣器会发出警报;松开传感器,在特殊处理情况下当温度降低到0°C以下的时候蜂鸣器也会发出警报。
测试结果是正确的。
总结
程序在编译过程中,出现了一些语法错误,经过细心修改得以纠正。
但是,将程序下载到单片机之后发现数码管上显示的温度十位数数值变化太大各位数基本不变由此可以判定此程序在温度输出时数值的十位和个位搞混了,经过重新编译修改解决问题,本次试验我最大的问题就是不知道如何焊接数码管,通过查找资料和指导老师的支持才攻克了这一难题。
经过四周时间的设计,我的设计完成了所有设计要求,系统能够完成上、下限温度发声报警且显示功能、数字显示温度计功能、输入报警温度出错提示功能。
此次温度计设计,让我学会了规范化程序的编写、程序调试的各种方法以及解决调试过程中出现的一系列的问题。
更重要的是让我明白程序的优化是多么重要。
要想编写出一个系统的程序,就必须十分清楚硬件电路中所用芯片的工作原理以及使用它们的一些注意事项,比如这次设计中所用的DS18B20数字温度传感器,它的时序要求十分严格,由于它是采用单总线结构的输入输出方法,它的时序中所用到的延时必然很关键,时间过长了会使整个温度计的反应时间变慢,延时时间过短会使传感器不能正常工作
参考文献
刘建亭,毛善坤.DS18B20工作原理及基于C语言的接口设计.河南科技大
学机电工程学院
DS18B20XX百科,单片机技术XX百科,最小系统XX百科
何立民.单片机应用技术选编.北京航空航天大学出版,1996
何立民主编.MCS-51单片机应用系统设计.北京:
北京航天航空大学出版社,1990
黄志伟主编.全国大学生电子设计竞赛电路设计.[M]北京:
北京航空航天大学出版社,2006年.P5-P21
张学昭、王东云主编.单片机原理、接口技术及应用(含C51).[M]西安:
西安电子科技大学出版社,2009年.P33-P45
张毅刚、刘杰主编.单片机原理与应用.[M]哈尔滨:
哈尔滨工业大学出版社,2010年.P55-P60
附录A:
总电路图
附录B:
元器件清单
序号编号名称型号 数量
1R1 电阻4.7K 2
2R2电阻100K 2
3R3电阻5K 2
4RP1排阻5K 2
5C1、C2电容33P 3
6C3电容100u 2
7S1按键开关2
8X1晶振12M 2
9Q1三极管PNP 2
10LS1蜂鸣器 2
11U151单片机STC89C52 2
12U2温度传感器 DS18B202
13Q1三极管PNP型4
14U44位7段数码管 共阳2
附录C:
程序清单
#defineucharunsignedchar
#include
#include
sbitDQ=P1^1;//DS18B20的数据线
sbitbeep=P1^2;
sbitled=P1^0;
bdatauchardat;//用于数据收发
sbitdat0=dat^0;//变量dat的最低位
sbitdat7=dat^7;//变量dat的最高位
uchardp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};//小数部分转换
ucharcodesegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xbf,0xff};
uchardbuf[4]={0,0,0,0x12};//显示缓存
ucharsetValue_low=10;
ucharsetValue_high=30;
voidalarm();
intt;
voiddisp(void)//LED动态显示程序
{uchari,n,bsel;
bsel=0xfe;//首先点亮最低位
for(n=0;n<4;n++)
{P2=bsel;
P0=segtab[dbuf[n]];//将显示缓存的数据转换为字段码显示
if(n==1)P0=P0&0x7F;//定点显示小数点
bsel=(bsel<<1)+1;//准备显示下一位
for(i=1;i<200;i++);//延时
P0=0xff;//熄灭所有字段
}
}
voiddelay15(ucharn)//15?
s延时函数
{do{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
n--;
}while(n);
}
bitreset(void)//初始化DS18B20
{biterr;
DQ=0;//在数据线上产生600?
s的低电平
delay15(40);
DQ=1;//数据线拉高
delay15(4);//延时60?
s
err=DQ;//读取数据线状态,err=0:
复位成功
delay15(18);//err=1:
复位失败
return(err);
}
voidwrbyte(uchard)//向DS18B20写入一个字节
{uchari;
dat=d;
for(i=8;i>0;i--)//循环写8位(先低位,后高位)
{DQ=0;//产生15?
s的负脉冲
delay15
(1);
DQ=dat0;//将当前数据位送数据线
dat=dat>>1;//将下一位要写入的数据移到最低位
delay15
(1);//延时15?
s
DQ=1;//数据线拉高,为写入下一位做准备
}
}
ucharrdbyte(void)//从DS18B20读取一个字节
{uchari;
dat=0;//读出数据初值为0
for(i=8;i>0;i--)//循环读8位(先低位,后高位)
{dat=dat>>1;//读出数据先右移一位
DQ=0;//产生1?
s的负脉冲
_nop_();
DQ=1;//数据总线拉高
delay15
(1);//延时15?
s
dat7=DQ;//读取数据
delay15(4);//延时,为读下一位做准备
}
return(dat);
}
voidconvert(void)//启动DS18B20开始温度转换
{biterr;
err=reset();//复位传感器
wrbyte(0xcc);//跳过多传感器识别
wrbyte(0x44);//启动温度转换
}
intreadt(void)//读取DS18B20暂存器中的温度值
{ucharh,l;
biterr;
err=reset();//复位传感器
wrbyte(0xcc);//跳过多传感器识别
wrbyte(0xbe);//读暂存器指令
l=rdbyte();//读温度低位
h=rdbyte();//读温度高位
return(h*256+l);
}
main()
{
bitzf;//正负标记,0:
正数1:
负数
while
(1)
{convert();//启动温度转换
t=readt();//读取温度值
zf=0;
if(t<0)//如果温度在0度以下
{zf=1;//置负数标志
t=-t;//求补
}
dbuf[0]=dp[t&0x0f];//求出温度的小数
t=t>>4;
dbuf[3]=t/100;//求出百位
t=t%100;
dbuf[2]=t/10;//求出十位
dbuf[1]=t%10;//求出个位
if(zf==1)//如果是负数
{if(dbuf[2]==0)//如果十位为0
{dbuf[3]=0x13;//显示格式为'-x.x'
dbuf[2]=0x12;
}
else//如果十位不为0
dbuf[3]=0x12;//显示格式为'-xx.x'
}
else//否则,如果是正数
{if(dbu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 温度 警报器 设计 毕业设计