基于Proteus的电子体温计的设计与仿真.doc_第1页
基于Proteus的电子体温计的设计与仿真.doc_第2页
基于Proteus的电子体温计的设计与仿真.doc_第3页
基于Proteus的电子体温计的设计与仿真.doc_第4页
基于Proteus的电子体温计的设计与仿真.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Proteus的电子体温计的设计与仿真专业:电子信息工程 学号:08128001 姓名:施小飞摘要:体温计是现代人们日常家居生活的的必备品之一,而常见的体温计多为传统的水银体温计,该体温 计是基于传统的热涨冷缩的性质制成的,该体温计在 使用中存在着测温时间较长,读数不方便和水银外泄 的不安全因数,因此十分有必要设计一款更加方便快 速的电子体温计来解决这些问题。本文将以 AT89C51 单片机为基础并结合数字温度传感器 DS18B20,以及数码管显示等,来实现电子体温计的设计。关键词:电子体温计;AT89C51单片机;温度传感器DS18B20Proteuss microcontroller-based design and simulation of electronic thermometerAbstract:Thermometer is the home of modern daily life of essential goods, and more common for the traditional mercury thermometer thermometer, the thermometer is based on the traditional nature of the heating or cooling is made, and the thermometer in use there is a temperature a long time, reading is not convenient and safe mercury leakage factor, it is necessary to design a more convenient and fast electronic thermometer to solve these problems. This will be combined with AT89C51 microcontroller based digital temperature sensor DS18B20, and digital display, electronic thermometer designed to achieve.Keywords:Electronic thermometer;AT89C51 microcontroller;Temperature sensor DS18B201、绪论1.1 体温计的发展与现状体温测量的历史,可以追溯到l6世纪。当时Saatorio用空气热膨胀的原理,制出了第一支测量口腔温度的体温计。本世纪初,开始用水银来制作体温计,至今在临床上得到了广泛的应用。根据1928年Ebstein的报告,当时除测量口腔及腋下的温度外,还可以测量直肠、颈部、大腿根部,外耳及尿温。这些都是用被测皮肤温度与玻璃球内积存的水银温度相等的原理实现的。由于水银体温计使用方便、精度高,因而应用很广。再加上测温方法及其结构都已成熟,没多大改进余地,人们对它的研究失去了信心,至今几乎没有什么进展。由于用水银体温计进行体温监测很不方便,水银的污染的可能也很严重等,为了正确测量人体局部温度,促使人们开发了各种不同的测温仪器和测温方法。虽然水银体温计仍不愧是一个精度高、便宜、使用方便的测温仪器。现在已有许多医院采用了电子体温计,用其它电子仪器测量体温也日益普及。这一事实至少表明,电子测温仪器的性能已接近水银温度计的性能。因此,鉴于传统的水银体温计汞的污染及其携带不方便易破碎,尤其是测量时间过长等缺点,本课题为解决此问题设计出一种数字式电子体温计。它在稳定性及响应时间上比传统的水银体温计有着显著的优势,精度要求也能和传统的水银体温计相媲美。1.2 可靠性需求与可用性需求: 由于该设计应用于人体身体健康的体温测量,因此必须保证设计的可靠性和可用性。该设计利用的温度传感器为精度0.5的 DS18B20 传感器保证了该体温计测量的精确性,为了提醒使用者的高温状 态,设计中的蜂鸣器则保证了该设计的可靠性。2.系统设计2.1 系统概述该设计是以 AT89C51 芯片为核心,通过检DS18B20的工作与否,然后将其内部的数字量温度读到单片机,通过相应的数码管显示,当温度超出设定的温度时用蜂鸣器报警。其外围电路包括复位电路、晶振电路。系统方框图为:2.2 系统元件2.2.1 AT89C51 的简介AT89C51是 一种带4K字节闪存可编程可擦只读存储器( FPEROMFlash Program m able and Erasable Read Only Mem ory)的低电压、高性能CMOS8位微处 理器 ,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦 除只读存储 器可以反复擦除1000次.该器件采用ATMEL高密度非易失存储器制造技 术制造, 与工业标准的MCS -51指令集和输出管脚相兼容.由于将多功能8位CPU和闪烁存 储器组合在单个芯片中 ,ATMEL的AT89 C51是一种高效微控制器,AT89C2051是 它的 一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案 。2.3 DS18B20 的特性介绍(1)适应电压范围更宽,电压范围:3.05.5V,寄生 电源方式下可由数据线供。(2)独特的单线接口方式,DS18B20 在与微处理器连接 时仅需要一条口线即可实现微处理器与 DS18B20 的双向通 讯。(3)DS18B20 支持多点组网功能,多个 DS18B20 可以并 联在唯一的三线上,实现组网多点测温。(4)DS18B20 在使用中不需要任何外围元件,全部传感 元件及转换电路集成在形如一只三极管的集成电路内。(5)温范围55125,在-10+85时精度为0.5。(6)可编程的分辨率为 912 位,对应的可分辨温度 分别为 0.5、0.25、0.125和 0.0625,可实现高精 度测温。(7)在 9 位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多在750ms 内把温度值转换为数字, 速度更快。(8)测量结果直接输出数字温度信号,以“一线总 线”串行传送给 CPU,同时可传送 CRC 校验码,具有极强的 抗干扰纠错能力。(9)负压特性:电源极性接反时,芯片不会因发热而 烧毁,但不能正常工作。2.4 DS18B20 的结构介绍DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配 置寄存器。引脚定义:(1)DQ 为数字信号输入/输出端;(2)GND 为电源地;(3)VDD 为外接供电电源输入端(在寄生电源接线方式 时接地)。2.5 数码管常见的数码管由八个条状和一个点状发光二极管管芯 制成,叫八段数码管。根据其结构的不同,可分为共阳极 数码管和共阴极数码管两种,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。1位显示器由 8 个发光二极管组成,其中 7 个发光二极管 ag 控制 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 报警电路设计的安全温度为 037当人体温度超过 37 时,就要求有所报警指示,该设计采用 PNP 三极管 9015 进 行驱动蜂鸣器,三极管工作在开关状态。原理图如下3.15 整体设计仿真3.2 软件设计3.2.1 设计流程该设计的主要思路为温度采样、数码管的显示以及报 警电路的设置。流程图如下:3.2.2 源程序:void init(void)num=0;alarm_flag=0;alarm_num=0;temp_max=36; /设置温度上限值temp_min=0; /设置温度下限值TMOD=0x01; /定时器T0工作于方式1TH0=(65536-50000)/256; /定时器T0赋初值TL0=(65536-50000)%256;EA=1; /开总允许中断ET0=1; /开定时器T0中断TR0=1; /启动定时器T0/*1us的延时(12M)延时子程序*/void delay_us(uchar x) /when crystal is 12M ,a*2+5 us , / 子程序调用要5us,while 就等于DJNZ指令while (-x); /x取值1255;/*1ms的延时(12M)延时子程序*/void delay_ms(uchar x)uchar i,j;for (i=0; ix; i+)for (j=0; j200; j+)_nop_(); /一个nop约1us_nop_();/*dds18b20初始化*/void init1820(void)DQ = 1; /复位_nop_(); /稍做延时DQ = 0; /拉低数据线,准备Reset OneWire Bus;delay_us(125); /延时要大于480us小于960us,延时510us,释放总线delay_us(125);DQ = 1; /提升数据线;delay_us(15); /延时35us;ds18b20要等待15-16us15while(DQ) /等待器件信号,检测应答脉冲信号_nop_();delay_us(60); /延时125us;DQ = 1; /提升数据线,准备数据传输;/*写数据的一个字节,满足写1和些0的时隙要求*/void write1820(uchar a)uchar i;for(i=0;i= 1; /右移一位uchar read1820(void)uchar i;uchar temp=0;DQ = 1;_nop_(); /准备读;for(i=0;i= 1; /低位先发;DQ = 0; /读开始脉冲;_nop_(); /延时;16DQ = 1; /必须写1,否则读出来的将是不预期的数据;delay_us(2); /延时9us;_nop_();if(DQ) /在12us处读取数据;temp |= 0x80;delay_us(30); /延时65us;DQ = 1; /拉高电平_nop_(); /恢复总线;return temp;void Rdtemp(void)uchar k,tmp_int;uint tp;float m=1.0, tmp_float;init1820(); /初始化DS1820display();write1820(0xcc); /跳过ROM/delay_ms(2);write1820(0x44); /温度转换命令/ _nop_();/ DQ=1;/ delay_ms(250); /多个1820时要延时,单个就不用/ delay_ms(250);/ delay_ms(250);init1820(); /初始化DS1820display();write1820(0xcc); /跳过ROMwrite1820(0xbe); /读占存器命令display();Temp_L=read1820(); /温度值低位字节(其中低4位为二进制的小数部分)Temp_H=read1820(); /高位值高位字节(其中5位为符号位)init1820();display();tp=Temp_H*256+Temp_L;/* 正负号处理 */num=0;k=Temp_H4;if(k0)tp=(tp)+1);17Temp_L=tp%256;disp_ds18b20num+=LED_CODE10;/* 正数处理 */display();tp=tp4;tmp_int=(tp&0x7f);if(tmp_int10)disp_ds18b20num+=LED_POINT_CODEtmp_int;else if(tmp_int=6)num=0;float ds18b20_float_date(uchar tmpl)uchar i,a,b,k;float m=1.0,p;p=0.0;b=0;k=(tmpl&0x0f);if( k=0 )return (p);for(i=0;i4;i+)a=(k&0x01);b=(a|b);b=(b1);18b=(b1);p=(m/b)/2);return (p);/*温度值小数显示部分处理函数*/void disp_float(float date)uchar g,s;uint b,q;g=(date*10); /个分位disp_ds18b20num+=LED_CODEg; /送个分位s=date*100;s=s%10; / 十分位disp_ds18b20num+=LED_CODEs; /送十分位b=date*1000;b=(b%100)%10; /百分位disp_ds18b20num+=LED_CODEb; /送百分位q=date*10000;q=(q%1000)%100)%10; /千分位disp_ds18b20num+=LED_CODEq; /送千分位/*显示函数*/void display(void)uchar i;P2=0x01; /P2口赋初值控制数码管的位for(i=0;i6;i+)P0=disp_ds18b20i; /数码管段显示delay_ms(1); /1ms延时P2=(P2255) Temp_H+; /如果低8位大于255,向高8位进1tp=Temp_H*256+Temp_L; /将转换的温度放入到tp中间变量中y=tp4; /右移4位,除去小数部分if(y(temp_min)+1) /与设定的警戒下限值比较alarm_flag=1; /低于下限值elsealarm_flag=0; /在下限值之上else / 温度为正温度时处理tp=Temp_H*256+Temp_L; /读取的温度为正温度tp=tp4; /除去小数部分y=(char)tp; /转为符号型if(ytemp_max) /比较与设定的上限警戒值alarm_flag=1; / 大于上限警戒值elsealarm_flag=0; /小于上限警戒值/*主函数*/void main(void)uchar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论