毕业设计数字温度计设计_第1页
毕业设计数字温度计设计_第2页
毕业设计数字温度计设计_第3页
毕业设计数字温度计设计_第4页
毕业设计数字温度计设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计题 目: 数字温度计设计班 级:姓 名: 学 号: 指导教师: 设计时间: 评语:成绩目录一、引言(2)二、概述(2)1.课程设计的意义(2)2.设计的任务和要求(2)三、设计方案及原理(2)1. 设计方案(2)2. 原理(2)四、硬件设计(3)1. 系统模块(3)2. 主控制器(3)3. 显示电路(3)4.温度传感器(4)五、软件设计(6)1. 系统程序(6)2.主程序流程图(6)六、总结(7)七、参考文献(8)八、附录(8)1.仿真图 (8)2. 源程序 (8)1、引言随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文

2、主要介绍了一个基于89S51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干

3、扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。2、概述2.1课程设计的意义本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。特别是对单片机的系统设计有很大帮助。本课程设计由两个人共同完成,在锻炼了自己的同时也增强了自己的团队意识和团队合作精神。2.2设计的任务和要求(1)基本范围-50-110(2)精度误差小于0.5(3)LED数码直读显示(4)可以任意设定温度的上下限报警功能3、设计方案及原理3.1设计方案由于本设计是测温电路,进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传

4、感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。3.2原理温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。AT89C51LED显示DS18B20温 度 传 感 器复位电路时钟振荡报警温度调整键蜂鸣器,指示灯图1 总体设计框图4、硬件设计4.1系统模块系统由单片机最小系统、显示电路、按键、温度传感器等组成。4.2主控制器单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要。4.3显示

5、电路图2 数码管显示电路显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P2口的低四位作为数码管的位选端。采用动态扫描的方式显示。4.4温度传感器(1)DS18B20的性能特点DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的性能特点如下:.独特的单线接口仅需要一个端口引脚进行通信;.多个DS18B20可以并联在唯一的三线上,实现多点组网功能;.不需要外部器件;.可通过数据线

6、供电,电压范围为3.0-5.5 V;.零待机功耗;.温度以912位数字量读出;.用户可定义的非易失性温度报警设置;.报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;. 负电压特性,电源极性接反时,温度计不会因发热而烧毁,只是不能正常工作。(2)DS18B20的内部结构DS18B20采用3脚PR一35封装或8脚SOIL封装,其内部结构框图如图3所示。64位ROM和 单线接口存储器与控制逻辑高速缓存温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器VDDCI/O图3 DS18B20内部结构框图4位ROM的位结构如图4所示。开始8位是产品类型的编号;接着是每个器件的唯一的

7、序号,共有48位;最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用单线进行通信的原因。非易失性温度报警触发器TH和TL,可通过软件写人用户报警上下限数据。8位检验CRC48位序列号8位工厂代码(10H)MSB LSB MSB LSB MSB LSB图4 64位ROM结构框图(3)DS18B20测温原理图5所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输人。预置斜率累加器计数比较器减法计数器1低温度系数振荡器预置减到0高温度系数振荡器减法计数器2

8、减到0温度寄存器停增图5 DS18B20的测温原理图图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的一个基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置值减到。时,温度寄存器的值将加1,减法计数器1的预置值将重新被装人,并重新开始对低温度系数振荡器产生的脉冲信号进行计数。如此循环,直到减法计数器2计数到0时,停止温度寄存器值的累加,

9、此时温度寄存器中的数值就是所测温度值。图4.8中的斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读/写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。(4)DS18B20与单片机的接口电路DS18B20可以采用两种方式供电:一种是采用电源供电方式,此时DS18B20的第1脚接单片机课程设计指导地,第2脚作为信号线,第3脚接电源;

10、另一种是寄生电源供电方式,如图6所示。单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18 B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最长为500 ms。采用寄生电源供电方式时,VDD和GND端均接地。由于单线制只有一根线,因此发送接口必须是三态的。单 片 机4.7kVccVccDS18B20DS18B20DS18B20图6 DS18B20采用寄生电源的电路图(5)测温系统的硬件工作原理对DS18B20初始化后,主机发出SKIP ROM命令,此命令执行后的存储器操作命令将对所在线的

11、DS18B20,在发出温度转换启动码(44H),等待750ms后,先发出匹配ROM命令(55H)紧接着主机提供一片DS18B20的64位序列号,读取其温度存储器值,存入数据缓存。5、软件设计5.1系统程序系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。5.2主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图7所示,各模块功能如下:读出温度子程序:读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行

12、温度数据的改写。温度转换命令子程序:发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。计算温度子程序:将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。显示数据刷新子程序:主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。按键扫描处理子程序:按键采用扫描查询方式,设置标志位,当标志位为1时,显示设置温度,否则显示当前温度。初始化读取温度SET键是否按下读出温度值温度计算处理显示数据刷新发温度转换开始命令NY调用显示子程序设置报警温度图7 主程序流程图6、总结通过这次对数字温度计的设计

