基于AT89C51单片机电子体温计设计_第1页
基于AT89C51单片机电子体温计设计_第2页
基于AT89C51单片机电子体温计设计_第3页
基于AT89C51单片机电子体温计设计_第4页
基于AT89C51单片机电子体温计设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、1 系统设计的目的意义1.1 目的体温是生命活动的一种表现,是人体新陈代谢的一个重要生理参数。体温既有生理学的意义,又有重要的临床意义,是临床诊断的一个重要指标。因此体温计在现在的生活中有极为重要的作用。传统的水银体温计易破碎,存在水银污染的可能,测量时间较长,不易读数,为此设计一种新型的体温计,它的测量精度与传统的水银体温计相媲美的情况下,大大地缩短了测量时间且携带方便,对环境几乎没有污染。它以 AT89C51单片机为核心,结合温度传感器, LED 模块等外部设备,在软件的控制下,实现智能化的体温测量,不但能够精确测温,而且能够对温度进行逻辑判断,并且通过LED 显示器将测量结果显示出来。若

2、温度高于 38 摄氏度系统就会自动报警,这就意味着所测得的温度异于人体正常温度,引起人们注意。本设计的创新点在于,不仅完成了电子体温计的要求,而且还增加了一个报警装置。当测量者的体温高于人体正常体温时,体温计就会自动报警,人性化设计,为广大客户带来方便。1.2 国内外进展情况中国电子体温计行业最早起源于 1998 年,以每年高于30%的速度发展至今经历了十多年时间。高达数倍甚至十多倍的利润空间、较低的政策壁垒和技术壁垒吸引了众多企业进入该行业。目前国内涌现了大小 80 多家电子体温计品牌,既有“欧姆龙” 、 “婴之侣” 、 “捷威”等行业领头的外资品牌,也有“华辰” 、 “世佳”、 “华安”、

3、 “康复”等迅速发展壮大的国内品牌。今后试图进去该行业的生产厂家将达到 50 多家。由于行业逐步规范和新一轮电子体温计产品消费热潮的兴起, 2009年以后, 电子体温计产品行业进 入了一个前所未有的高速发展时期,市场的快速发展孕育着巨大的商机。1.3 设计思路本系统可以使用ISIS画出原理图,打开ISIS软件,单击命令窗口 filenew design 创建一个default模板,保存名称为“基于AT89C51单片机电子体温计设计.DSN。执行 菜单命令library pick device/symbol,添加所需元件。本程序中可以使用 DS18B20温 度传感器,上面有“ +” “-”可以模

4、拟外界温度变化。芯片选取 74LS137, 74LS373在 原理图编辑窗口中放置元件,再单击工具箱中的“原件终端”图标,在对象选择中单击POWER 和 GROUND 放置电源和地。放置好元件后,布好线。左键双击各元件,设置 好相应参数,完成电路设计。设计的软件部分在Keil 中完成, 具体操作步骤在后面仿真步骤中有详细介绍, 在此就不一一列出。编辑版 word2系统分析2.1 系统总体设计本系统采用AT89C51单片机、DS18B20温度采集模块和LED显示器共同实现。 AT89C51集合了温度传感器、放大器、A/D转换器三者的作用。其中AT89C51通过P1.0 和DS18B20进行单总线

5、通信,启动DS18B20温度采集功能并取出转化后的体温数值, 最后将体温值显示在外接在 P0 口与P2 口的四位共阴LED上。设计思路如图2.1所示。图2.1设计思路示意图2.2 DS18B2C 础知识DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统热敏电阻相比, 只需一根线就能直接读出被测温度, 并可根据实际需求编程实现912位数字值的读数方式。2.2.1 DS18B20勺封装形式及引脚功能DS18B20有三种封装形式: 1) 1) 采用 3 引脚 TO-92 的封装形式。 2) 采用6引脚TSOC封装形式。 3) 采用8引脚SOIC封装形式。DS1

6、8B20芯片的引脚功能如下: 4) GND :电源地。 5) DQ :数字信号输入/ 输出端。 6) 3) VDD :外接供电电源输入端。采用寄生电源方式时,该引脚接地。2.2.2 DS18B20勺内部结构温度传感器DS18B20的内部结构如图所示,主要由64位ROM、温度传感器及高速 缓存器配置寄存器等部分组成,如图 2.2所示。下面对DS18B20的相关部分进行简单的描述。(1) 64位ROM。64位ROM是由厂家用激光刻录一个 64位的二进制ROM代码,是该芯片的标志号,如图2.3所示。8位循划、冗余检验48位序列号8位分类编号(10H)MSBLSB MSB LSB MSB图2.3 64

