版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.PAGE 11系统设计的目的意义1.1 目的体温是生命活动的一种表现,是人体新代的一个重要生理参数。体温既有生理学的意义,又有重要的临床意义,是临床诊断的一个重要指标。因此体温计在现在的生活中有极为重要的作用。传统的水银体温计易破碎,存在水银污染的可能,测量时间较长,不易读数,为此设计一种新型的体温计,它的测量精度与传统的水银体温计相媲美的情况下,大缩短了测量时间且携带方便,对环境几乎没有污染。它以AT89C51单片机为核心,结合温度传感器,LED模块等外部设备,在软件的控制下,实现智能化的体温测量,不但能够准确测温,而且能够对温度进展逻辑判断,并且通过LED显示器将测量结果显示出来。假设温
2、度高于38摄氏度系统就会自动报警,这就意味着所测得的温度异于人体正常温度,引起人们注意。本设计的创新点在于,不仅完成了电子体温计的要求,而且还增加了一个报警装置。当测量者的体温高于人体正常体温时,体温计就会自动报警,人性化设计,为广阔客户带来方便。1.2 国外进展情况中国电子体温计行业最早起源于1998年,以每年高于30%的速度开展至今经历了十多年时间。高达数倍甚至十多倍的利润空间、较低的政策壁垒和技术壁垒吸引了众多企业进入该行业。目前国涌现了大小80多家电子体温计品牌,既有“欧姆龙、“婴之侣、“捷威等行业领头的外资品牌,也有“华辰、“世佳、“华安、“康复等迅速开展壮大的国品牌。今后试图进去该
3、行业的生产厂家将到达50多家。由于行业逐步规和新一轮电子体温计产品消费热潮的兴起,2021年以后,电子体温计产品行业进入了一个前所未有的高速开展时期,市场的快速开展孕育着巨大的商机。1.3 设计思路本系统可以使用ISIS画出原理图,翻开ISIS软件,单击命令窗口filenew design,创立一个default模板,保存名称为“基于AT89C51单片机电子体温计设计.DSN。执行菜单命令librarypick device/symbol,添加所需元件。本程序中可以使用DS18B20温度传感器,上面有“+“-可以模拟外界温度变化。芯片选取74LS137,74LS373。在原理图编辑窗口中放置元
4、件,再单击工具箱中的“原件终端图标,在对象选择中单击POWER和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置好相应参数,完成电路设计。设计的软件局部在Keil中完成,具体操作步骤在后面仿真步骤中有详细介绍,在此就不一一列出。2系统分析2.1 系统总体设计本系统采用AT89C51单片机、DS18B20温度采集模块和LED显示器共同实现。AT89C51集合了温度传感器、放大器、A/D转换器三者的作用。其中AT89C51通过P1.0和DS18B20进展单总线通信,启动DS18B20温度采集功能并取出转化后的体温数值,最后将体温值显示在外接在P0口与P2口的四位共阴LED上。设
5、计思路如图2.1所示。DS18B20单片机LED显示器蜂鸣器图2.1 设计思路示意图2.2 DS18B20根底知识DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统热敏电阻相比,只需一根线就能直接读出被测温度,并可根据实际需求编程实现912位数字值的读数方式。 DS18B20的封装形式及引脚功能DS18B20有三种封装形式:采用3引脚TO-92的封装形式。采用6引脚TSOC封装形式。采用8引脚SOIC封装形式。DS18B20芯片的引脚功能如下:GND:电源地。DQ:数字信号输入/输出端。VDD:外接供电电源输入端。采用寄生电源方式时,该引脚接地。 DS1
6、8B20的部构造温度传感器DS18B20的部构造如下列图,主要由64位ROM、温度传感器及高速缓存器配置存放器等局部组成,如图2.2所示。VDDDQ64位ROM和单线接口高速缓存器温度传感器高温触发器TH低温触发器TL配置存放器存储与控制逻辑电源检测8位CRC发生器C图2.2 DS18B20内部构造示意图下面对DS18B20的相关局部进展简单的描述。 164位ROM。64位ROM是由厂家用激光刻录一个64位的二进制ROM代码,是该芯片的标志号,如图2.3所示。8位循环冗余检验48位序列号8位分类编号10H图2.3 64位ROM示意图 MSB LSB MSB LSB MSB LSB8位分类编号表
7、示产品分类编号,DS18B20的分类编号为 10H;48号序列号是一个大于281*1012的十进数编码,作为该芯片的唯一标志代码;8位循环冗余检验为前56位的CRC循环冗余校验码CRC=*8+*5+*4+1。由于每个芯片的64位ROM代码不同,因此在单总线上能够并挂多个DS18B20进展多点温度实时检测。2温度传感器。温度传感器是DS18B20的核心局部,该功能部件可完成对温度的测量。通过软件编程可将-55+125摄氏度围的温度值按9位、10位、11位、12位的转换精度进展量化,以上的转换精度都包括一个符号位,因此对应的温度量化值分别为0.5、0.25、0.125、0.0625摄氏度,即最高转
8、换精度为0.0625摄氏度。芯片出厂时默认为12位的转换精度。当接收到温度转换指令44H后,开场转换,转换完成后的温度以16位带符号扩展的二进制补码形式表示,存储在高速缓存器RAM的第0、1字节中,二进制数的前5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘上0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘上0.0625即可得到实际温度。3高速缓存器。高速缓存器包括一个高速暂存器RAM和一个非易失性可电擦除E2PROM。非易失性可电擦除E2PROM用于存放高温触发器TH、低温触发器TL和配置存放器中的信息。高速暂存器RAM是一个连续8字节的
9、存储器,前两个字节是测得的温度信息,第1个字节的容是温度的低8位,第2个字节是温度的高8位。第3个和第4个字节是高温触发器TH、低温触发器TL的易失性复制,第5个字节是配置存放器的易失性复制,以上字节的容在每一次上电复位时被刷新。第6、7、8个字节用于暂时保存为1。4配置存放器。配置存放器的容用于确定温度值的数字转换分辨率。DS18B20工作时按此存放器的分辨率将温度转换为相应精度的数值,它是高速缓存器的第5个字节,该字节定义如图2.4所示。图2.4 高速缓存器的第5个字节示意图TMR0R111111TM是测试模块位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时,该位
10、被设置为0,用户不必改动;R1和R0用来设置分辨率;其余5位均固定为1。DS18B20的分辨率设置如表2.1所示。表2.1 DS18B20的分辨率设置R1R0分辨率最大转换时间ms009位93.750110位187.51011位3751112位750 DS18B20的测温原理DS18B20主要由斜率累加器、温度系数振荡器、减法计数器、温度存放器等局部组成。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值。温度系数振荡器用于产生减法计数脉冲信号,其中低温度系数振荡器受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器受温度的影响较大,随温度的
11、变化,其振荡频率明显改变,产生的信号作为减法计数器2的输入脉冲。减法计数器对脉冲信号进展减法计数。温度存放器暂存温度数值。在图中还隐含着计数门,当计数门翻开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进展计数,从而完成温度测量。计数门的开启时间由高温度系数振荡器决定,每次测量前,首先将-55摄氏度多对应的基数分别置入减法计数器1和温度存放器中,减法计数器1和温度存放器被预置在-55摄氏度所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进展减法计数,当减法计数器1的预置值减到0时,温度存放器的值将加1。之后,减法计数器1的预置将重新被装入,减法计数器1重新开场对低温度系数
12、振荡器产生的脉冲信号进展计数,如此循环,直到减法计数器2计数到0时,停顿温度存放器的值的累加。此时,温度存放器中的数值即为所测温度。斜率累加器不断补偿和修正测温过程中的非线性,只要计数门未关闭就重复上述过程,直至温度存放器的值到达被测温度值。由于DS18B20是单总线芯片,在系统中假设有多个单总线芯片,每个芯片的信息交换则是分时完成的,均有严格的读/写时序要求。系统对DS18B20的操作协议为:初始化DS18B20发复位脉冲发ROM功能命令发存储器操作命令处理数据。 DS18B20的ROM命令1Read ROM命令代码33H,允许主设备读出DS18B20的64位二进制ROM代码。该命令只适用于
13、总线上存在单只DS18B20。2Match ROM命令代码55H,假设主线上有多个从设备,使用该命令可以选中*一制定的DS18B20,即可与64位二进制ROM代码完全匹配的DS18B20才能响应其操作。3Skip ROM命令代码CCH,在启动所有DS18B20转换之前或系统只有一个DS18B20时,该命令将允许主设备不提供64位二进制ROM代码就使用存放器操作命令。4Search ROM命令代码F0H,当系统初次启动时,主设备可能不知总线上有多少个从设备或者它们的ROM代码,使用该命令可确定系统中的从设备个数及ROM代码。5Alarm ROM命令代码ECH,该命令用于鉴别和定位系统中超出程序设
14、定的报警温度值。6Write Scratchpad命令代码4EH,允许主设备向DS18B20的存放器写入两个字节的数据,其中第一个字节写入TH中,第二个字节写入TL中。可以在任何时刻发出复位命令中止数据的写入。7Read Scratchpad命令代码BEH,允许主设备读取暂存器中的容。从第一个字节开场,直到CRC读完第九个字节。也可以在任何时刻发出复位命令中止数据的读取操作。8Copy Scratchpad命令代码48H,将高温触发器TH和低温触发器TL中的字节复制到非易失性E2PROM。假设主机在该命令之后又发出读操作,而DS18B20又忙于将暂存器的容复制到E2PROM时,DS18B20就
15、会输出一个“0。假设复制完毕,则DS18B20输出一个“1。如果使用寄生电源,则主设备发出该命令后,立即发出强上拉并至少保持10ms以上的时间。9Convert T命令代码44H,启动一次温度转换。假设主机在该命令之后又发出其他操作,而DS18B20又忙于温度转换,DS18B20就会输出一个“0”。假设转换完毕,则DS18B20输出一个“1”。如果使用寄生电源,则主设备发出该命令之后,立即发出强上拉并至少保持500ms以上的时间。10Recall E2命令代码B8H,将高温触发器TH和低温触发器TL中的字节从E2ROM中复制回到暂存器中。该操作是在DS18B20上电时自动执行,假设执行该命令后
16、又发出读操作,DS18B20会输出温度转换忙标志:0为忙,1完成。11Read Power Supply命令代码B4H,主设备将该命令发给DS18B20后发出读操作,DS18B20会返回它的电源使用模式:0为寄生电源,1为外部电源。2.3 74LS137根底知识74LS137是一种3线8线译码器/解调器,在三个地址输入端都加有地址锁存器。当锁存使能输入是低电平时,电路就具有译码器/解调器的功能。当锁存使能输入从低电平转换到高电平时,选择输入A、B和C中的地址便存储在锁存器中。只要锁存使能输入保持高电平,则可不再考虑地址的变化。输出使能控制控制着输出状态,而不管选择或锁存使能状态如何,除非一个输
17、出是高一个输出是低,则所有输出全是高。2.4 74LS373根底知识引脚功能:11D8D:8位数据输入端2OE:三态允许控制端低电平有效3LE:锁存允许端41Q8Q:8位数据输出锁存端74LS373的输出端D0D7可直接与总线相连。当三态允许控制端/OE为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。当锁存器允许端LE为高电平时,Q随数据D而变;当LE为低电平时,D被锁存在已建立的数据电平。LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mv。2.5 原理图设计本设计
18、以AT89C51单片机为核心,温度传感器给出相应的温度值,通过总线发送到芯片上,在LED显示屏上显示温度传感器上的温度。当温度高于38摄氏度时,在显示出温度的同时,蜂鸣器发出警报声。所需原件如表5.1所示。表2.2 电子体温计所用的元件单片机AT89C51瓷片电容CAP 30PF麦克风SOUNDER电解电容CAP-ELEC晶振CRYSTAL 12MHz三极管2N2905电阻RES滑动变阻器POT-LIN温度传感器DS18B20芯片74LS373芯片74LS137显示屏7SEG-MP*4-CC原理图如图2.5所示图2.5 原理图示意图3 软件设计3.1 流程图设计通过对系统的分析,我们可以对本设
19、计有个大体的了解。如想得到温度,必须得先对DS18B20进展初始化处理。启动定时器,设置延时,并开中断,判断经过多长时间。假设是没经过1.112ms,要对其继续判断是否是第一次采集温度,如果是的话那就返回继续判断经过1.112ms;如果不是那就将上次采集的温度返回判断经过1.112ms。以上判断是采集温度并判断延时时间。如果经过1.112ms,则程序继续执行,关中断并令TR0=0,采集刚刚的温度,保存并在LED显示屏上显示出来。此时再判断如果温度高于38摄氏度,则蜂鸣器报警;如果低于这个温度程序则不报警,等待下次测量或者完毕测量。根据以上分析,我们可以画出流程图如图6.1所示。开 始Y是否第一
20、次采集DS18B20温度是否经过1.112ms初始化跳过读DS18B20启动定时器DS18B20启动定时器0延时1.112ms开中断N结 束Y关中断并使TR0为0显示温度值采集DS18B20温度值并保存是否超过38度蜂鸣器报警显示上次所采集的温度NYN图6.1 流程图示意图3.2 源程序设计根据以上的分析,我们可以写出程序如下:/*/* 显示容:利用18B20单线温度检测的应用程序 然后在数码管可以显示*.*C,C表示摄氏度* /*/*include*include*include*define uchar unsigned char*define uint unsigned int/*/*
21、定义端口 */*/sbit seg1=P00;sbit seg2=P01;sbit seg3=P02;sbit DQ=P36;/DS18B20端口sbit beep=P20;/警报sfr dataled=0*90;/显示数据端口P1/*/* 全局变量 */*/uint temp;uchar flag_get,count,num,minute,second;uchar code tab=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f; /七段数码管共阴uchar str6;/*/* 函数声明 */*/void delay1(uchar MS);
22、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,TempL; TMOD|=0*01;/定时器设置 TH0=0*ef; TL0=0*f0; IE=0*82; TR0=1; P0=0*00; count=0; while(1) str5=0*39;/显
23、示C符号 str1=tabTempH/100;/百位温度 str2=tab(TempH%100)/10;/十位温度 str3=tab(TempH%100)%10|0*80;/个位温度,带小数点 str4=tabTempL; if(TempH%100)/10=3&(TempH%100)%10=5&TempL0|(TempH%100)/10=3&(TempH%100)%104; TempL=temp&0*0f; TempL=TempL*6/10;/小数近似处理 flag_get=0; /*/* 定时器中断 */*/void tim(void) interrupt 1 using 1/中断,用于数码
24、管扫描和温度检测间隔 TH0=0*ef;/定时器重装值TL0=0*f0; 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; if(count=4) P0=3; dataled=str3; if(count=5) P0=4; dataled=str4; if(cou
25、nt=6) P0=5; dataled=str5; count=0;/*/* 延时函数 */*/void delay(unsigned int i)/延时函数 while(i-);/*/* 初始化 */*/void Init_DS18B20(void) unsigned char *=0; DQ=1;/DQ复位 delay(8);/稍作延时 DQ=0;/单片机将DQ拉低 delay(80);/大于480us DQ=1;/拉高总线 delay(10); *=DQ;/稍作延时后,如果*=0,则初始化成功;如果*=1,则初始化失败 delay(5);/*/* 读一个字节 */*/unsigned c
26、har ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for(i=8;i0;i-) DQ=0;/给脉冲信号 dat=1; DQ=1;/给脉冲信号 if(DQ) dat|=0*80; delay(5); return(dat);/*/* 写一个字节 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0*01; delay(5); DQ=1; dat=1; delay(5);/*/* 读取温度 */*/u
27、nsigned int ReadTemperature(void) unsigned char a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0*cc);/跳过读序号列号的操作 WriteOneChar(0*44);/启动温度转换 delay(200); Init_DS18B20(); WriteOneChar(0*cc);/跳过读序号列号的操作 WriteOneChar(0*be);/读取温度存放器等共可读9个存放器前两个就是温度 a=ReadOneChar();/低位 b=ReadOneChar(
28、);/高位 b=8; t=a+b; return(t);4 系统仿真调试4.1 程序调试与运行翻开keil程序,执行菜单命令projectnew project创立“基于AT89C51单片机电子体温计设计工程,并选择单片机型号为AT89C51。执行菜单命令filenew创立文件,输入上述C程序,保存为“基于AT89C51单片机电子体温计设计.C。在project栏的file管理窗口中右击文件组,选择“add file to groupsource group1,将源程序添加到工程中。执行菜单命令projectopinions for target target 1,在弹出的对话框中选择outp
29、ut选项卡,选中create he* file。在debug选项卡中,选中use:proteus VSM simulator。执行菜单命令projectbuild target,编译源程序,如果编译成功,则在output window窗口中显示没有错误,并创立了“基于AT89C51单片机电子体温计设计.HE*文件。在已绘制好的原理图proteus isis菜单栏中,执行菜单命令debuguse remote debug monitor将该项选中,是proteus与keil真正连接起来,使它们联合调试。在keil中执行菜单命令debugstart/stop debug session,进展keil调试环境
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度个人房地产抵押借款合同智能审核版
- 2025年度个人车库买卖与车位使用权过户合同2篇
- 二零二五年度模板木枋行业节能减排合作合同4篇
- 二零二五年度新型环保涂料研发与应用推广合同3篇
- 2025年度模具制造企业兼职用工合同范本3篇
- 二零二五年度海洋资源开发合作合同范本共3篇
- 2025年度离婚诉讼诉状撰写规范解读4篇
- 2025年度个人二手房交易合同范本(含装修款及违约责任)
- 2025年度农业科技园区配套设施建设合同4篇
- 二零二五年度农业科技培训与推广合同8篇
- 中铁十四局合同范本
- 农耕研学活动方案种小麦
- 七年级下册-备战2024年中考历史总复习核心考点与重难点练习(统部编版)
- 2024年佛山市劳动合同条例
- 污水管网规划建设方案
- 城镇智慧排水系统技术标准
- 采购管理制度及流程采购管理制度及流程
- 五年级美术下册第9课《写意蔬果》-优秀课件4人教版
- 节能降耗课件
- 尼尔森数据市场分析报告
- 氧气雾化吸入法
评论
0/150
提交评论