13、与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序

14、只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。7、参考文献1马忠梅,张凯,等. 单片机的C语言应用程序设计(第四版). 北京航空航天大学出版社.2薛庆军,张秀娟,等.单片机原理实验教程. 北京航天航空大学出版社.3 刘和平,刘跃.单片机原理及应用.重庆:重庆大学出版社.4 杨西明,朱骐.单片机编程与入门.北京:机械工业出版社.8、附录8.1仿真图8.2源程序#include "reg51.h"#include "intrins.h" /_nop_();延时函数用#define dm P0 /段码输出口#define uchar

15、unsigned char#define uint unsigned intsbit DQ=P27; /温度输入口sbit w0=P20; /数码管4sbit w1=P21;/数码管3sbit w2=P22;/数码管2sbit w3=P23; /数码管1sbit beep=P17; /蜂鸣器和指示灯sbit set=P26; /温度设置切换键 sbit add=P24; /温度加sbit dec=P25; /温度减int temp1=0; /显示当前温度和设置温度的标志位为0时显示当前温度uint h; uint temp;uchar r;uchar high=35,low=20;uchar

16、sign;uchar q=0;uchar tt=0;uchar scale;/*温度小数部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09; /小数断码表uchar code table_dm12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共阴LED段码表 "0" "1" "2" "3&

17、quot; "4" "5" "6" "7" "8" "9" "不亮" "-" uchar table_dm1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /个位带小数点的断码表uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运

18、算暂用/*11us延时函数*/void delay(uint t) for (;t>0;t-);void scan()int j;for(j=0;j<4;j+)switch (j)case 0: dm=table_dmdisplay0;w0=0;delay(50);w0=1;/xiaoshu case 1: dm=table_dm1display1;w1=0;delay(50);w1=1;/gewei case 2: dm=table_dmdisplay2;w2=0;delay(50);w2=1;/shiwei case 3: dm=table_dmdisplay3;w3=0;de

19、lay(50);w3=1;/baiwei /elsedm=table_dmb3;w3=0;delay(50);w3=1;/*DS18B20复位函数*/ow_reset(void)char presence=1;while(presence) while(presence) DQ=1;_nop_();_nop_();/从高拉倒低DQ=0; delay(50); /550 usDQ=1; delay(6); /66 uspresence=DQ; /presence=0 复位成功,继续下一步 delay(45); /延时500 us presence=DQ; DQ=1; /拉高电平/*DS18B20

20、写命令函数*/向1-WIRE 总线上写1个字节void write_byte(uchar val) uchar i; for(i=8;i>0;i-) DQ=1;_nop_();_nop_(); /从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); /5 us DQ=val&0x01; /最低位移出 delay(6); /66 us val=val/2; /右移1位 DQ=1; delay(1);/*DS18B20读1字节函数*/从总线上取1个字节uchar read_byte(void)uchar i;uchar value=0;for(i=8

21、;i>0;i-) DQ=1;_nop_();_nop_(); value>>=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); /4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4 us if(DQ)value|=0x80; delay(6); /66 usDQ=1;return(value);/*读出温度函数*/read_temp() ow_reset(); /总线复位 delay(200); write_byte(0xcc); /发命令 write_byte(0x44); /发转换命令 ow_rese

22、t(); delay(1); write_byte(0xcc); /发命令 write_byte(0xbe); temp_data0=read_byte(); /读温度值的第字节 temp_data1=read_byte(); /读温度值的高字节 temp=temp_data1; temp<<=8; temp=temp|temp_data0; / 两字节合成一个整型变量。return temp; /返回温度值/*温度数据处理函数*/二进制高字节的低半字节和低字节的高半字节组成一字节,这个/字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩/下的低字节的低半字节转化成十进制

23、后,就是温度值的小数部分/*/work_temp(uint tem)uchar n=0;if(tem>6348) / 温度值正负判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem&0x0f; / 取小数部分的值 display0=ditabdisplay4; / 存入小数部分显示值 display4=tem>>4; / 取中间八位,即整数部分的值display3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10;

24、/ 取十位数据暂存 display1=display1%10; /个位数据 r=display1+display2*10+display3*100;/符号位显示判断/ if(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) display2=0x0a; /次高位为0时不显示 if(n)display3=0x0b; /负温度时最高位显示"-"void BEEP()if(r>=high&&r<129)|r<low)beep=!beep;elsebeep=0;/*设置温度显示转换*/void xianshi(int horl)int n=0;if(horl>128)horl=256-horl;n=1;display3=horl/100;display3=display3&0x0f;display2=horl%100/10;display1=horl%10;display0

温馨提示

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

最新文档

评论

0/150

提交评论