7、位RO师意图LSB8位分类编号表示产品分类编号,DS18B20的分类编号为10H;48号序列号是一个 大于281x102的十进数编码,作为该芯片的唯一标志代码;8位循环冗余检验为前56位 的CRC循环冗余校验码(CRC=X8+X5+X4+1)。由于每个芯片的64位ROM代码不同, 因此在单总线上能够并挂多个 DS18B20进行多点温度实时检测。(2)温度传感器。温度传感器是 DS18B20的核心部分,该功能部件可完成对温度 的测量。通过软件编程可将-55+125摄氏度范围内的温度值按9位、10位、11位、12编辑版word位的转换精度进行量化,以上的转换精度都包括一个符号位,因此对应的温度量化

8、值分别为05 0.2S 0.125 0.0625摄氏度,即最高转换精度为0.0625g氏度。芯片出厂时默 认为12位的转换精度。当接收到温度转换指令(44H)后,开始转换,转换完成后的温 度以16位带符号扩展的二进制补码形式表示,存储在高速缓存器RAM的第0、1字节中,二进制数的前5位是符号位。如果测得的温度大于 0,这5位为0,只要将测到的 数值乘上0.0625即可得到实际温度;如果温度小于 0,这5位为1,测到的数值需要取 反加1再乘上0.0625即可得到实际温度。(3)高速缓存器。高速缓存器包括一个高速暂存器 RAM和一个非易失性可电擦除 E2PROM。非易失性可电擦除E2PROM用于存

9、放高温触发器TH、低温触发器TL和配置 寄存器中的信息。高速暂存器RAM是一个连续8字节的存储器,前两个字节是测得的温度信息,第 1个字节的内容是温度的低8位,第2个字节是温度的高8位。第3个和第4个字节是 高温触发器TH、低温触发器TL的易失性复制,第5个字节是配置寄存器的易失性复制, 以上字节的内容在每一次上电复位时被刷新。第 6、7、8个字节用于暂时保留为1。(4)配置寄存器。配置寄存器的内容用于确定温度值的数字转换分辨率。 DS18B20 工作时按此寄存器的分辨率将温度转换为相应精度的数值, 它是高速缓存器的第5个字 节,该字节定义如图2.4所示。TMR0R111111图2.4高速缓存

10、器的第5个字节示意图TM是测试模块位,用于设置 DS18B20在工作模式还是在测试模式。在 DS18B20出厂时,该位被设置为0,用户不必改动;R1和R0用来设置分辨率;其余5位均固定为1 DS18B20的分辨率设置如表2.1所示表2.1 DS18B20的分辨率设置R1R0分辨率最大转换时间(ms)009位93.750110位187.51011位3751112位7502.2.3 DS18B20勺测温原理DS18B20主要由斜率累加器、温度系数振荡器、减法计数器、温度寄存器等部分组成。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预 置值。温度系数振荡器用于产生减法计数脉

11、冲信号,其中低温度系数振荡器受温度的影 响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器受温度的影响较大,随温度的变化,其振荡频率明显改变,产生的信号作为减法计数器2的输入脉冲。减法计数器对脉冲信号进行减法计数。温度寄存器暂存温度数值。在图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,从而完成温度测量。计数门的开启时间由高温度系数振荡器决定, 每次测量前,首先将-55摄氏度多对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55摄氏度所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进

12、行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1。之后,减法计数器1的预置将重新被装入, 减法计数器1重新开始对低温度系数振荡器产生的脉冲信号进行计数,如此循环,直到 减法计数器2计数到0时,停止温度寄存器的值的累加。此时,温度寄存器中的数值即 为所测温度。斜率累加器不断补偿和修正测温过程中的非线性,只要计数门未关闭就重 编辑版word复上述过程,直至温度寄存器的值达到被测温度值。由于DS18B20是单总线芯片,在系统中若有多个单总线芯片,每个芯片的信息交换则是分时完成的,均有严格的读/写时序要求。系统对DS18B20的操作协议为:初始化 DS18B20(发复位脉冲)f发ROM

13、功能命令-发存储器操作命令-处理数据。2.2.4 DS18B20勺 ROM 命令(1) Read ROM命令彳t码33H,允许主设备读出 DS18B20的64位二进制ROM代码。该命令只适用于总线上存在单只DS18B20。(2) Match ROM命令代码55H,若主线上有多个从设备,使用该命令可以选中某一制定的DS18B2Q即可与64位二进制ROM代码完全匹配的DS18B20才能响应其操作。(3) Skip ROM命令代码CCH,在启动所有 DS18B20转换之前或系统只有一个DS18B20时,该命令将允许主设备不提供64位二进制ROM代码就使用寄存器操作命令。(4) Search ROM

