基于89S51单片机的测温系统_第1页
基于89S51单片机的测温系统_第2页
基于89S51单片机的测温系统_第3页
基于89S51单片机的测温系统_第4页
基于89S51单片机的测温系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE21摘要进入21世纪,电子产品已经开始应用到每一个方面,当人类向智能电子进军,单片机由于其物美价廉而受到大家的欢迎,已经普及到我们生活、工作、科研、各个领域。本文主要介绍了一个基于89S51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。关键词:单片机AT89S52DS18B20温度传感器数字温度计AbstractInthe21stcentury,electronicallymachineshavebeenusedinanysideofourlive.Whenthehumanbeingsarecomingtoelectronicallyworld,SCMbecomesverypopularbecauseofitscheaperandhasgoodquantity.Andnowitisusedinourliving,work,scientificresearchandsoon.Itwillintroduceonethermometerwhichisbasedon89C51inthisessay.SoitwilldescribethedevelopmentofthethermometerwhichisusingDS18B20asitssensordetail.Thissystemcanbeusedconvenientlyfortemperaturecollectedandexpressed,andcanbemadethelimitationoftheupanddown.Duetoitisconvenient,accurate,widerange,highmicrodetector,littlevolumeandlesspowerandsoon.Soitissuitableforustouseinlivingandagriculturalproduct.Andalsoitcanbeusedasamoduleaddstoanyothersystem.Keywords:SCMAT89C51DS18B20TemperaturesensorDigitalthermometer目录TOC\o"1-6"\h\u167211概述 3317451.1课程设计的意义 3103611.2设计的任务和要求 3170002系统总体方案及硬件设计 3142802.1数字温度计设计方案论证 3272832.1.1方案一 3174412.1.2方案二 386002.2系统总体设计 3191982.3系统模块 4186562.3.1主控制器 4252602.3.2显示电路 556012.3.3温度传感器 624682.3.4报警温度调整按键 663093系统软件算法分析 7136843.1主程序流程图 7101153.2读出温度子程序 8179333.3温度转换命令子程序 8250213.4计算温度子程序 9267433.5显示数据刷新子程序 9183923.6按键扫描处理子程序 931324实验仿真 105PCB图………………106元件清单……………1181687总结与体会 1226887查考文献 12附1实物图…………………1219764附2源程序代码 14至21概述:1.1课程设计意义:本课程设计需要很多关于单片机等电子类的知识,需要通过查阅相关资料才可以完成,因此让我在扩展知识的同时,也学会怎么去提出问题,发现问题,解决问题。同时,在制作的过程中也可以提高我的动手操作能力。1.2设计的任务及要求:根据设计要求,完成对单路温度进行测量,并用数码管显示当前温度值系统硬件设计,并用电子CAD软件绘制出原理图,编辑、绘制出PCB印制版。要求:(1)原理图中元件电气图形符号符合国家标准;(2) 整体布局合理,注标规范、明确、美观,不产生歧义。(3) 列出完整的元件清单(标号、型号及大小、封装形式、数量)(4)图纸幅面为A4。(4) 布局、布线规范合理,满足电磁兼容性要求。(5) 在元件面的丝印层上,给出标号、型号或大小。所有注释信息(包括标号、型号及说明性文字)要规范、明确,不产生歧义。2.编写并调试驱动程序功能要求:(1)温度范围0-100℃。(2)温度分辨率±1℃。(3)选择合适的温度传感器。系统总体方案及硬件设计2.1数字温度计设计方案论证2.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。2.1.2方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。2.2系统总体设计温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。AT89S51AT89S51LED显示DS18B20温度传感器单片机复位时钟振荡报警温度调整键蜂鸣器,指示灯图2.2—1总体设计方框图图2.2—2系统仿真图2.3系统模块系统由单片机最小系统、显示电路、按键、温度传感器等组成。2.3.1主控制器单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。晶振采用12MHZ。复位电路采用上电加按钮复位。图2.3.1—1晶振电路图2.3.1—2复位电路图2.3.1-3报警电路2.3.2显示电路显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P2口的低四位作为数码管的位选端。采用动态扫描的方式显示。图2.3.2——1显示电路2.3.3温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压范围为3.0~5.5V;5、零待机功耗;6、温度以9或12位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。图2.3.3——1传感器电路2.3.4报警温度调整按键本系统设计三个按键,采用查询方式,一个用于选择切换设置报警温度和当前温度,另外两个分别用于设置报警温度的加和减。均采用软件消抖。图2.3.4——1调整按键电路3、系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。3.1主程序流程图Y发DS18B20复位命令Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY初始化初始化读取温度SET键是否按下读出温度值温度计算处理显示数据刷新发温度转换开始命令NY调用显示子程序设置报警温度图3.1主程序流程图图3.2温度子程序图3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2示3.3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图3.3所示发DS18B20复位命令发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束图3.3温度转换3.4计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示。3.5显示数据刷新子程序显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。程序流程图如图3.5。开始开始温度零下?温度值取补码置“1”标志计算小数位温度BCD值计算整数位温度BCD值结束置“0”标志NY温度数据移入显示寄存器温度数据移入显示寄存器分离显示温度分离显示温度NYNY标志位为1?标志位为1?YY最高位显示“—”最高位显示“—”最高为显示分理出的数据结束图3.4计算温度流程图图3.5显示数据刷新流程图3.6按键扫描处理子程序按键采用扫描查询方式,设置标志位,当标志位为1时,显示设置温度,否则显示当前温度。如下图3.6示。SET键按下SET键按下ADD键是否按下DEC键是否按下显示切换标志位是否为“0”调用显示子程序报警温度加1报警温度减1YNYNYN图3.6按键扫描处理子程序4、实验仿真进入protuse后,连接好电路,并将程序下载进去。将DS18B20的改为0.1,数码管显示温度与传感器的温度相同。图4—1温度显示仿真当按下SET键一次时,进入温度报警上线调节,此时显示软件设置的温度报警上线,按ADD或DEC分别对报警温度进行加一或减一。当再次按下SET键时,进入温度报警下线调节,此时显示软件设置的温度报警下线,按ADD或DEC分别对报警温度进行加一或减一。图4—2温度调试仿真当第三次按下SET键时,退出温度报警线设置。显示当前温度。5、PCB布图图5-——-1PCB图6、元件清单7、总结体会通过这次单片机课程设计,充分提高我的单片机知识及操作能力。在设计中,下载的网络程序有很多问题还符合实验要求,比如:我们的温度计精确到1度就可以,而网络程序精确到0.1度,虽然越精确越好,不过现阶段我觉得最好是符合我们的要求,因此对单片机程序中的读数部分进行修改,删除小数部分;又比如我刚开始用protus仿真时用的是共阳数码管,出现的结果是乱码,最后选择使用共阴数码管正常使用。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。参考文献:谭浩强《C程序设计》(第三版)清华大学出版社潘永雄沙河《电子线路CAD实用教程》(第三版)西安电子科技大学出版社杨忠煌黄博俊李文昌《单芯片8051实务与应用》中国水利水电出版社(美)RandallHyde《汇编评议编程艺术》清华大学出版社附1实物图附2源程序代码 //DS18B20的读写程序,数据脚P2.7////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P34~P37为位选///***************************************************/#include"reg51.h"#include"intrins.h"//_nop_();延时函数用#definedmP0//段码输出口#defineucharunsignedchar#defineuintunsignedintsbitDQ=P2^7;//温度输入口sbitw0=P2^0;//数码管4sbitw1=P2^1; //数码管3sbitw2=P2^2; //数码管2sbitw3=P2^3; //数码管1sbitbeep=P1^7;//蜂鸣器和指示灯sbitset=P2^6;//温度设置切换键sbitadd=P2^4;//温度加sbitdec=P2^5;//温度减inttemp1=0;//显示当前温度和设置温度的标志位为0时显示当前温度uinth;uinttemp;ucharr;ucharhigh=35,low=20;ucharsign;ucharq=0;uchartt=0;ucharscale;//**************温度小数部分用查表法***********//ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小数断码表ucharcodetable_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//个位带小数点的断码表uchardatatemp_data[2]={0x00,0x00};//读出温度暂放uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用/*****************11us延时函数*************************/voiddelay(uintt){for(;t>0;t--);}voidscan(){intj; for(j=0;j<4;j++) { switch(j) { case0:dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu case1:dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//gewei case2:dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiwei case3:dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei // else{dm=table_dm[b3];w3=0;delay(50);w3=1;} } }}//***************DS18B20复位函数************************/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay(50);//550usDQ=1;delay(6);//66uspresence=DQ;//presence=0复位成功,继续下一步}delay(45);//延时500uspresence=~DQ;}DQ=1;//拉高电平}/****************DS18B20写命令函数************************///向1-WIRE总线上写1个字节voidwrite_byte(ucharval){uchari;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay(6);//66usval=val/2;//右移1位}DQ=1;delay(1);}/****************DS18B20读1字节函数************************///从总线上取1个字节ucharread_byte(void){uchari;ucharvalue=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}/*****************读出温度函数************************/read_temp(){ow_reset();//总线复位delay(200);write_byte(0xcc);//发命令write_byte(0x44);//发转换命令ow_reset();delay(1);write_byte(0xcc);//发命令write_byte(0xbe);temp_data[0]=read_byte();//读温度值的第字节temp_data[1]=read_byte();//读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0];//两字节合成一个整型变量。returntemp;//返回温度值}/****************温度数据处理函数************************///二进制高字节的低半字节和低字节的高半字节组成一字节,这个//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩//下的低字节的低半字节转化成十进制后,就是温度值的小数部分/********************************************************/work_temp(uinttem){ucharn=0;if(tem>6348)//温度值正负判断{tem=65536-tem;n=1;}//负温度求补码,标志位置1display[3]=display[4]/100;//取百位数据暂存display[1]=display[4]%100;//取后两位数据暂存display[2]=display[1]/10;//取十位数据暂存display[1]=display[1]%10;//个位数据r=display[1]+display[2]*10+display[3]*100;/////符号位显示判断/////if(!display[3]){display[3]=0x0a;//最高位为0时不显示if(!display[2]){display[2]=0x0a;//次高位为0时不显示}}if(n){display[3]=0x0b;}//负温度时最高位显示"-"}voidBEEP(){ if((r>=high&&r<129)||r<low) { beep=!beep; } else { beep=0; }}//*********设置温度显示转换************//voidxianshi(inthorl){ intn=0; if(horl>128) { horl=256-horl;n=1; } display[3]=horl/100; display[3]=display[3]&0x0f; display[2]=horl%100/10; display[1]=horl%10; display[0]=0; if(!display[3]) { display[3]=0x0a;//最高位为0时不显示 if(!display[2]) { display[2]=0x0a;//次高位为0时不显示 } } if(n) { display[3]=0x0b;//负温度时最高位显示"-" }}//*********按键查询程序****

温馨提示

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

评论

0/150

提交评论