基于Proteus的电子体温计的设计与仿真设计.docx
《基于Proteus的电子体温计的设计与仿真设计.docx》由会员分享,可在线阅读,更多相关《基于Proteus的电子体温计的设计与仿真设计.docx(17页珍藏版)》请在冰豆网上搜索。
![基于Proteus的电子体温计的设计与仿真设计.docx](https://file1.bdocx.com/fileroot1/2022-10/20/2df3a8a2-80d8-4c1e-a56a-cb48cdae5488/2df3a8a2-80d8-4c1e-a56a-cb48cdae54881.gif)
基于Proteus的电子体温计的设计与仿真设计
基于Proteus的电子体温计的设计与仿真
专业:
电子信息工程学号:
********:
施小飞
摘要:
体温计是现代人们日常家居生活的的必备品之一,而常见的体温计多为传统的水银体温计,该体温计是基于传统的热涨冷缩的性质制成的,该体温计在使用中存在着测温时间较长,读数不方便和水银外泄的不安全因数,因此十分有必要设计一款更加方便快速的电子体温计来解决这些问题。
本文将以AT89C51单片机为基础并结合数字温度传感器DS18B20,以及数码管显示等,来实现电子体温计的设计。
关键词:
电子体温计;AT89C51单片机;温度传感器DS18B20
Proteus'smicrocontroller-baseddesignandsimulationofelectronicthermometer
Abstract:
Thermometeristhehomeofmoderndailylifeofessentialgoods,andmorecommonforthetraditionalmercurythermometerthermometer,thethermometerisbasedonthetraditionalnatureoftheheatingorcoolingismade,andthethermometerinusethereisatemperaturealongtime,readingisnotconvenientandsafemercuryleakagefactor,itisnecessarytodesignamoreconvenientandfastelectronicthermometertosolvetheseproblems.ThiswillbecombinedwithAT89C51microcontrollerbaseddigitaltemperaturesensorDS18B20,anddigitaldisplay,electronicthermometerdesignedtoachieve.
Keywords:
Electronicthermometer;AT89C51microcontroller;TemperaturesensorDS18B20
1、绪论
1.1体温计的发展与现状
体温测量的历史,可以追溯到l6世纪。
当时Saatorio用空气热膨胀的原理,制出了第一支测量口腔温度的体温计。
本世纪初,开始用水银来制作体温计,至今在临床上得到了广泛的应用。
根据1928年Ebstein的报告,当时除测量口腔及腋下的温度外,还可以测量直肠、颈部、大腿根部,外耳及尿温。
这些都是用被测皮肤温度与玻璃球积存的水银温度相等的原理实现的。
由于水银体温计使用方便、精度高,因而应用很广。
再加上测温方法及其结构都已成熟,没多大改进余地,人们对它的研究失去了信心,至今几乎没有什么进展。
由于用水银体温计进行体温监测很不方便,水银的污染的可能也很严重等,为了正确测量人体局部温度,促使人们开发了各种不同的测温仪器和测温方法。
虽然水银体温计仍不愧是一个精度高、便宜、使用方便的测温仪器。
现在已有许多医院采用了电子体温计,用其它电子仪器测量体温也日益普及。
这一事实至少表明,电子测温仪器的性能已接近水银温度计的性能。
因此,鉴于传统的水银体温计汞的污染及其携带不方便易破碎,尤其是测量时间过长等缺点,本课题为解决此问题设计出一种数字式电子体温计。
它在稳定性及响应时间上比传统的水银体温计有着显著的优势,精度要求也能和传统的水银体温计相媲美。
1.2可靠性需求与可用性需求:
由于该设计应用于人体身体健康的体温测量,因此必须保证设计的可靠性和可用性。
该设计利用的温度传感器为精度±0.5℃的DS18B20传感器保证了该体温计测量的精确性,为了提醒使用者的高温状态,设计中的蜂鸣器则保证了该设计的可靠性。
2.系统设计
2.1系统概述
该设计是以AT89C51芯片为核心,通过检DS18B20的工作与否,然后将其部的数字量温度读到单片机,通过相应的数码管显示,当温度超出设定的温度时用蜂鸣器报警。
其外围电路包括复位电路、晶振电路。
系统方框图为:
2.2系统元件
2.2.1AT89C51的简介
AT89C51是一种带4K字节闪存可编程可擦只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次.该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容.由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.3DS18B20的特性介绍
(1)适应电压围更宽,电压围:
3.0~5.5V,寄生电源方式下可由数据线供。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路。
(5)温围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms把温度转换为数字,12位分辨率时最多在750ms把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.4DS18B20的结构介绍
DS18B20部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
2.5数码管
常见的数码管由八个条状和一个点状发光二极管管芯制成,叫八段数码管。
根据其结构的不同,可分为共阳极数码管和共阴极数码管两种,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。
1位显示器由8个发光二极管组成,其中7个发光二极管a~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的八段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。
如下图所示:
LED数码管引脚图
3.详细设计
3.1硬件设计
3.1.1温度采集模块温度采集模块的作用是采集传感器周围的温度,并将模拟信号转化为数字信号,采集模块如下图
3.1.2复位电路
电路的功能是完成对单片机的复位,具有上电复位功能和按键复位功能。
本设计中采用自动复位的上电复位方式。
晶振为12MHZ。
复位电路如图
3.1.3显示模块
显示围主要为0℃-100℃,精度为0.1℃,显示数码管即为4位8段显示的数码管,由于单片机资源有限,这里采用的是动态扫描的方法。
在该接法中,单片机的借口为P0口,作为输出口,需要上拉,图中的电阻均为10K。
数码管采用共阳管。
显示接口电路图如下
3.1.4报警电路
设计的安全温度为0℃—37℃当人体温度超过37℃时,就要求有所报警指示,该设计采用PNP三极管9015进行驱动蜂鸣器,三极管工作在开关状态。
原理图如下
3.1.5整体设计仿真
3.2软件设计
3.2.1设计流程
该设计的主要思路为温度采样、数码管的显示以及报警电路的设置。
流程图如下:
3.2.2源程序:
voidinit(void)
{
num=0;
alarm_flag=0;
alarm_num=0;
temp_max=36;//设置温度上限值
temp_min=0;//设置温度下限值
TMOD=0x01;//定时器T0工作于方式1
TH0=(65536-50000)/256;//定时器T0赋初值
TL0=(65536-50000)%256;
EA=1;//开总允许中断
ET0=1;//开定时器T0中断
TR0=1;//启动定时器T0
}
/******1us的延时(12M)延时子程序*******/
voiddelay_us(ucharx)//whencrystalis12M,a*2+5us,
{//子程序调用要5us,while就等于DJNZ指令
while(--x);//x取值1~255;
}
/******1ms的延时(12M)延时子程序*******/
voiddelay_ms(ucharx)
{
uchari,j;
for(i=0;ifor(j=0;j<200;j++)
{
_nop_();//一个nop约1us
_nop_();
}
}
/*********dds18b20初始化*******/
voidinit1820(void)
{
DQ=1;//复位
_nop_();//稍做延时
DQ=0;//拉低数据线,准备ResetOneWireBus;
delay_us(125);//延时要大于480us小于960us,延时510us,释放总线
delay_us(125);
DQ=1;//提升数据线;
delay_us(15);//延时35us;ds18b20要等待15-16us
15
while(DQ)//等待器件信号,检测应答脉冲信号
{
_nop_();
}
delay_us(60);//延时125us;
DQ=1;//提升数据线,准备数据传输;
}
/****写数据的一个字节,满足写1和些0的时隙要求****/
voidwrite1820(uchara)
{
uchari;
for(i=0;i<8;i++)
{
if(a&0x01)//写1,低位在前;
{
DQ=0;//拉低电平,结束Recoverytime;
_nop_();//延时,使得15us以拉高电平
_nop_();
_nop_();
DQ=1;//发送数据;
}
else//写0
DQ=0;
_nop_();
_nop_();
_nop_();
delay_us(30);//等待SlaveDevice采样;
DQ=1;//复位;
_nop_();//短延时;
a>>=1;//右移一位
}
}
ucharread1820(void)
{
uchari;
uchartemp=0;
DQ=