14、命令代码F0H ,当系统初次启动时,主设备可能不知总线上有多少个从设备或者它们的 ROM 代码,使用该命令可确定系统中的从设备个数及ROM 代码。(5) Alarm ROM 命令代码ECH ,该命令用于鉴别和定位系统中超出程序设定的报警温度值。(6) Write Scratchpa跄令彳t码4EH ,允许主设备向DS18B20的寄存器写入两个字节的数据,其中第一个字节写入 TH 中,第二个字节写入 TL 中。可以在任何时刻发出复位命令中止数据的写入。(7) Read Scratchpa命令彳t码BEH ,允许主设备读取暂存器中的内容。从第一个字节开始,直到 CRC 读完第九个字节。也可以在任何

15、时刻发出复位命令中止数据的读取操作。(8) Copy Scratchpad令彳t码48H,将高温触发器TH和低温触发器TL中的字节 复制到非易失性E2PROM。若主机在该命令之后又发出读操作, 而DS18B20又忙于将暂 存器的内容复制到E2PROM时,DS18B20就会输出一个“0”。若复制结束,则DS18B20 输出一个“ 1” 。如果使用寄生电源,则主设备发出该命令后,立即发出强上拉并至少保持 10ms 以上的时间。(9) Convert T命令代码44H,启动一次温度转换。若主机在该命令之后又发出其他 操作,而DS18B20又忙于温度转换,DS18B20就会输出一个“0”。若转换结束,

16、则DS18B20 输出一个“ 1” 。如果使用寄生电源,则主设备发出该命令之后,立即发出强上拉并至少保持500ms以上的时间。(10)Recall任命令代码B8H,将高温触发器TH和低温触发器TL中的字节从E2ROM 中复制回到暂存器中。该操作是在DS18B20上电时自动执行,若执行该命令后又发出读 操作,DS18B20会输出温度转换忙标志:0为忙,1完成。(11) Read Power Supply令彳t码B4H,主设备将该命令发给 DS18B20后发出读操 作,DS18B20会返回它的电源使用模式:0为寄生电源,1为外部电源。2.3 74LS13遑础知识74LS137是一种3线一8线译码器

17、/解调器,在三个地址输入端都加有地址锁存器。当锁存使能输入是低电平时,电路就具有译码器 / 解调器的功能。当锁存使能输入从低电平转换到高电平时,选择输入A 、 B 和 C 中的地址便存储在锁存器中。只要锁存使能编辑版 word输入保持高电平,则可不再考虑地址的变化。输出使能控制控制着输出状态,而不管选 择或锁存使能状态如何,除非一个输出是高一个输出是低,则所有输出全是高。2.4 74LS37城础知识引脚功能:(1) 1D8D: 8位数据输入端(2) OE:三态允许控制端(低电平有效)(3) LE:锁存允许端(4) 1Q8Q: 8位数据输出锁存端74LS373的输出端D0D7可直接与总线相连。当

18、三态允许控制端/OE为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存器 允许端LE为高电平时,Q随数据D而变;当LE为低电平时,D被锁存在已建立的数 据电平。LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mv。2.5 原理图设计本设计以AT89C51单片机为核心,温度传感器给出相应的温度值,通过总线发送 到芯片上,在LED显示屏上显示温度传感器上的温度。当温度高于38摄氏度时,在显示出温度的同时,蜂鸣器发出警报声。所需原件如表 5.1所示。表2.2电子体温计

19、所用的元件单片机AT89C51瓷片电容CAP30PF麦克风SOUNDER电解电容CAP-ELEC晶振 CRYSTAL12MHz三极管2N2905电阻RES滑动变阻器POT-LIN温度传感器DS18B20芯片 74LS373芯片 74LS137显示屏7SEG-MPX4-CC:图2.5原理图示意图原理图如图2.5所示编辑版word3 软件设计3.1 流程图设计通过对系统的分析,我们可以对本设计有个大体的了解。如想得到温度,必须得先对DS18B20进行初始化处理。启动定时器,设置延时,并开中断,判断经过多长时间。若是没经过1.112ms要对其继续判断是否是第一次采集温度,如果是的话那就返回继续判断经

20、过1.112ms如果不是那就将上次采集的温度返回判断经过1.112ms以上判断是采集温度并判断延时时间。 如果经过1.112ms, 那么程序继续执行, 关中断并令TR0=0,采集刚才的温度,保存并在LED 显示屏上显示出来。此时再判断如果温度高于38 摄氏度,那么蜂鸣器报警;如果低于这个温度程序则不报警,等待下次测量或者结束测量。根据以上分析,我们可以画出流程图如图 6.1 所示。编辑版 word编辑版word显示上次所采集的温度3.2 源程序设计根据以上的分析,我们可以写出程序如下:/*/*显示内容:利用18B20单线温度检测的应用程序然后在数码管可以显示 XX.XC, C表示摄氏度/*/

