您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 单片机原理及应用课程设计(温度测量)
第1页共15页河河南南理理工工大大学学《单片机应用与仿真训练》设计报告温度测量姓名:朱广军学号:1216306061专业班级:12级自动化2班指导老师:余开江所在学院:电气工程与自动化学院时间:2015年6月20日第2页共15页摘要本系统是一个基于单片机AT89S51的数字温度计的设计,用来测量环境温度,测量范围为-20℃—70℃度。整个设计系统分为4部分:单片机控制、温度传感器、数码显示以及键盘控制电路。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。采用1602液晶屏显示温度。以AT89C51作为核心控制温度传感器DS18B20进行实时温度检测并显示,其能够测量环境温度,根据此温度设定上下限报警温度。所以,我们在电路设置了三个按钮,其中两个按钮作于调控温度的值的大小,剩下的一个是设置按钮,利用它来切换到调控温度最高值与最低值的界面。第3页共15页目录1概述………………………………………………………………………………2系统总体方案及硬件设计2.1系统总体设计方案2.2系统分析与设计3软件设计4Proteus软件仿真5课程设计体会参考文献附1:源程序代码附2:系统原理图第4页共15页一、设计功能要求采用数字式温度传感器为检测器件,进行单点温度检测。用数码管直接显示温度值,微机系统作为数字温度计的控制系统。1.基本要求:(1)检测的温度范围:-20℃~70℃,检测分辨率0.5℃。(2)用1602液晶屏来显示温度值。(3)超过警戒值(自己定义)要报警提示。二、系统总体设计方案本系统是一个基于单片机AT89S51的数字温度计的设计,用来测量环境温度,测量范围为-20℃—70℃度。整个设计系统分为4部分:单片机控制、温度传感器、数码显示以及键盘控制电路。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。采用1602液晶屏显示温度。三、系统分析与设计1.基本工作原理以AT89C51作为核心控制温度传感器DS18B20进行实时温度检测并显示,其能够测量环境温度,根据此温度设定上下限报警温度。所以,我们在电路设置了三个按钮,其中两个按钮作于调控温度的值的大小,剩下的一个是设置按钮,利用它来切换到调控温度最高值与最低值的界面。当温度值达到上限或下限值甚至超多它,马上触发报警系统,二极管会闪烁,发声器发声。第5页共15页温度计工作原理图2.基本框图及各个部分的组成本电路的小系统主要由四部分组成,复位电路、脉冲电路、检温电路、显示电路。2.1复位电路:计算机在启动运行的时候都需要复位,使中央处理器CPU和系统中的其他部件都处于一个确定的初始状态,并且从这个初始状态开始工作。单片机的复位是靠外部电路实现的,51单片机有一个复位引脚RST,高电平有效。最常用的复位电路有两种一种是有极性电容和一个电阻串联,电容接电源端,电阻的一端接地,电容和电阻的公共端接复位端口;另外一种方法是一个按钮和极性电容并联,电容正极与按钮的公共端接复位电路,另外一个公共端接地。在焊接硬件的时候我们是采用了第一种方法接复位电路的。2.2脉冲电路:计算机的正常运行是需要脉冲才能正常工作,一个12MHZ的晶振和两个电容并接一起接到单片机XTAL1和XTAL2的端口,根据自己程序的需要我们可以选择产生脉冲的大小,产生脉冲的大小与晶振和电容有关。我们选择的是一个12MHZ的晶振和22pf的电容。2.3检温电路:DS18B20数字温度传感器DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚第6页共15页排列如下图1:DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。DS18B20的管脚图2.4测温工作:温度传感器DS18B20连接时I/O口上要接一个上拉5K左右的电阻,这样可以保证温传感器工作时候的精度,还有抗干扰的作用。温度传感器检测外界的温度,得到的数据,将进行数据的转换,转换完成的温度数字将会保留,然后在液晶上显示,同时也会与程序设计的温度的上限和下限进行比较,若超出设定的上限和下限的温度值,就报警。显示电路:第1脚:VSS接地第2脚:VDD接5V正电源。第3脚:为液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K欧姆的电位器来调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时,可以写入指令或者显示地址,当RS为低电平RW为高电平时,可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:屏幕背光引脚1602与单片机的I/O口电路连接如图5-5所示:第7页共15页VCC21310kR171122334455667788991010111112121313141415151616JDL162AVCCLCD_RSLCD_RWLCD_ELCD_D0LCD_D1LCD_D2LCD_D3LCD_D4LCD_D5LCD_D6LCD_D710KR1VCC3.完整温度测量设计图:4.程序流程图:第8页共15页开始初始化显示及DS18B20按键检测并对状态记数读取温度值并显示实时温度无键按下或状态为0有键按下状态为1或为2显示上限或下限温度值并开启外部中断检测温度值并判断是否高出上限或低于下限温度否中断?否上限加上限减报警是返回第9页共15页四、源码清单#includereg52.h#includeabsacc.hunsignedcharcodetab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40};sbitDQ=0xb7;sbitP07=0x87;sbitRED=0x97;sbitGREEN=0x96;sbitSET=0x90;sbitNEXT=0x91;sbitREDUCE=0x92;sbitADD=0x93;unsignedchartempL=0;unsignedchartempH=0;floattemperature;floattemperatureH=35,temperatureL=0;inttH=1,tL=1;//报警状态,1为关闭intm,k=1,l,keyon,keytype,out=0;voiddelay(unsignedinttime){unsignedintn;n=0;while(ntime)n++;return;}voiddisplay(floatk){if(k=0){P2=0xf7;P0=tab[(int)(k/100)];delay(250);P0=0x00;}else{k=-k;P2=0xf7;P0=0x40;delay(250);P0=0x00;}P2=0xfb;P0=tab[(int)(k/10)];delay(250);P0=0x00;P2=0xfd;P0=tab[((int)k)%10];P07=1;delay(250);P0=0x00;P2=0xfe;第10页共15页P0=tab[((int)(k*10))%10];delay(250);P0=0x00;}Init_DS18B20(void){unsignedcharx=0;DQ=1;delay(8);DQ=0;delay(85);DQ=1;delay(14);x=DQ;delay(20);}ReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i0;i--){DQ=1;delay(1);DQ=0;dat=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}WriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat=1;}delay(4);}ReadTemperature(void){charctempL,ctempH;Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0x44);delay(125);Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe);tempL=ReadOneChar();tempH=ReadOneChar();第11页共15页if(tempH0xf8)temperature=((tempH*256)+tempL)*0.0625;else{ctempL=tempL;ctempH=tempH;temperature=(((~ctempH)*256)+(~ctempL)+1)*0.0625;temperature=-temperature;}delay(200);return(temperature);}voidDisplay2(){if(m==0||m==1){P2=0xf7;P0=0x76;delay(70);P0=0x00;if(m==0&&k==-1)delay(70);else{if(tH==1){P2=0xfb;P0=0x71;delay(70);P0=0x00;}else{P2=0xfb;P0=0x3f;delay(70);P0=0x00;}}if(m==1&&k==-1)delay(100);else{if(temperatureH=0){P2=0xfd;P0=tab[(int)(temperatureH/10)];delay(70);P0=0x00;P2=0xfe;P0=tab[(int)(temperatureH)%10];delay(70);P0=0x00;}else{P2=0xfd;P0=0x40;delay(70);第12页共15页P0=0x00;P2=0xfe;P0=tab[(int)(-temperatureH)%10];delay(70);P0=0x00;}}}elseif(m==2||m==3){P2=0xf7;P0=0x38;delay(70);P0=0x00;if(m==2&&k==-1)delay(70);else{if(tL==1){P2=0xfb;P0=0x71;delay(70);P0=0x00;}else{P2=0xfb;P0=0x3f;delay(70);P0=0x00;}}if(m==3&&k==-1)delay(100);else{if(temperatureL=0){P2=0xfd;P0=tab[(int)(temperatureL/10)];delay(70);P0=0x00;P2=0xfe;P0=tab[(int)(temperatureL)%10];delay(70);P0=0x00;}else{P2=0xfd;P0=0x40;delay(70);P0=0x00;P2=0xfe;P0=tab[(int)(-temperatureL)%10];delay(70);P0=0x00;}第13页共15页}}if(l==200){k=-k;l=0;}l++;}voidsetin
本文标题:单片机原理及应用课程设计(温度测量)
链接地址:https://www.777doc.com/doc-3169049 .html