基于单片机数字温度计设计(虚拟仪器)_第1页
基于单片机数字温度计设计(虚拟仪器)_第2页
基于单片机数字温度计设计(虚拟仪器)_第3页
基于单片机数字温度计设计(虚拟仪器)_第4页
基于单片机数字温度计设计(虚拟仪器)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机数字温度计设计学生姓名:王洋学生学号:2014070929所在学院:信息技术学院 专业班级:电子(2)班 中国大庆 年 月目录一、 功能说明1二、 系统总体设计2三、 硬件设计5四、 软件设计8附录:9一、功能说明1.1 功能说明 利用51单片机设计一数字温度计,要求合适的传感器及相应的AD转换芯片,通过传感器来采集室内温度,并由LED进行显示。具体功能如下所示:(1) 设计单片机工作电源模块及其复位电路; (2) 设计显示模块:两个LED显示当前温度值;(3) 设计传感器模块,将选择的传感器与A/D转换芯片相连,并通过单片机采集其数据;(4) 绘制控制软件流程图;(5) 编写相应的控制程序,利用Protcus进行仿真。 1.2 传感器原理1、根据设计要求,选择AT89C52单片机为核心器件。AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。与AT89C51不同之处是,P1.0和P1.1还可以分别作为定时/计数器2的外部技术输入和输出。 2、温度检测器件采用DS18B20数字式温度传感器。与单片机的接口为P3.6引脚。DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图1中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。 图1 DS18B20的测温原理图3、键盘采用独立式按键,由三个按键组成,分别是:设置键(SET),加一建(+1),确认键(RET)。SET键(上下限温度设置键):当该键按下时,进入上下限温度设置功能。通过P3.1引脚接入。+1键(加一调整键):在输入上下限温度时,该键按下一次,被调整位加一。通过P3.2引脚接入。RET键(确认键):当该键按下时,指向下一个要调整的位。通过P3.3引脚接入。4.声音报警蜂鸣器通过P1.7引脚接入。 二、系统总体设计 系统总体设计框图如图2所示,在仿真软件Protcus上完成。其中LED数码管以动态扫描法实现温度显示,由四个PNP型晶体管Q2、Q3、Q4、Q5和八个电阻组成,基级与单片机的P1.0、P1.1、P1.2连接。DS18B20的数据I/O端与单片机P3.6引脚连接。外部晶振为12MHz。蜂鸣器通过Q1放大后与引脚P1.7相连。图中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。图中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。 图2 系统总体设计图3、 硬件设计系统硬件设计总体框图如图3所图3 硬件总设计图3.1 主控制器单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。很适合便携手持式产品的设计使用。 AT89S52在仿真软件中的图像为图4所示。3.2 显示电路显示电路采用四位共阳极LED数码管,从P3口RXD,TXD串口输出段码。LED数码管在仿真软件中如图5所示。图4 AT89C52在仿真软件中图像图5 LED数码管在仿真软件中图像3.3 温度传感器DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DQ为数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。其电路图如图6所示。图中DS1820中1为VD口,2为DQ口,3为OND口。 在仿真软件中如图7所示。 图6 外部封装形式图7 DS18B20在仿真软件中图像另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读写时序很重要,系统对DS18B20(发复位脉冲)发ROM功能命令发存储操作命令处理数据。在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.25)+(CD-Cs)CD 表1 部分温度值对应的二进制温度数据温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 0010 0008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H 四、软件设计数字式温度计的应用程序主要包括主程序,温度检测程序,温度转换程序,LED显示程序等。系统的主程序主要用来初始化一些系统参数,对DS18B20的配置数据进行一系列的设定。温度检测程序是对DS18B20的状态不断地查询,读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,读取当前的温度值后,进行温度转化程序,对温度符号处理和温度值的BCD码处理,进行温度值正负的判定,将其段码送至显示缓冲区,以备定时扫描服务程序处理。LED显示程序主要对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时,将符号显示位移入下一位。程序图如图8所示,总程序代码见附录。图8 软件流程图附录:#include#includeDS18B20.h#defineuintunsignedint#defineucharunsignedchar/宏定义#defineSETP3_1/定义调整键#defineDECP3_2/定义减少键#defineADDP3_3/定义增加键#defineBEEPP3_7/定义蜂鸣器bitshanshuo_st;/闪烁间隔标志bitbeep_st;/蜂鸣器间隔标志sbitDIAN=P27;/小数点ucharx=0;/计数器 Signed char m; /温度值全局变量Uchar n; /温度值全局变量ucharset_st=0;/状态标志signedcharshangxian=38;/上限报警温度,默认值为38signedcharxiaxian=15;/下限报警温度,默认值为5ucharcodeLEDData=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*延时子程序*/voidDelay(uintnum)while(-num);/*初始化定时器0*/voidInitTimer(void)TMOD=0x1;TH0=0x4c;TL0=0x00;/50ms(晶振12M) /*定时器0中断服务程序*/voidtimer0(void)interrupt1TH0=0x4c;TL0=0x00;x+;/*外部中断0服务程序*/voidint0(void)interrupt0EX0=0;/关外部中断0if(DEC=0&set_st=1)shangxian-;if(shangxianxiaxian)shangxian=xiaxian;elseif(DEC=0&set_st=2)xiaxian-;if(xiaxian99)shangxian=99;elseif(ADD=0&set_st=2)xiaxian+;if(xiaxianshangxian)xiaxian=shangxian; /*读取温度*/voidcheck_wendu(void)uinta,b,c;c=ReadTemperature()-5;/获取温度值并减去DS18B20的温漂误差a=c/100;/计算得到十位数字b=c/10-a*10;/计算得到个位数字m=c/10;/计算得到整数位n=c-a*100-b*10;/计算得到小数位if(m99)m=99;n=9;/设置温度显示上限/*显示开机初始化等待画面*/Disp_init() P2=0xbf;P1=0xfe; Delay(200);P2=0xbf;P1=0xfd;Delay(200);P2=0xbf;P1=0xfb;Delay(200);P2=0xbf;P1=0xf7;/第四Delay(200);P1=0xff;/关闭显示/*显示温度子程序*/Disp_Temperature()/显示温度P2=0xc6;/显示P1=0xf7;/Delay(300);P2=LEDDatan;/显示个位P1=0xfb;/Delay(300);P2=LEDDatam%10;/显示小数点DIAN=0;P1=0xfd;Delay(300); P2=LEDDatam%10;/显示小数DIAN=0;P1=0xfd;Delay(300);P2=LEDDatam/10;/显示百位P1=0xfe;Delay(300);P1=0xff;/关闭显示/*显示报警温度子程序*/Disp_alarm(ucharbaojing)P2=0xc6;/显示CP1=0xf7;Delay(200);P2=LEDDatabaojing%10;/显示十位P1=0xfb;Delay(200);P2=LEDDatabaojing/10;/显示百位P1=0xfd;Delay(200);if(set_st=1)P2=0x89;elseif(set_st=2)P2=0xc7;/上限H、下限L标示 P1=0xfe;Delay(200);P1=0xff;/*报警子程序*/voidAlarm()if(x=10)beep_st=beep_st;x=0;if(m=shangxian&beep_st=1)|(mxiaxian&beep_st=1)BEEP=0;elseBEEP=1;/*主函数*/voidmain(void)uintz;InitTimer();/初始化定时器EA=1;/全局中断开关TR0=1;ET0=1;/开启定时器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z2)set_st=0;if(set_st=0)EX0=0;/关闭外部中断0EX1=0;/关闭外部中断1check_wendu();Disp_Temperature();Alarm();/报警检测elseif(set_st=1)BEEP=1;/关闭蜂鸣器EX0=1;/开启外部中断0EX1=1;/开启外部中断1if(x=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st)Disp_alarm(shangxian); elseif(set_st=2)BEEP=1;/关闭蜂鸣器EX0=1;/开启外部中断0EX1=1;/开启外部中断1if(x=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st)Disp_alarm(xiaxian);/*END*/DS18B20.h:#include#defineDQP3_6/定义DS18B20总线I/O/*延时子程序*/voidDelay_DS18B20(intnum)while(num-); /*读取温度*/intReadTemperature(void)unsignedchara=0;unsi

温馨提示

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

评论

0/150

提交评论