21、#include#include#include#define uchar unsigned char #define uint unsigned int/*/*定义端口*/编辑版 word/*/ sbit seg1=P0A0;sbit seg2=P0A1; sbit seg3=P0A2;sbit DQ=P3A6;/DS18B20 端口sbit beep=P2A0;/ 警报sfr dataled=0x90;/显示数据端口 P1/*/*全局变量*/*/ uint temp;uchar flag_get,count,num,minute,second;uchar code tab=0x3f,0x0

22、6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 七段数码管共阴uchar str6;/*/*函数声明*/*/* void delay1(uchar MS);unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);/*/*主函数*/*/ void main()unsigned char TempH,Temp

23、L;TMOD|=0x01;/ 定时器设置TH0=0xef;TL0=0xf0;IE=0x82;TR0=1;P0=0x00;count=0;while(1)str5=0x39;/ 显示 C 符号str1=tabTempH/100;/ 百位温度str2=tab(TempH%100)/10;/ 十位温度str3=tab(TempH%100)%10|0x80;/ 个位温度,带小数点str4=tabTempL;if(TempH%100)/10=3&(TempH%100)%10=5&TempL0|(TempH%100)/10=3&(TempH%100)%104;TempL=temp&0x0f;TempL=T

24、empL*6/10;/ 小数近似处理flag_get=0;/*/*定时器中断*/*/ void tim(void) interrupt 1 using 1/ 中断,用于数码管扫描和温度检测间隔TH0=0xef;/ 定时器重装值TL0=0xf0;num+;if(num=50)num=0;flag_get=1;/ 标志位有效second+;if(second=60)second=0;minute+;)count+;if(count=1)P0=0;dataled=str0;/ 数码管扫描if(count=2)P0=1;dataled=str1;if(count=3)P0=2;dataled=str2

25、;if(count=4)P0=3;dataled=str3;if(count=5)P0=4;dataled=str4;if(count=6)P0=5;dataled=str5;count=0;*/*延时函数*/编辑版 word*void delay(unsigned int i)/施时函数while(i-);*/*初始化*/*void Init_DS18B20(void)unsigned char x=0;DQ=1;/DQ 复位delay(8);/ 稍作延时DQ=0;/ 单片机将 DQ 拉低delay(80);/大于 480usDQ=1;/ 拉高总线delay(10);x=DQ;/ 稍作延时后

26、,如果x=0 ,则初始化成功;如果x=1 ,则初始化失败delay(5);/*/*读一个字节 */*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat=0;for(i=8;i0;i-)DQ=0;/ 给脉冲信号dat=1;DQ=1;/ 给脉冲信号if(DQ)dat|=0x80;delay(5);*/return(dat);/*/* 写一个字节*/*/void WriteOneChar(unsigned char dat)unsigned char i=0;for(i=8;i0;i-)DQ=0;DQ=dat&0x

27、01;delay(5);DQ=1;dat=1;delay(5);/*/*/*读取温度*/ /*unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(Oxcc);/跳过读序号列号的操作WriteOneChar(0x44);/启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xcc);/跳过读序号列号的操作WriteOneChar(0xbe);/读取温度寄存器等(共可读9个寄存器)前两

28、个就是温度a=ReadOneChar();/低位b=ReadOneChar();/高位b=8;t=a+b;return(t);4 系统仿真调试4.1 程序调试与运行打开keil程序,执行菜单命令 projectnew project创建“基于AT89C51单片机电子体温计设计”项目,并选择单片机型号为 AT89C51。执行菜单命令filenew 创建文件,输入上述 C 程序,保存为“基于AT89C51 单片机电子体温计设计.C。在project栏的巾le管理窗口中右击文件组,选择“add file to group source group1 ” ,将源程序添加到项目中。执行菜单命令proje

29、ctopinions for target target 1 , 在弹出的对话框中选择output选项卡,选中 create hex file 在 debug选项卡中, 选中 use: proteus VSM simulator执行菜单命令projectbuild target, 编译源程序,如果编译成功, 则在 output window窗口中显示没有错误,并创建了“基于 AT89C51 单片机电子体温计设计.HEX ”文件。在已绘制好的原理图 proteus isis菜单栏中,执行菜单命令debuguse remote debugmonitor将该项选中,是proteus与keil真正连接起来,使它们联合调试。在keil中执行菜单命令 debugstart/stop debug session进行keil调试环境。同时在proteus isis窗口中可以看出proteus也进入了程序调试状态。在keil中按F5键运行程序。4.2 结果分析调整DS18B20上的“+”“-”符号,可以看到在显

温馨提示

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

评论

0/150

提交评论