智能体温计设计报告_第1页
智能体温计设计报告_第2页
智能体温计设计报告_第3页
智能体温计设计报告_第4页
智能体温计设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

用单片机制作智能体温计班级:机制08-4姓名:黄金凯 学号:23号目录摘要…………… 1关键词………… 1一:引言……… 1二:智能体温计的根本组成框图…………… 1三:主要模块的方案器件选择……………… 21,电源器件的选择………………… 22,温度传感器的选择……………… 23,放大器的选择…………………… 24,ad转换器的选择………………… 25,显示温度器件…………………… 26,语音报值模块…………………… 3四:主要模块的方案具体实现……………… 31,电源模块的设计………………… 32,前端温度采集局部……………… 33,前端温度电压信号放大局部…… 44,ad采样局部的实现……………… 55,超温报警电路…………………… 66,液晶显示局部…………………… 87,语音报值电路…………………… 108,系统程序的设计………………… 12五:系统调试………………… 13六:设计总结………………… 14七:参考文献………………… 15附录1:整机电路图附录2:完整的程序附录3:元器件清单附录4:制作实物图智能体温计设计[摘要]本报告主要表达了应用单片机AT89S52实现的智能体温计主要的功能、硬件的组成和软件的设计。该系统的功能是通过ad590温度传感器对温度进行采集,然后通过A/D转换器ADC0832进行模数转换,传给单片机进行处理,用12864大屏幕液晶实时显示温度。并且可以自由设置报警温度,在当前温度超过报警温度时,蜂鸣器发出滴滴声报警,语音局部采用isd4004语音芯片进行每分钟报出当前温度一次。整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足了各种需要测温场合的需要。[关键词]单片机温度传感器模数转换实时显示报警语音报值一:引言系统采用两节1.5V电池供电,由于单片机及运放使用电源大于3v,所以首先得进行升压以便驱动芯片。采用ad590温度传感器保证了精度和线性化,通过仪用放大电路将温度电压信号放大以便AD采样。AD输入接5V稳压二极管保证了输入电压不大于5V。单片机每秒采样一次电压即每秒钟更新一次温度。通过编程设置报警温度,当温度大于设定温度时报警,而且可以使用外中断对报警温度进行修改。通过编程可以使得语音芯片每分钟语音报出当前温度。二:智能体温计的根本组成框图温度传感器A/D转换信号放大温度传感器A/D转换信号放大报警电报警电源AT89S52单片机液晶实时显示温度AT89S52单片机液晶实时显示温度语音报值语音报值图1图1是智能体温计的根本组成框图。主要有温度传感器,信号放大电路,模数转换器,单片机,液晶显示局部,语音报数局部组成,和电源局部组成。三:主要模块的方案器件选择1:电源器件的选择电源是整个电路中主要的部件,由于运放使用12V电压,单片机等使用5V电压,所以使用了升压模块。参考max网站datasheet确定两个方案:方案一:使用max608芯片,max608输入电压范围为1.8-16.5V,所具有的脉频调制控制模式能够提供非常高的效率,输出电压可以固定5V或可调至12V。另外此芯片5V电压输出电流可达0.5A,从而保证了各器件的正常供电。方案二:使用max631系列芯片,工作原理原理类似,优点是外围电路简单只需一个电容和一个电感即可供电,但是有个致命的缺点就是输出电流太小,最大仅40ma。故不采用此方案。2:温度传感器的选择温度传感器是控制整个系统精度最主要器件,选择适宜的器件不仅有利于提高温度采集精度,更有利于提高系统的稳定性。 方案一:采用热敏电阻。热敏电阻价格廉价,对温度灵敏,原理简单,但线性度不好,如不进行线性补偿,那么对于本设计归一化输出的要求,难于到达设计精度;如要对非线性进行补偿,那么电路结构复杂,难于调整。故不采用。 方案二:采用集成温度传感器。集成温度传感器ad590具有线性好、精度高、灵敏度高、体积小、使用方便等优点。它是美国模拟器件公司生产的单片集成两端感温电流源。AD590的测温范围为-55℃~+150℃,能满足本设计的0~50度测量要求。根据官方datasheet:流过器件电流的微安数等于器件所处环境温度的热力学温度〔开尔文〕度数。AD590线性电流输出为13:放大器的选择选用lm358运放,lm358具有体积小,精度高的特点4:ad转换器的选择方案一:选用adc0809。ADC0809是典型的8位8通道逐次逼近式A/D转换器,采用cmos工艺制造,为28引脚封装的并行芯片,由于体温计体简单的功能用不上8通道,体温计体积一般不是很大,故并行芯片不利于设计优化,而且adc0809与单片机接口复杂,占用IO口比拟多,故不采用此方案。 方案二:选用adc0832。ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。它体积小,输入输出电平与ttl/cmos相兼容,5V电平供电时,输入电平在0-5V之间。而且转换时间仅25us,采用串行的结构更有利于缩小设备的体积和留出更多的IO口以供扩展更多功能。而且速度方面也不慢。5:显示温度器件 方案一:采用数码管显示,如果采用数码管动态扫描显示的话,太占用单片机的资源,因为如果单片不对数码管扫描的话,那么数码管将灭掉。还有如果采用静态显示的话那么得增加器件,太复杂化。还有更重要的是数码管很耗电。综上所述,不采用此方案。 方案二:采用12864液晶显示,此种显示方式不耗电,而且屏幕大可以显示更多的内容,而且不占用cpu资源,如果想跟新显示内容那么只需发送相应的指令即可。操作简单速度快,故采用此方案。6:语音报值模块 方案一:通过A/D转换器、单片机,存储器,D\A转换器实现声音信号的采样、处理、存储和实现。首先将声音信号放大,通过AD转换器采样将语音模拟信号转换成数字信号,并由单片机和处理存放到存储器中,实现录音操作。在录、放音过程中由单片机控制D/A转换器,将存储器中的数据转化成声音信号。此方案安装调试复杂,集成度低。方案二:采用ISD4004-08mp语音录放集成电路。这是一种永久记忆型语音录放电路,录音时间最大为8分钟,可重复录放10万次。该芯片采用多电平直接模拟量存储专利技术,每个采样值可直接存储在片内单个EEPROM单元中,因此能够非常真实、自然地再现语音、音乐、音调和效果声。此外,ISD4004还省去了A/D和D/A转换器。其集成度较高,内部包括前置放大器、内部时钟、定时器、采样时钟、滤波器、自动增益控制、逻辑控制、模拟收发器、解码器等。ISD4004内部EEPROM存储单元均匀分为2400段,每段时间长度为200ms,可以自由组合段数目。因此,选择方案二。四:主要模块的方案具体实现1:电源模块的设计参考书籍最终确定模块及外围电路设计如下:图2电源模块 图2所示是两个由电池供电的升压模块,一路12V用于运放供电,5V用于单片机等芯片的供电。2:前端温度采集局部Ad590产生的电流与绝对温度成正比,它可接收的工作电压为4V-30V,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1+5VI=273.2+T(I单位uA,T为摄氏温度)+5VAD590输入电路图3所示: 摄氏温度℃AD590电流uA经10kΩ电压V0273.22.73210283.22.83220293.22.93230303.23.03240313.23.13250323.23.232 图3ad590传感器3:前端温度电压信号放大局部图4前端信号放大电路 由AD590温度与电流关系可知,当温度为0℃时,流过10k电阻输出电压为2.732V,当温度为50℃时,电压为3.232V,温差为0.5V。为了实现系统前端局部归一化输出,即0~+50℃线性对应0~5V;必须得采用放大器。将0.5V图4是一个改良型的仪用放大器电路,由图可知,他是由两个运放按同相输入接发组成第一级差分放大电路,后面的运放组成第二级差分放大电路,在第一级放大电路中v1,v2分别加到运放的同相端,r1和两个r2组成的反应网络,引入了负反应,由虚短和虚断知Vr1=v1-v2Vr1/R1=〔v3-v4〕/〔2R2+R1〕解得: v3-v4=(1+2R2/R1)(v1-v2)输出与输入的关系为:Vo=-R4/R3(1+2R2/R1)(v1-v2)放大倍数: Av=-R4/R3(1+2R2/R1)所以选择适宜的阻值就可以得到适宜的放大倍数,图中R1是200Ω的可调电阻,用于微调放大倍数,R2为200Ω,R3为20kΩ,R4为100kΩ。当r1调至约100Ω时,就可以得到10倍的放大倍数。R1还有补偿电压差不是0.5v的作用。(注:运放使用12V电压供电) 可变电阻r0是调零电阻,当温度为0时,调节r0的阻值测量输出电压为0v后固定r0的值不在改变。当温度为50℃4:ad采样局部的实现图5是adc0832与单片机的接口电路图,vi接前级放大电路vo局部。片选cs接P1.0口,时钟接P1.1口,adc0832的数据输出线DO和数据输入线DI不是一起工作的,是分时复用的,因而可以接在一起,用单片机的一个IO口P1.2来控制。Gnd接地线,vcc接电源再编写相应程序即可工作。图5ADC0832与单片机接口ADC0832的软件实现下列图6是adc0832的时序图,图7是程序的流程图。由时序图和流程图编写程序如下:图6ADC0832时序图程序如下:开始ADC0832: SETBAD_CS ;片选无效,一个转换周期开始开始 CLRAD_CLK ;为第一个脉冲作准备 CLRAD_CS ;选中adc0832芯片 SETBAD_DI ;起始约定高电平使能芯片 SETBAD_CLK ;使能芯片 CLRAD_CLK ;形成一个脉冲,将一发送到adc0832 SETBAD_DI ;高电平1,状态字10选择单通道0 SETBAD_CLK ;产生三个脉冲送起始信号和状态字 CLRAD_CLK ;产生三个脉冲送起始信号和状态字 CLRAD_DI ; SETBAD_CLK ; CLRAD_CLK ; SETBAD_DI ;第三个脉冲下沉之后,置1两次读取温度 SETBAD_CLK ;两次读取温度 MOVR7,#8 ;读取转换后的数据,读入到A AD1: SETBAD_CLK ;不相等 CLRAD_CLK ;不相等 MOVC,AD_DO ;比拟两次读取的温度 RLCA ;比拟两次读取的温度 DJNZR7,AD1 MOVB,A MOVR7,#8 ;再次读取温度 AD2: MOVC,AD_DO RRCA相等 SETBAD_CLK相等 CLRAD_CLK DJNZR7,AD2释放芯片,保存数据并退出 CJNEA,B,ADC0832 ;比拟两次读取的温度释放芯片,保存数据并退出 SETBAD_CS MOVADTEMP,A RET 图7adc流程图5:超温报警电路图8是一个温度超过预设温度的报警电路,由图知当温度超过报警温度时给P3.6口一个频率约为1000hz的方波即可驱动蜂鸣器发出滴滴声。编程时注意退出蜂鸣时一定要置P3.6口为高电平,否那么8550一直导通会烧坏蜂鸣器。电阻R1是为了防止烧坏发射结而增加。图8蜂鸣器与单片机接口蜂鸣器软件实现起来比拟简单。只要在每次温度取样后与设定温度比拟,如果大与或等于设定温度,那么报警一下。如果小于设定温度,那么跳过不执行报警。局部主要程序如下:INT_T0: PUSHACC ;保护现场T0中断:50ms时间到 PUSHPSWT0中断:50ms时间到 CLRTR0 ;关闭定时器 INCCOUNT ;计数加一,满20次即1s跟新一次温度 MOVA,COUNT CJNEA,#20,INTOUT MOVCOUNT,#0Count计数加1CCount计数加1Count到20了吗? MOVA,ADTEMP ;保存温度值否LCALLTIAOZHEN否是ISDOUT: LCALLBEEP ;调用蜂鸣器子程序是INTOUT: MOVTH0,#3CH ;设置定时器初值执行温度转化执行数据处理执行温度转化执行数据处理 SETBTR0 ;开启定时器 POPPSW POPACC RETIBEEP: MOVA,31H调用蜂鸣器函数并与设定温度比拟调用蜂鸣器函数并与设定温度比拟 MOVA,32H CJNEA,42H,BEEP1 MOVA,33H CJNEA,43H,BEEP1大于设定温度吗?BEEP1: JNCSTARTBE大于设定温度吗? LJMPBEOUT否STARTBE:MOVR7,#2否 BE2: MOVR6,#255是 BE1: CPLP3.6是 MOVR5,#200 DJNZR5,$蜂鸣器报警蜂鸣器报警 MOVR5,#200 DJNZR5,$ DJNZR6,BE1定时器设初值并开启退出定时器设初值并开启退出BEOUT: SETBP3.6 RET图9蜂鸣器流程图注:温度采集后,被放在adtemp中,之后又被调整为三个数即图9蜂鸣器流程图十位,个位和十分位,分别存储在31h〔十位〕,32h〔个位〕,33h(十分位)。设定温度也分为三个数存储,这样比拟时一一比拟即可知道当前温度有没有超出设定温度。6:液晶显示局部 本体温计的温度显示局部采用st7920控制器的lcd12864液晶显示。其好处是可以显示更多的内容,也可以显示温度曲线。查看st7920的控制器手册,其与单片机的接口电路如图7所示,b/ljp是控制液晶背光跳线。图10液晶与单片机接口各引脚主要作用如下表:引脚号标示说明接单片机引脚PIN1GND接地PIN2VCC接vcc电源PIN3VO比照度调节PIN4RS指令或数据选择〔高电平数据存放器,低电平指令存放器P2.0PIN5R/W读或写数据〔高电平读,低电平写〕P2.1PIN6SCLK允许信号P2.2PIN7-14D0-D78位数据线PIN15PSB高电平为并行模式PIN19LED+背光正极(本电路通过跳线接vcc控制背光)PIN20LED-背光负极12864液晶采用st7920控制器,可以显示8字4行汉字,或者显示4行16字半宽字符如数字和ASCII吗等。它可以并行操作也可以串行操作,本设计中采用8位并行的方式来对液晶进行控制显示。要想对液晶显示汉字首先得对液晶写入初始化程序,即写入一组指令集即可,当然这涉及到12864底层驱动的编写,如发送状态字程序,发送数据程序,检测液晶忙程序,还有连续发送多个汉字的程序,限于篇幅这里不在详细说明,直接给出程序。 液晶在整个系统中负责显示开机欢送词,显示当前温度和报警温度的功能。由于系统运行中有些是固定的显示,如开机欢送词和一些提示文字在整个运行中一次显示后面无需再次改变,所以可以在初始化中把这些信息全部显示出来。以后就不用再次修改。而实时温度的显示只需当温度变化后再发送指令更新液晶中的数据即可。本程序涉及的主要指令集如下所示:指令码功能D7D6D5D4D3D2D1D0去除显示00000001将ddram填满20h〔空格〕,并且设定ddram的地址计数器〔ac〕到00h进入点设定000001I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位显示状态开关00001DCBD=1:整体显示onC=1:游标onB=1:游标位置反白允许功能设定001DL0RE00DL=0/1:4/8位数据RE=0:根本指令集操作设定ddram地址10Ac5Ac4Ac3Ac2Ac1Ac0设置显示位置第一行:80h-87h。第二行:90h-97h第三行:88h-8fh。第四行:98h-9fh读取忙标志BFAc6Ac5AC4AC3AC2AC1AC0读忙标志〔bf〕判断液晶内部工作是否完成 再指定的位置显示汉字流程如下:发送显示位置的ddram地址发送高字节发送低字节。开机初始化显示流程图如图12所示程序如下:LCDINIT: MOVA,#30H ;液晶初始化程序 LCALLLCDSEND_I ;8位数据并行,根本指令操作集 MOVA,#0CH开始 LCALLLCDSEND_I ;整体显示开,游标关,禁止游标位置反白开始 MOVA,#06H LCALLLCDSEND_I MOVA,#01H LCALLLCDSEND_I ;清楚显示,游标归位发送相关初始化指令发送相关初始化指令 MOVA,#92H ;显示开机欢送词 LCALLLCDSEND_I MOVZISHU,#8 MOVDPTR,#TAB3 LCALLSENDZIJIE ;显示“欢送使用”开机显示两行欢送词 MOVA,#88H开机显示两行欢送词 LCALLLCDSEND_I MOVZISHU,#16 MOVDPTR,#TAB4 LCALLSENDZIJIE ;显示“智能型电子温度计”欢送词延时显示 MOVR7,#20 ;开机画面的显示延时欢送词延时显示 DE1: MOVR6,#200 DE2: MOVR5,#200 DJNZR5,$ DJNZR6,DE2 DJNZR7,DE1显示电子温度计等内容 MOVA,#01H显示电子温度计等内容 LCALLLCDSEND_I ;清屏游标归位 MOVA,#81H LCALLLCDSEND_I MOVZISHU,#10 MOVDPTR,#TAB6返回 LCALLSENDZIJIE ;在第一行显示“电子温度计”返回 MOVA,#90H LCALLLCDSEND_I图11初始化流程 MOVZISHU,#10图11初始化流程 MOVDPTR,#TAB1 LCALLSENDZIJIE ;在第二行前五个空格显示“当前温度:” MOVA,#97H LCALLLCDSEND_I MOVZISHU,#2 MOVDPTR,#TAB2 LCALLSENDZIJIE ;在第二行最后一个空格显示“℃”图标 MOVA,#88H LCALLLCDSEND_I MOVZISHU,#10 MOVDPTR,#TAB5 LCALLSENDZIJIE ;在第三行前五个空格显示“报警温度:” MOVA,#8FH LCALLLCDSEND_I MOVZISHU,#2 MOVDPTR,#TAB2 LCALLSENDZIJIE ;显示“℃”图标 RETTAB1:DB'当前温度:'TAB2:DB'℃'TAB3:DB'欢送使用'TAB4:DB'智能型电子温度计'TAB5:DB'报警温度:'TAB6:DB'电子温度计' 如果在程序运行过程中,温度变化了那么得更新液晶的显示,以便显示正确的温度。主程序不断检测当前温度与上次温度是否一致,如果一致那么继续检测等待温度变化,如果变化那么跟新显示当前的温度即可。相关流程及局部程序如下:MAIN: MOVA,ADTEMP ;adtemp为当前温度CJNEA,ADCBJ,LO1 ;将当前温度与上次温度比拟 LJMPMAIN开始 LO1: MOVADCBJ,ADTEMP ;将当前温度替换上次温度,便于下次比拟开始 LCALLDESPLAY ;调用显示子程序 LJMPMAIN ;返回继续比拟相等DESPLAY: MOVA,#95H ;显示实时温度相等当前温度与上次温度相等吗 LCALLLCDSEND_I当前温度与上次温度相等吗 MOVA,34H LCALLLCDSEND_D MOVA,35H LCALLLCDSEND_D不相等 MOVA,#2EH不相等 LCALLLCDSEND_D MOVA,36H LCALLLCDSEND_D当前温度替换上次温度当前温度替换上次温度 MOVA,#8DH ;显示实时报警温度 LCALLLCDSEND_I MOVA,44H LCALLLCDSEND_D MOVA,45H更新lcd的显示 LCALLLCDSEND_D更新lcd的显示 MOVA,#2EH LCALLLCDSEND_D MOVA,46H LCALLLCDSEND_D RET 图12主函数这样只有温度变化时才去执行对液晶的操作,其他大局部时间都是在内部执行比拟的指令,这样大大减少了对液晶的操作,增加了液晶的寿命,实际中还发现能减少液晶字符闪烁的问题。7:语音报值电路 语音报值局部电路采用性能优越的isd4004串行芯片,最长可以8分钟录音播放,方便控制等有点。由于事先已录制好声音,所以本电路连接中就没有录音局部电路只有放音电路和单片机控制局部。 图13是一个实际的接法,片选cs接P1.4,mosi接P1.5,时钟sclk接P1.6中断引脚int接P1.7。图13isd4004与单片机接口Isd4004语音芯片具有模拟量电平直接存储技术,因而可以最大真实的复原声音。它可以采取分段存储技术,最大可以存储2400段。这对语音报值非常方便,只需把1234等语音分段存储,播放时按地址去查找并播放相应的声音即可实现语音报值的功能。Isd4004工作于spi总线,所有的串行数据开始于ss的下降沿,ss在数据传输时必须保持低电平,两条指令间必须是高电平。由于事先也录制好音频信息,录制的信息与分段地址如下:地址h0000000800100018002000280030信息0123456地址h003800400048005000580060信息78910点度由上表可知当我要播放一个数字时只需查表查出相应的位置并送入isd4004语音芯片即可控制其播放。发送指令应该严格按照isd4004的时序进行。isd的指令集是8为控制码或者是8为控制吗加上16位地址码。语音芯片播放时中断引脚是高电平,当遇到wom时停止播放并且中断引脚是低电平,利用这个特性可以在程序中判断当前段是否播放完毕。本程序涉及主要的指令集如下表:指令8位控制码〔16位地址码〕说明Powerup00100000上电指令,等待25ms可工作Setplay11100000从指定的地址开始放音Stoppwrdn00010000停止当前的操作并掉电 对isd语音芯片操作应该严格按照其datasheet中要求的顺序执行。其顺序见流程图,局部主要程序如下:开始选中芯片以播放语音“十”开始选中芯片BAOWENDU: LCALLPOWERUP ;发送上电指令 LCALLDELAY25MS ;延时25ms CLRCS ;选中芯片发送上电指令 MOVA,#50H ;发送地址码低位发送上电指令 LCALLISDSEND MOVA,#0 ;发送地址码高位延时25ms LCALLISDSEND延时25ms MOVA,#0E0H ;发送指令 LCALLISDSEND SETBCS 结束指令发送地址值及播放命令 JBINTT,$ ;等待播放完毕发送地址值及播放命令 LCALLSTOPP ;发送掉电指令 RET等待播放完毕发送掉电指令等待播放完毕发送掉电指令退出;语音存储012345678910点度退出〔注:这只是一个播放语音“十”的程序,实际的程序见附录,关于更多的子程序见总程序〕 图14语音播放流程8:系统程序的设计系统程序连接各个模块程序,一个系统如果子程序都写好了,主程序应当把各个子模块合理的衔接起来,这样系统工作稳定,有错误才好排除。 本设计的体温计设计的软件模块比拟多,主要思想是开机初始化话,各存放器赋初值,开启各中断,定时器。进入主循环函数等待中断,主循环发现存放器的值变化那么更新显示内容。更新完毕后,继续运行主函数等待中断。定时器T0中断主要负责每1s更新一次温度即AD转换一次,每60s语音报出当前温度一次。外中断0,1负责增加和减少设定报警温度。外中断设定高优先级以便能够得到响应迅速执行中断。设定报警温度减0.1℃外中断1设定报警温度减0.1外中断1中断返回外中断0设定报警温度加设定报警温度加0.1中断返回中断返回 图15外中断0流程 图16外中断1流程T0中断T0中断开始N初始化,各存放器赋初值N初始化,各存放器赋初值1s到了?1s到了?YY开启T0中断开启T0中断开启外中断0,1更新当前温度更新当前温度显示初始化显示初始化N60s到了?N60s到了?相等Y采集当前温度与上次温度比拟相等Y采集当前温度与上次温度比拟语音报值语音报值不相等不相等中断返回中断返回更新lcd显示更新lcd显示图17主函数 图18T0中断流程完整的程序及电路总图见附录。五:系统调试 测试主要包括硬件测试和软件测试两局部,硬件测试主要包括温度传感器的测试,前端温度放大器的测试,软件测试包括各模块间的调试。1:各模块的调试电源及各引线间的测试:仔细检查各引线是否连线正确,在确保正确的前提下仔细检查模块是否焊接牢固,是否有虚焊。通电测量各芯片的电压,测量主要引脚的电压。如果有故障那么应仔细检查排除。ad590的调试:将ad590置于0摄氏度的环境中测量输出电压并与标准电压相比拟。再将ad590置于50℃的环境中,测量方法同上。前端放大器的调试:①将R1阻值减小到适宜值以增大整个放大电路的增益,②将温度传感器置于0℃的环境中,调节调零电阻并测量输出电压,使得输出电压为0v,此时固定调零电阻即可。③将温度传感器置于50摄氏度的环境中,此时输出电压大于5v,调节R1并测量输出电压使得输出电压等于5v即可。如此调整好后整个电路0-50℃线性对应0-5V电压。A单片机的测试:检测单片机的各io口是否为高电平,用示波器检测ale引脚有脉冲输出,如有那么说明单片机工作正常。AD采样的测试:给定ad输入一个电压,编写最小程序检测是否能正确读取数值。蜂鸣器的测试:上电后p3.6口输出高电平,测量三极管Vce电压是否约为5v〔三极管截止〕。编写最小程序测试能不能发出蜂鸣报警声音。液晶模块的测试:检测液晶各引脚接口电压是否正常,检测背光是否能正常的关闭。调节比照度电位器测试能不能正常调节比照度。编写最小显示程序观察能不能正常显示。语音芯片的测试:测量电源电压是否为3v,测量声音输出引脚电压是否为1.2v。如果正确那么说明可以正常工作。编写最小程序给定地址试听有无声音输出。2:整体调试将程序写入at89s52单片机中,检查各局部功能是否运行正常,检查各按键是否工作正常。检查温度是否正常显示,检查温度大于报警温度是否报警,检查每分钟是否报出当前温度。如果有欠缺的地方应该仔细查找程序中有问题的地方并加以修改。将温度传感器置于不同温度的地方并测量输出电压和读取温度显示,观察是否一致或接近。六:设计总结 1,本设计主要完成了如下功能:①系统采用两节1.5V电池升压对各模块供电;②前端温度传感器温差0~0.5V经放大10左右对应0~5V,由于传感器是线性器件故放大后也是线性对应的;③系统前端局部加了一个5V稳压二极管所以具有输出保护电路,使其输出电压不超过5V;④温度采样使用定时器定时的方式这样保证了1s采集一次;⑤系统实现了0~50℃的范围内任意设预警温度值〔默认值设定为37.0℃〕,当所测温度超过预警温度值时,系统立即报警,预警值的设定通过外中断可随时更改。⑥系统利用T0中断实现了每分钟报出温度值一次。 本设计未完成的情况如下:①系统精度最大只到达0.2℃,题目要求到达0.1℃的精度,经计算得知应该才用9位以上ad来温度采样,由于汇编语言多字节除法算法的问题未能解决,深表遗憾。②在液晶上显示温度曲线未能完成,因为屏幕小,采用st7920控制器的屏幕汇编算法难的问题更加突出,时间有限,所以未能完成。③无线方面由于我们团队都毫无经验,对无线模块不了解,在这短暂的时期内没有更多的时间去学习, 2,对于未能完成的局部,表示遗憾,以后会在完成课内学习的前提下加强对单片机的学习,对编程的灵活使用。另外多看相关的图书资料,加强相关理论的学习和应用,多做一点实物多积累经验。针对本次设计未完成的局部我们会在课下继续努力,争取早日找到解决方案。 3,通过本次设计我们知道了自己哪方面的缺乏,感到理论与实际的差距,虽然理论上都清楚,但是实际操作涉及到了很多问题〔主要是汇编语言的算法〕,通过大家的不断努力和支持最终把这些困难都一一克服了。通过本次设计无论在理论和实践上都得到了很大的提高,对汇编语言更加熟悉了。提高了我们对单片机和外围接口电路的设计能力,使我们对电子设计更加感兴趣,更加明确了学习的方向。七:参考文献黄友锐主编,《单片机原理及应用》,2006年11月第一版;康华光主编,《电子技术根底》,2006年1月第五版;王水平主编,《DC/DC变换器集成电路及应用》,2006年1月第一版。附录一:整机电路图附录二:单片机全部程序AD_CS BIT P1.0 ;ADC0832片选AD_CLK BIT P1.1 ;ADC0832时钟引脚AD_DO BIT P1.2 ;ADC0832数据输出引脚和数据输入引脚复用AD_DI BIT P1.2 ;同上CS BIT P1.4 ;ISD4004语音芯片片选MOSI BIT P1.5 ;串行输入端SCLK BIT P1.6 ;串行时钟INTT BIT P1.7 ;中断引脚LCD_RS BIT P2.0 ;LCD_RW BIT P2.1 ;LCD_EN BIT P2.2 ;ADTEMP EQU 50H ;用于存放ad转换后的结果ZISHU EQU 51HBEEPTEMPEQU 52HCOUNT EQU 53H ;用于计数20次进行一次adc0832转化ISDCOUNTEQU 58HADCBJ EQU 54HWDBJG EQU 55HWDBJZ EQU 56HWDBJD EQU 57H ORG0000H LJMPSTART ORG0003H LJMPZENGJIA ORG000BH LJMPINT_T0 ORG0013H LJMPJIANSHAO ORG0030HSTART: MOVSP,#5FH MOV41H,#3 MOV42H,#7 MOV43H,#0 MOV53H,#0 MOVTMOD,#01H ;定时器0工作于方式1,16位计数方式。 MOVTH0,#3CH MOVTL0,#0B0H MOVCOUNT,#0 MOVISDCOUNT,#0 SETBEA ;开启总中断 SETBEX0 ;开启外中断0,用于报警温度增加0.1 SETBEX1 SETBIT0 ;下降沿触发 SETBIT1 SETBET0 ;开启定时器t0中断,用于1s更新ad温度一次 MOVIP,#05H LCALLLCDINIT SETBTR0MAIN: MOVA,ADTEMP CJNEA,ADCBJ,LO1 MOVA,#41H CJNEA,WDBJG,LO1 MOVA,#42H CJNEA,WDBJZ,LO1 MOVA,#43H CJNEA,WDBJD,LO1 LJMPMAIN LO1: MOVWDBJG,41H MOVWDBJZ,42H MOVWDBJD,43H MOVADCBJ,ADTEMP LCALLDESPLAY LJMPMAIN;*********************************************************;定时器t0中断程序用于1s跟新一次ad温度,60s报实时温度一次;*********************************************************INT_T0: PUSHACC PUSHPSW CLRTR0 INCCOUNT MOVA,COUNT CJNEA,#20,INTOUT MOVCOUNT,#0 LCALLADC0832 MOVA,ADTEMP LCALLTIAOZHEN INCISDCOUNT MOVA,ISDCOUNT CJNEA,#6,ISDOUT LCALLBAOWENDU MOVISDCOUNT,#0 ISDOUT: LCALLBEEP INTOUT: MOVTH0,#3CH MOVTL0,#0BH SETBTR0 POPPSW POPACC RETI;*******************************************************************;以下是对adc0832ad转换芯片的操作;*******************************************************************ADC0832: SETBAD_CS ;片选无效,一个转换周期开始 CLRAD_CLK ;为第一个脉冲作准备 CLRAD_CS ;选中adc0832芯片 SETBAD_DI ;起始约定高电平 SETBAD_CLK ; CLRAD_CLK ;形成一个脉冲,将一发送到adc0832 SETBAD_DI ;高电平1,状态字10选择单通道0 SETBAD_CLK ; CLRAD_CLK ; CLRAD_DI ; SETBAD_CLK ; CLRAD_CLK ; SETBAD_DI ;第三个脉冲下沉之后,输入端DIO失去作用,应置1 SETBAD_CLK ; MOVR7,#8 ;读取转换后的数据,读入到A AD1: SETBAD_CLK ; CLRAD_CLK ; MOVC,AD_DO ; RLCA ; DJNZR7,AD1 MOVB,A MOVR7,#8 AD2: MOVC,AD_DO RRCA SETBAD_CLK CLRAD_CLK DJNZR7,AD2 CJNEA,B,ADC0832 SETBAD_CS MOVADTEMP,A RETTIAOZHEN: MOVA,ADTEMP ;调整函数,将A除以51,分三个字节保存,出口31h〔高位〕,32h,33h。 MOVB,#51 DIVAB MOV31H,A MOVA,B MOVB,#10 MULAB MOVR7,B MOVR6,A MOVR5,#0 MOVR4,#51 LCALLDDIV MOV32H,R6 MOVA,R2 MOVB,#10 MULAB MOVR7,B MOVR6,A MOVR5,#0 MOVR4,#51 LCALLDDIV MOV33H,R6 MOVA,31H ;将16进制数转换为ASCII码其功能是将31h,32h,33h中的数加上30h送到34h,35h,36h ADDA,#30H MOV34H,A MOVA,32H ADDA,#30H MOV35H,A MOVA,33H ADDA,#30H MOV36H,A RETDDIV: MOVA,R4;双字节除法子函数R7R6/R5R4=R7R6……R3R2 ORLA,R5 JZERR DOWN0: MOVR2,#0 MOVR3,#0 MOVR1,#16 DOWN1: CLRC MOVA,R6 RLCA MOVR6,A MOVA,R7 RLCA MOVR7,A MOVA,R2 RLCA MOVR2,A MOVA,R3 RLCA MOVR3,A MOVA,R2 SUBBA,R4 MOVR0,A MOVA,R3 SUBBA,R5 JCDOWN2 INCR6 MOVR3,A MOVA,R0 MOVR2,A DOWN2: DJNZR1,DOWN1 CLRF0 LJMPDOWN3 ERR: SETBF0 DOWN3: RET;***********************************************************;以下是对12864液晶的操作;***********************************************************LCDINIT: MOVA,#30H ;液晶初始化程序 LCALLLCDSEND_I ;8位数据并行,根本指令操作集 MOVA,#0CH LCALLLCDSEND_I ;整体显示开,游标关,禁止游标位置反白 MOVA,#06H LCALLLCDSEND_I MOVA,#01H LCALLLCDSEND_I ;清楚显示,游标归位 MOVA,#92H ;显示开机欢送词 LCALLLCDSEND_I MOVZISHU,#8 MOVDPTR,#TAB3 LCALLSENDZIJIE ;显示“欢送使用” MOVA,#88H LCALLLCDSEND_I MOVZISHU,#16 MOVDPTR,#TAB4 LCALLSENDZIJIE ;显示“智能型电子温度计” LCALLADC0832 LCALLTIAOZHEN MOVR7,#18 ;开机画面的显示延时 DE1: MOVR6,#200 DE2: MOVR5,#200 DJNZR5,$ DJNZR6,DE2 DJNZR7,DE1 MOVA,#01H LCALLLCDSEND_I ;清屏游标归位 MOVA,#81H LCALLLCDSEND_I MOVZISHU,#10 MOVDPTR,#TAB6 LCALLSENDZIJIE ;在第一行显示“电子温度计” MOVA,#90H LCALLLCDSEND_I MOVZISHU,#10 MOVDPTR,#TAB1 LCALLSENDZIJIE ;在第二行前五个空格显示“当前温度:” MOVA,#97H LCALLLCDSEND_I MOVZISHU,#2 MOVDPTR,#TAB2 LCALLSENDZIJIE ;在第二行最后一个空格显示“℃”图标 MOVA,#88H LCALLLCDSEND_I MOVZISHU,#10 MOVDPTR,#TAB5 LCALLSENDZIJIE ;在第三行前五个空格显示“报警温度:” MOVA,#8FH LCALLLCDSEND_I MOVZISHU,#2 MOVDPTR,#TAB2 LCALLSENDZIJIE ;显示“℃”图标 RETDESPLAY: MOVA,#95H ;显示实时温度 LCALLLCDSEND_I MOVA,34H LCALLLCDSEND_D MOVA,35H LCALLLCDSEND_D MOVA,#2EH LCALLLCDSEND_D MOVA,36H LCALLLCDSEND_D MOVA,#8DH ;显示实时报警温度 LCALLLCDSEND_I MOVA,44H LCALLLCDSEND_D MOVA,45H LCALLLCDSEND_D MOVA,#2EH LCALLLCDSEND_D MOVA,46H LCALLLCDSEND_D RETCHK_BUSY: MOVP0,#0FFH //忙检测程序 CLRLCD_RS SETBLCD_RW SETBLCD_EN JBP0.7,$ CLRLCD_EN RETLCDSEND_I: LCALLCHK_BUSY //发送状态字入口地址A. CLRLCD_RS CLRLCD_RW MOVP0,A SETBLCD_EN NOP NOP CLRLCD_EN RETLCDSEND_D: LCALLCHK_BUSY //发送数据入口地址A SETBLCD_RS CLRLCD_RW MOVP0,A SETBLCD_EN NOP NOP CLRLCD_EN RETSENDZIJIE: MOVR7,ZISHU SE1: CLRA MOVCA,@A+DPTR LCALLLCDSEND_D INCDPTR DJNZR7,SE1 RETTAB1:DB'当前温度:'TAB2:DB'℃'TAB3:DB'欢送使用'TAB4:DB'智能型电子温度计'TAB5:DB'报警温度:'TAB6:DB'电子温度计';********************************************************;以下程序是蜂鸣器函数;当温度大于37时,蜂鸣器报警;********************************************************BEEP: MOVA,31H CJNEA,41H,BEEP1 MOVA,32H CJNEA,42H,BEEP1 MOVA,33H CJNEA,43H,BEEP1 BEEP1: JNCSTARTBE LJMPBEOUT STARTBE:MOVR7,#2 BE2: MOVR6,#255 BE1: CPLP3.6 MOVR5,#200 DJNZR5,$ MOVR5,#200 DJNZR5,$ DJNZR6,BE1 DJNZR7,BE2BEOUT: SETBP3.6 RETZENGJIA: PUSHACC ;调整报警温度子程序,外中断0,增加1 PUSHPSW INC43H MOVA,43H CJNEA,#10,ZJ1 MOV43H,#0H INC42H ZJ1: MOVA,42H CJNEA,#10,ZJ2 MOV42H,#0 INC41H ZJ2: MOVA,41H CJNEA,#05,ZJ3 MOV41H,#0H LCALLWENDUTZ ZJ3: POPPSW POPACC RETIJIANSHAO: PUSHACC ;调整报警温度子程序,外中断1,减少1 PUSHPSW DEC43H MOVA,43H CJNEA,#0FFH,JS1 MOV43H,#9 DEC42H JS1: MOVA,42H CJNEA,#0FF

温馨提示

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

评论

0/150

提交评论