基于单片机的电子体温计设计毕业论文.doc
基于单片机的电子体温计设计毕业论文目 录第一章 绪论11.1 体温计的发展与现状11.2 新型智能电子体温计的介绍11.3 本文研究容2第二章 系统总体设计32.1 系统方案设计32.2 硬件主要模块的选取与介绍32.2.1 温度传感器的选取与介绍32.2.2 放大器的选取与介绍32.3 硬件系统方案设计4第三章 测温电路的设计53.1 NTC热敏电阻的介绍53.2 热敏电阻温度测量计算53.3 恒压源电路73.4 温度检测、放大电路8第四章 数字电路部分设计104.1 ATmega8L单片机硬件介绍104.2 电源部分与睡眠模式104.3 复位与时钟电路114.4 AD转换器124.5 人机接口13第五章 系统软件设计155.1 软件总体设计方案155.2 ADC模块的软件设计16第六章 系统测试186.1 硬件测试186.1.1 单元模块的测试186.1.2 系统整体测试186.2 软件测试186.2.1 模块测试186.2.2 整体软件测试196.3 测试结果分析19第七章 结论20参考文献21致谢22附件A23附件B24附件C2535 / 37 第一章 绪 论1.1 体温计的发展与现状体温测量的历史,可以追溯到l6世纪。当时Saatorio用空气热膨胀的原理,制出了第一支测量口腔温度的体温计。本世纪初,开始用水银来制作体温计,至今在临床上得到了广泛的应用。根据1928年Ebstein的报告,当时除测量口腔与腋下的温度外,还可以测量直肠、颈部、大腿根部,外耳与尿温,这些都是用被测皮肤温度与玻璃球积存的水银温度相等的原理实现的。1在之前,由于水银体温计使用方便、精度高,因而应用很广,再加上测温方法与其结构都已成熟,没多大改进余地,人们对它的研究失去了信心,在很长时间里几乎没有什么进展。由于用水银体温计进行体温监测很不方便,水银的污染的可能也很严重等,为了正确测量人体局部温度,促使人们开发了各种不同的测温仪器和测温方法。虽然水银体温计仍不愧是一个精度高、便宜、使用方便的测温仪器,但现在已有许多医院采用了电子体温计,用其它电子仪器测量体温也日益普与。这一事实至少说明,电子测温仪器的性能已接近水银温度计的性能。因此,鉴于传统的水银体温计汞的污染与其携带不方便易破碎,尤其是测量时间过长等缺点,本课题为解决此问题设计出一种数字式电子体温计。它在稳定性与响应时间上比传统的水银体温计有着显著的优势,精度要求也能和传统的水银体温计相媲美。1.2 新型智能电子体温计的介绍单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。它给日常生活带来多方面的进步,其中数字温度计就是一个典型的例子,医院、家庭等随处可见,为了能更加满足人们的需要,数字体温计正在更新换代。2-3温度测量在物理实验、医疗卫生、食品生产等领域有着特别重要的意义。目前所使用的温度计还有很多是传统的水银温度计。这种温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量比较大,达到热平衡所需的时间较长,因此很难读准,使用非常不方便。电子体温计由温度传感器,液晶显示器,专用集成电路与其他电子元器件组成。能快速准确地测量人体体温,与传统的水银玻璃体温计相比,具有读数方便,测量时间短,测量精度高,能记忆并有蜂鸣提示等优点,尤其是电子体温计不含水银,对人体与周围环境无害,特别适合于家庭,医院等场合使用。41.3 本文研究容鉴于目前体温计的发展现状,本设计采用单片机来控制实现体温的测量、显示、与报警等功能,与传统的体温计相比安全性高、携带使用方便、测温速度快、测量围广。此次设计的体温计温度测量围在25oC45oC,设计容包括有温度的采集与放大处理,数字电路部分的设计,以与程序的编写。文中详细介绍了硬件电路各部分的工作原理、软件的编写与仿真以与整个设计过程,最后对系统进行了各种测试。第二章 系统总体设计2.1 系统方案设计(1)根据温度围和精度选择NTC热敏电阻,确定其型号,根据电阻特性设计温度采集与放大电路,利用运算放大器将温度信号转换为电压信号,设计电路时,因为单片机采集电压在02.68V,所以输入的测量围为2545左右时对应输出电压为02.68V左右。(2)温度采集并放大后将信号输入单片机ATmega8L的AD口,对模拟量进行采样,转化为数字信号,单片机对该数字信号进行处理,根据采集的信号与温度的数学关系,将该数字信号转化为对应温度值。(3)用数码管显示出温度值,同时控制蜂鸣器发声并根据按键做相应调整。(4)所需的电源功率比较小,数字电路部分采用普通的三端稳压芯片,放大电路部分采用DC-DC电源以提高稳定性和测温精度。2.2 硬件主要模块的选取与介绍2.2.1 温度传感器的选取与介绍在电子体温计中常用的温度传感器可分为两种:集成温度传感器和NTC热敏电阻。集成温度传感器使用方便,整体电路设计相对比较简单,但是集成温度传感器的测量围一般都比较广,所以精度有限,很难满足设计要求,要在体温计上使用必须用专用的传感器,因此价格比较贵,故在本设计中不采用。所谓NTC热敏电阻器就是负温度系数热敏电阻器。负温度系数热敏电阻器温度计的精度可以达到0.1,感温时间可少至10s以下。它可应用于食品储存、医药卫生、科学种田、海洋、深井、高空、冰川等方面的温度测量。4NTC热敏电阻原理简单,对温度灵敏,可以自由控制精度,所以在设计时有更大的发挥空间,故本设计采用的是NTC热敏电阻作为体温计的温度传感器。2.2.2 放大器的选取与介绍为使电路设计简单,特别是电源部分的设计,在本设计中采用单电源供电、低电压、低功耗的运算放大器,因为对测温精度有一定的要求,所以在选取运放时要考虑运算放大器相关参数,如输入偏置电流和、输入失调电压等。LM358部包括有两个独立的、高增益、部频率补偿的双运算放大器,适合于电源电压围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合,其引脚功能如图2.1所示。图2.1 LM358引脚功能图LM358的一些基本参数与特性:·输入偏置电流:45nA·输入失调电流:50nA·输入失调电压:2.9mV·输入共模电压最大值:VCC-1.5V·输出电压摆幅大:0至Vcc-1.5V·电源电压围宽:单电源(3-30V)·低功耗电流,适合于电池供电·共模抑制比:80dB·电源抑制比:100dB2.3 硬件系统方案设计 根据设计要求,将系统分为若干模块,以单片机为核心,完成多项功能。系统框图如图2.2,温度传感器把采集的外部温度信号转换成电压信号,经过放大电路放大后作为单片机部AD转换器的模拟输入信号,单片机将模拟信号转换成数字信号,并通过算法将其换算成对应的温度,再经数码管显示出来。同时单片机还处理按键、报警模块。电源部分则为整个系统提供稳定的电源,保证系统能正常的工作。5NTC热敏电阻温度采集LM358电压信号放大电源数码管显示按键预置报警模块ATmega8L单片机图2.2 系统整体框架图第三章 测温电路的设计3.1 NTC热敏电阻的介绍热敏电阻是利用半导体的阻值随温度变化这一热性而制成的,分为NTC(负温度系数)热敏电阻、PTC(正温度系数)热敏电阻两大类。PTC热敏电阻电阻值随温度的升高而增大,NTC热敏电阻电阻值随温度的升高而降低。在此主要介绍NTC热敏电阻。NTC是Negative Temperature Coefficient的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件。通常我们提到的NTC是指负温度系数热敏电阻,简称NTC热敏电阻。NTC热敏电阻是一种典型具有温度敏感性的半导体电阻,它的电阻值随着温度的升高呈阶跃性的减小。NTC热敏电阻根据其用途的不同分为:功率型NTC热敏电阻、补偿型NTC热敏电阻、测温型NTC热敏电阻。NTC热敏电阻是以锰、钴、镍和铜等金属氧化物为主要材料,采用陶瓷工艺制造而成的。这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。热敏电阻有如下优点:对于温度的变化,其阻值变化较大,即输出灵敏度高;便于大批量生产,因而价格便宜;体积小而且坚固;由于灵敏度高,因而信号处理非常方便。缺点是非线性、测温围窄、互换性差等。63.2 热敏电阻温度测量计算首先介绍一个NTC负温度系数热敏电阻专业术语:零功率电阻值RT()。RT指在规定温度T时,采用引起电阻值变化相对于总的测量误差来说可以忽略不计的测量功率测得的电阻值,其中T一般情况下为298.15K(25)。NTC热敏电阻的电阻值与温度变化的关系式为:RT = R0expB(1/T1/T0)(3.1)RT:在温度T(K)时的NTC热敏电阻阻值 R0:在额定温度T0(K)时的NTC热敏电阻阻值T:规定温度(K)B:NTC热敏电阻的材料常数,又叫热敏指数exp:以自然数e为底的指数(e = 2.71828)注释:该关系式是经验公式,只在额定温度T0或额定电阻阻值R0的有限围才具有一定的精确度,因为材料常数B本身也是温度T的函数。由式3.1可得出RT-T的关系示意图,如图3.1所示。a) B值相同,电阻值不同b) 电阻值相同,B值不同图3.1 NTC热敏电阻RT-T特性曲线示意图由图3.1可知NTC热敏电阻阻值与温度的关系成很明显的非线性关系,在非线性情况下,将严重影响测量准确度,因此必须作线性处理。线性化处理可以由硬件实现,但线性化电路往往较复杂,也会增加检测系统的成本。在计算机系统处理能力允许的条件下,可以用软件实现线性化处理。设传感器的静态输入、输出的特性为y=f(x),是非线性的,则可以通过查表法、线性插值法,以与二次抛物线折线法等几种线性化方法,得到线性的结果:y=Kx+b。查表法虽然简单,但需逐点测量输入-输出对应数据;采用线性插值法时,划分的段数越多,得到的结果就越精确,但计算所需时间就越长,即仪器稳定时间就越长;二次抛物线折线法的计算就更加复杂。本设计采用对数计算的方法,通过软件完成线性化:由式3.1变换可得:(3.2)由式3.2可得出lnRT与1/T的关系,如图3.3所示。图3.3 lnRT1/T的关系图由图3.3可知1/T与lnRT之间存在线性关系,所以问题转为求取对数lnRT,然后通过t=B/(ln(RT/R0)+B/298.15)-273.15公式来计算温度值。3.3 恒压源电路为提高系统的测温精度,目前常使用的方法有电桥线性法、恒压源测量法、恒流源测量法。电桥平衡法理论上线性化效果明显,电路抗干扰能力强,电路简单,但是测量精度还是不高,而恒流源和恒压源测量法的工作原理是都是根据欧姆定理,7测温原理如图3.4和图3.5所示。图3.4 恒流源测量电路图3.5 恒压源测量电路图3.6 PT1301部电路框图在本设计中,若采用普通的三极管来制作恒流源,则难以满足系统对精度的要求,若制件精密的恒流源,则会使硬件电路变得更为复杂,所以经综合考虑,本系统采用恒压源测量电路。恒压源由DC-DC升压芯片PT1301产生,PT1301部包含误差放大器、斜坡产生器、比较器、功率开关和驱动器。能在较宽的负载电流围稳定和高效的工作,并且不需要任何外部补偿电路。其部电路框图如图3.6所示。PT1301的一些主要特点:·低静态工作电流:14A·低启动输入电压:典型0.8V·关断状态零工作电流·高效率:90%·固定开关频率:500KHz 本设计中恒压电路采用的是PT1301的典型应用图,如图3.7所示:图3.7 恒压源产生电路根据芯片手册可知:,由图上的参数可得出本电路的输出电压为6.125V,该电源除提供给热敏电阻作用外,同时还给运算放大器LM358供电。图中POWER连接到单片机的I/O口,通过给该引脚写低可以将恒压源电路关闭,降低功耗。3.4 温度检测、放大电路图3.8 温度检测、放大电路如图3.8所示,RT1是NTC热敏电阻,型号为MF2-503-3950K,根据式3.2计算可得,当温度从2545变化时,RT1的变化围为:21.7K50K。图中左半部分是由U4B构成的一个电压跟随器:V(3.3)7图中右半部分是由U4A构成的求差电路,图中若取R9/R10=R12/R11,则(3.4)7为使V1的最大值等于2.68V左右,即当RT1=21.7K时,(3.5)根据计算得出R1516.8K,实际电路中没有16.8K的电阻,所以采用的是一个10K和一个6.8K的电阻串联得到16.8K。为使VIN不超过单片机的最大测量值,且由式3.3可得V1的最小值为1.54V,所以R12/R11应不大于2.35,本设计中取2.35。根据以上各式综合可得RT1与VIN的关系式为:(3.6)温度t与RT1的关系式为:(3.7)因为单片机不能直接计算对数,所以需要将用泰勒级数展开:其中(3.8)8考虑到精度要求,展开式保留到11项。第四章 数字电路部分设计4.1 ATmega8L单片机硬件介绍ATmega8(L)是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以与单时钟周期指令执行时间,使得ATmega8(L)的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。ATmega8(L)有3种不同的封装:28引脚PDIP封装,32引脚TQFP封装,32引脚MLF封装,为减小体积,在本设计中采用了32引脚TQFP封装,其引脚功能如图4.1所示。图4.1 ATmega8(L) TQFP封装引脚功能ATmega8(L)在的几个主要特性: 高性能、低功耗的8位AVR微处理器 先进的RISC结构,只需两个时钟周期的硬件乘法器 非易失性程序和数据存储器 8路10位ADC 特殊的处理器特点 片经过标定的RC振荡器5种睡眠模式 23 个可编程的I/O口 低工作电压:2.7 - 5.5V 低功耗(4Mhz,3V,25) 工作模式: 3.6 mA 空闲模式: 1.0 mA 掉电模式: 0.5 µA94.2 电源部分与睡眠模式对于便携式的电子设备来说,电源与功耗是一个必须要考虑的问题,因为电池在使用过程中电压波动围一般比较大,所以电路中需要采用稳压电路,本系统电源部分如图4.2所示,首先将电池的电压通过U2将其稳定为VCC(3.3V),再给数字电路部分供电,同时也加上一些滤波与去耦电容,以保证系统工作的稳定性。图中PT1301可产生一个恒定的电压供测温部分使用。单片机的睡眠模式可以使应用程序关闭MCU中没有使用的模块,从而降低功耗。AVR具有不同的睡眠模式,允许用户根据自己的应用要XX施剪裁。在设计中为减小功率耗散,在进入睡眠模式这前要将单片机部的各模块关闭,如AD转换模块,还要将每个I/O口配置为最低功耗状态,同时将PT1301的使能位拉低,以关闭模拟电路部分的电源。8图4.2系统电源电路4.3 复位与时钟电路ATmega8已经置了上电复位设计,并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单,在本设计中不需要复位按钮,复位脚可以不接任何的零件,AVR芯片也能稳定工作。即这部分不需要任何的外围零件,所以在本设计中的复位电路如图4.2所示,没有接任何元件。图4.2 本设计所使用的复位电ATmega8已经置RC振荡线路,可以产生1M、2M、4M、8M的振荡频率。不过,置的毕竟是RC振荡,所以频精度不高,但在本设计中不需要太高精度的频率,所以可以使用部RC振荡。即这部分也不需要任何的外围零件,而是将其作为普通的I/0口使用,如图4.3所示,将这两个引脚用作了数码管的段码驱动。图4.3 本设计所使用的时钟电路4.4 AD转换器在整个设计中,ADC也是一个非常关键的部分,它直接影响着整个系统的精度,所以这部分的电路设计相当重要。ATmega8(L)有一个10位的逐次逼近型ADC,ADC与一个8通道的模拟多路复用器连接,能对来自端口A的8路单端输入电压进行采样。ADC拥有0.5LSB的非线性度以与±2LSB的绝对精度,包括一个采样保持电路,以确保在转换过程中输入到ADC的电压保持恒定。ADC通过逐次逼近的方法将输入的模拟电压转换成一个10位的数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1LSB。通过写ADMUX寄存器的REFSn位可以把AVCC或部参考电压连接到AREF引脚,10如表4.2所示。REFS1REFS2参考电压选择00AREF,部Vref关闭01AVCC,AREF引脚外加滤波电容10保留11片基准电压源,AREF引脚外加滤波电容表4.2 ADC参考电压选择根据芯片手册可知ADC由AVCC 引脚单独提供电源,且AVCC与VCC之间的偏差不能超过±0.3V,官方文档推荐在VCC串上一只10uH的电感,然后接一只0.1uF的电容到地。芯片部可产生一个2.68V的基准电压,基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。在ADC电路设计时就充分都考虑这些因素。ADC部分的电路图如图4.4所示:图4.4 AD转换部分电路ADC 转换结果:,其中VREF=2.68V。4.5 人机接口系统中人机接口包括温度显示部分、按键预设部分、报警部分。其中温度显示部分采用的是四位一体的数码管显示,选用单片机的定时0的中断来刷新数码管的显示,通过数码管可以清晰的看到当前所测的温度值和其它所要显示的容。电路如图4.5所示。图4.5 数码管显示部分因为单片机有充足的I/O口,且本系统中按键数目非常少,所以按键部分采用的独立按键,通过按键可以预先设计报警温度值和报警声音等。电路如图4.6所示。图4.6 按键预设部分图4.7 报警部分报警与提示间部分采用的是普通的有源蜂鸣器,通过三极管将单片机发送的控制信号放大后驱动蜂鸣器发出声音,以提示使用者测温完毕或发出报警音。电路如图4.7所示。第五章 系统软件设计5.1 软件总体设计方案本设计的软件分为5大部分:休眠状态与工作状态的切换、AD转换模块的控制、NTC热敏电阻与温度关系的线性化处理、温度的显示与报警声音、报警门限值的设定与存储,其中AD转换模块的控制和NTC热敏电阻与温度关系的线性化处理为软件设计关键。系统上电后首先进入休眠模式,通过按键触发中断后退出休眠模式进入工作状态,然后判断是否要求进入调整报警门限值状态,之后便进入正常的测温状态;测温首先通过AD转换模块将输入给单片机的模拟电压信号转换成数字信号,然后利用第三章中的各公式,通过数学运算将其转换成对应的温度,并显示在数码管上,并判断是否测温完成和是否超过了设定值,同时单片机还要处理按键检测以与报警声音;一次测温完成后,可通过按键选择进入下一次测温还是关闭系统进入省电状态。系统整体流程图如图5.1所示。图5.1 系统整体流程5.2 ADC模块的软件设计该部分主要是将运算放大器输出的模拟电压信号转换成数字信号,并通过该数字信号计算出RT1,从而计算出当前温度值。ADC模块的位数直接影响着整个系统的测温精度,位数越高则精度越高。ATmega8单片机有一个10位的逐次逼近型ADC,在本设计中完全可以满足设计的要求。ATmega8设有8个模数转换通道,如图5.2所示,在本设计中选用的是ADC6口,所以在程序设计时首先就将输入通道选择为ADC6口,只要将MUX3.0设置成0110即可9。图5.2 ADC通道选择示意图根据硬件设计,ADC模块的基准电压要求选择部的2.68V,这点已经在前文中有所说明。另外,为防止采样太快造成资源与电量的浪费,软件设计中采用定时采样AD,所以该部分还须用到单片机的定时器。当AD转换完成后,程序进入ADC中断服务函数,读取当前有ADC值,然后利用第三章中的相关公式计算得出对就的温度值,为了使测温不会因为偶尔的一两次误测而导致测温失败,本设计中每测10次求取一次平均值,并判断是平均值否已经测温完成或超过设定的门限值。定时器中断主负责扫描数码管,使其能清晰的显示当前的温度值。具体流程图如图5.3和图5.4所示。图5.3 ADC主要流程图5.4 定时器处理流程第六章 系统测试6.1 硬件测试6.1.1 单元模块的测试电源测试:用数字万用表电压档测量各元器件的供电点电压值是否正常。测试相关测试点,经测试各测试点电压均正常。电源部分设计成功。温度采集模块的测试:调节温度变化,测试点的电压值是否有相对应的改变。当温度变化时,测试点的电压随着温度的升高而减小,如表6.1所示,达到设计要求。AD转换模块的测试:当输入为0V和2.68V以与中间若干电压输入时,测试AD转换是否正常。测试发现当输入为0V时,ADC的输出为0,输入为1V时输出为382,输入为2.68V时输出为1023,测试结果说明AD转换的功能完全实现。6.1.2 系统整体测试测试方法以水温代替人的体温,用一根水银温度计与所制作的体温计探头(捆绑)同时接触被测热水的同一点。准备一杯0摄氏度的冰水混合物和一杯热水。从25度开始记录测试点的电压值与温度计对比较。记完一个数后,往杯中加热水,这样,每测一次,记录一次数据,再加一次热水,这样使水温渐渐升高,一直测到水温为45摄氏度。测试结果如表6.1所示,说明数码管显示的数值是否与测试点所测值在误差允许围是成归一化关系的。6.2 软件测试6.2.1 模块测试数码管显示测试:通过程序控制数码管显示不同的数字,观察是不否显示正常,显示是否清晰,经测试可以在数码管上显示任意数字。按键测试:按键分长按和短按两种,直接将按键值显示在数码管上,并且不会因抖动而发生误判。蜂鸣器发声测试:经测试,可以通过程序控制蜂鸣器发出不同的声音,并可能过按键更改发出的声音类型。系统算法测试:通过给热敏电阻加不同的温度,用温度计测量出来的温度与数码管上显示的值对比,发现两者之间的差值非常小。说明算法部分设计成功。6.2.2 整体软件测试1、 通过按键可以进入门限值设置状态,此时数码管闪烁作为提示,并可以通过按键设置和保存。2、 在测温过程中数码管上实时显示当前的温度,测温完成后显示测温过程中的最高温度值,并且显示非常清晰。3、 当温度达到设定的门限值后,会发出报警声;当温度不再上升的时间超过5秒后,蜂鸣器发出提示音。4、 测温完毕后可以通过按键选择是继续测温还是进入休眠关机状态,且关机后各模块停止工作,此时的电流相当小。6.3 测试结果分析根据上述测试结果,此系统的设计基本取得成功。智能体温计在测试温度方面有一定的成效,测试误差较小,显示的误差与实际的温度值误差在,在功能上达到了设计的要求。测试结果实物对比如图6.1所示。图6.1 测试结果实物对比表6.1 温度实际值与测试值对比温度值()数码管显示值测试点电压值(V)25.024.92.6730.030.02.0532.432.51.7335.034.91.3937.037.01.1240.040.10.7142.042.10.4345.044.50.08第七章 结论通过本次设计,自己亲自动手设计,包括硬件和软件等方面,在设计过程中遇到了许多问题,在解决这些问题的过程中,使我学到许多东西,深深感到理论与实践之间的差距。所以,在今后要通过不断的通过强化自身的实践动手能力的培养,才能用理论来指导实践,通过实践来进一步深入理解理论。本次设计的电子体温计经过多次测试,工作稳定可靠、灵敏度高、响应时间短、抗干扰能力强等特点。此外该系统所用器件均为常规元件,有很高的工程价值。如稍加改动,该系统可以很方便地扩展为智能的测温设备,以实现利用与PC机进行数据通信,能够把测到的温度值保存到PC机中,方便远程记录。本系统可以代替医生常用的水银体温计,也可以用作2545围的温度计, 有很高的实用价值,具有广阔的发展前景。参 考 文 献1 苗振魁.体温计的发展与现状J.国际生物医学工程杂志,1989年03期2 霍孟友.单片机原理与应用M.机械工业,20043 路林吉,饶家明.数据采集技术概论J.中国学术期刊,20004 付大伟.便携式体温监测仪D.中国优秀博硕士学位论文全文数据库,20075 来清民.传感器与单片机接口与实例第1版M.航空航天大学,20086 黄继昌.传感器工作原理与应用实例M.人民邮电,19987 康华光.电子技术基础模拟部分第5版M.高等教育,2006:28-368 高纯一,周勇.高等数学(下)M.复旦大学,2008:2439 马潮.ATmega8原理与应用手册M.:清华大学,200310 马潮.AVR单片机嵌入式系统原理与应用实践M.航空航天大学,200711 朱飞,平.AVR单片机C语言开发入门与典型实例M.人民邮电,2009致 谢本课题在选题与研究过程中得到强老师的悉心指导,在设计过程中遇到了许许多多的难题,得到了指导老师和周围同学的帮助,在他们的帮助下我顺利完成了毕业设计,我的四年大学生涯也即将圈上一个句号。在此,特别感谢我的指导导师老师,几个月来他对我的毕业设计悉心指导,严格要求、热情鼓励,为我的论文的顺利完成指出了很好的方向。在此我谨向我的导师以与在毕业设计过程中给予我很大帮助的老师、同学们致以最诚挚的谢意!最后感谢07级电子一班的所有同学和物理学院的所有老师和同学们,在这四年里,他们教会了我许多专业知识,给了我很多帮助与支持,因为有了他们,我的大学生活才过得如此充实,谢谢他们!附件A:整机硬件电路图附件B:硬件实物图附件C:程序清单#include <ioavr.h>#define uchar unsigned char#define uint unsigned int#define fmq_on PORTD |= (1<<5) /打开蜂鸣器#define fmq_off PORTD &= (1<<5) /关闭蜂鸣器#define ana_pow_on PORTD |= (1<<4) /打开模拟部分电源#define ana_pow_off PORTD &= (1<<4) /关闭模拟部分电源#define on 1#define off 0volatile uint value=0; /数码管显示值uint alarm_temp=380; /报警门限温度值uint key_time; /检测按键时间长短,用于判断长按还是短按uint value_old; /记录前几次的测温结果uchar boot_flag=off, set_temp_flag=off; /开机和设置门限温度的标志位uchar alarm_type=0; /蜂鸣器提示音类型,测温完毕后改变值uchar smgdata=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; uchar sleep_flag=0,0,0; /重新测温标志位,用于清0函数中的静态变量/*函数声明*/void delay(uchar x);void init_io(void);void init_tc0(void);void init_adc(void);void sleep(void);void boot(void);void scan_smg(uchar num);uchar scankey(void);void alarm(void);void display(void);/*短暂的延时函数,用于按键扫描去抖*/void delay(uchar x) uchar y,z; for(y=0;y<x;y+) for(z=0;z<110;z+); /*端口初始化函数*/void init_io(void) DDRC = 0x0f;/配置端口C低4位(数码管位码)为输出,高4位(空)为输入 DDRB =0xff;/配置端口D(数码管段码)全为输出, DDRD = 0x30;/配置端口B的2、3位(按键)为输入,4(模拟部分电源使能)、5(蜂鸣器)位为输出 PORTD =0x0c;/使能按键位的上拉电阻 PORTC = 0xf0;/端口C低4位输出低电平,高4为使能上拉电阻,降低功耗 PORTB = 0xff;/数码管段码全写高 /*定时器0初始化函数*/void init_tc0(void) TCNT0 = 0;/初始装载值为0 TIMSK |= 0x01;/使能TC0溢出中断 TIFR |= 0x01;/开启TC0中断 TCCR0 |= 0x03;/开启定时器0,工作在64分频/*ADC初始化函数*/void init_adc(void) ADMUX=0xc6; /ADC参考电压为部2.56V基准电压,输入通道选择为ADC6 ADCSR=0x9f; /使能ADC,ADC为单次转换模式,开启ADC中断,ADC预分频为128void main(void) uchar key_num; ACSR |= 0x80;/关闭模拟比较器,上电复位后默认是打开的,但本设计中用不到 SREG |= 0x80; /开启总中断 init_io(); /硬件初始化 sleep(); /进入休眠 while(1) if(boot_flag) /开机后要进入开机初始,开机后不再进入 boot(); else key_num = scankey(); /工作过程中循环检测按键 if(alarm_type && (key_num = 1) /短按一键,测温完毕后再次启动测温 sleep_flag0=sleep_flag1=sleep_flag2=0; ADCSR |= 0x80; alarm_type = 0; if(key_num = 6) /长按二键,关机 sleep(); /*休眠处理函数*/void sleep(void) ADCSR &= 0x7f; /关闭ADC TCCR0=0x00; /关闭定时器0; PORTB = 0xff; /数码管段码全写高,降低功耗 GICR=0x40; /使能外部中断0; ana_pow_off; /关闭模拟部分电路电源 alarm_type = 0; /关闭蜂鸣器提示 sleep_flag0=sleep_flag1=sleep_flag2=0; /重新测温标志位清0 MCUCR=0xa0; /使能休眠,模式选择掉电模式 asm("sleep"); /进入休眠模式/*开机自检函数,检测硬件是否正常*