《数字温度计课程设计(18页).doc》由会员分享,可在线阅读,更多相关《数字温度计课程设计(18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-2007级学生单片机课程设计 单片机课程设计报告书课题名称 数字温度计的设计 姓 名胡思敏学 号 0712201*05院 系物理与电信工程系专 业电子信息工程指导教师李梦醒副教授2010年 7 月2日 1. 一、设计任务及要求:1、基本范围-50-1102、精度误差小于0.53、LED数码直读显示 指导教师签名: 2010年 6 月 16 日 二、指导教师评语: 指导教师签名: 2010年 7 月 3 日 三、成绩验收盖章 2010年 7 月 3 日 数字温度计的设计胡思敏(湖南城市学院物理与电信工程系电子信息工程专业,益阳,413002)1设计目的单片机即单片微型计算机。(Single-C
2、hip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。本设计用DS18B20智能温度传感器作为检测元件;用LED数码管显示温度,用所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,主要用于对测温比较准确的场所,该设计控制器使用单片机AT89S51。2 设计的主要内容和要求 由于本设计室测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单
3、片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦,进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。3 整体设计方案 温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,用3位LED数码管以串口传送数据实现温度显示。 图1总体设计方框图 单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统
4、可用二节电池供电。显示电路采用3位共阳LED数码管,从P3口RXD,TXD串口输出段码。DS18B20采用脚PR35封装或脚SOIC封装,其内部结构框图如图2所示。 图2 DS18B20内部结构 64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法
5、计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。表1一部分温度对应值表温
6、度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC9
7、0H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。4 硬件电路的设计系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图3 所示。图3中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。图3中的按健复位电路是上电复位加手动复位,使用
8、比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。 图3 总电路图5 软件设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。5.1主程序设计 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。其程序流程见图4所示 图4 主程序流程图 5.2读出温度子程序设计读出温度子程序的主要功能是读
9、出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图5示图5 读温度流程图 5.3温度转换命令子程序设计温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。 图6 温度转换流程图 5.4 显示数据刷新子程序设计显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图7图7 显示数据刷新流程图 5.5 计算温度子程序设计计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程
10、图如图8所示。 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY图8 计算温度流程图6 系统仿真如图9所示,该仿真验证的过程为,首先按开始按,这时数码管显示为预设输入的40度。 图9 系统仿真图 7 设计总结 起先对单片机不太了解的我,为了完成此次的课程设计,翻书、上网查资料,但还是有很多不了解的地方。无奈就去问同学,同学们热心的态度令我很欣慰。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,在以后的学习中还
11、要多加改正。两个星期的课程设计结束了,感觉到从总得到了很多成长,学到了很多东西,有对单片机更深的理解,有自己的努力和汗水,有同学们的帮助,还有大家的合作能力,我要把它们好好地收藏起来,今后都是我生活中的无价之宝。 8 使用说明 接通电源后,按下复位键进行复位,暂停仿真,在温度输入处设定输入温度,运行能看到显示管显示设定温度,在温度输入处按“+”,“-”可使显示管相显示的温度对应的进行加减。参考文献1 陈双全,宋谦.智能小区可视对讲系统设计J.武汉船舶职业技术学院学报,2003,20(3):36-39 2 赵建东,陈小乐.基于Internet的智能家庭网络控制器的实现J.电子技术应用, 2002
12、,34(12) :23-25.3 李永东,岳继光,李炳宇.PIC单片机在楼宇对讲系统中的应用J.电4 李炳宇,萧蕴诗,李永东.AT89C51单片机在多层楼宇对讲系统中的应用J.自动化与仪表,2001,38(04):23-25. 5 李强华,张根宝,段力基于单片机控制的楼宇对讲系统的设计J.电气应用,2007,12(01):04-06.附录:源程序清单:# include reg51.h # include intrins.h # define disdata P1 # define discan P3 # define uchar unsigned char # define uint uns
13、igned intsbit DQ = P37; sbit DIN = P17; uint h; uchar code ditab16= 0X00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09; uchar code dis_712= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf; uchar code scan_con4=0xfb,0xf7,0xef,0xdf; uchar data temp_data2=0x00,
14、0x00,; uchar data display5=0x00,0x00,0x00,0x00,0x00; void delay(uint t) for(;t0;t-); scan() char k; for(k=0;k0;i-) DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_(); DQ=val&0x01; delay(6); val=val/2; DQ=1; delay(1); uchar read_byte(void) uchar i; uchar value=0; for(i=8;i0;i-) DQ=1;_
15、nop_();_nop_(); value =1; DQ=0; _nop_();_nop_();_nop_();_nop_(); DQ=1;_nop_();_nop_();_nop_();_nop_(); if (DQ)value|=0x80; delay(6); DQ=1; return(value); read_temp() ow_reset(); write_byte(0xcc); write_byte(0xbe); temp_data0=read_byte(); temp_data1=read_byte(); ow_reset(); write_byte(0xcc); write_by
16、te(0x44); work_temp() uchar n=0; if(temp_data1127) temp_data1=(256-temp_data1); temp_data0=(256-temp_data0);n=1; display4=temp_data0&0x0f;display0=ditabdisplay4; display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4) ; display3=display4/100; display1=display4%100; display2=display4/10; display1=display4%10; if(!display3)display3=0x0a; if(!display2)display2=0x0a; if(n)display3=0x0b; main () disdata=0xff; discan=0xff; for(h=0;h4;h+)displayh=8; ow_reset(); write_byte(0xcc); write_byte(0x44); for(h=0;h500;h+) scan(); while(1) read_temp(); work_temp(); for(h=0;h500;h+) scan(); -第 18 页-