基于单片机数字显示温度计_第1页
基于单片机数字显示温度计_第2页
基于单片机数字显示温度计_第3页
基于单片机数字显示温度计_第4页
基于单片机数字显示温度计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、电 子 信 息 与 电 气 工 程 系课程设计报告设计类型: 课程设计 综合设计设计题目: 基于单片机数字显示温度计 系 别: 电子信息与电气工程 年级专业: 03电子本(3)班 学 号: 030114042 学生姓名: 林 芳 指导教师: 高 先 和 2007 年 1 月 18 日电子信息工程专业综合课程设计任务书设计题目基于单片机的数显温度计设计设计类型应用型导师姓名高先和主要内容及目标使用温度传感器把环境温度情况检测出来,再采用AT89C52单片机进行温度的显示,可设置温度报警。要求进行硬件、软件系统设计。要求: 3位温度的显示 设置报警温度具有的设计条件需要购买单片机、热敏传感器等电子

2、元件一批。大约20元。计划学生数及任务计划需要3人计划设计进程1、从接题开始收集资料、准备设计2、第1周 画出设计框图,制定设计方案3、第2周 画出电路原理图,进行实验4、第3周 电路调试和完善,同时编写设计报告参考文献单片机实用技术问答 谢宜仁 人民邮电 北京.2003.6Flash单片机原理及应用 余永权 电子工业 北京.2001.6单片机应用系统设计技术基于C语言编程 余永权 电子工业 北京.2004.8目 录1 摘要:82 方案论证与选择82.1 输入模块82.2 温度传感器模块82.3 显示模块92.4 报警电路93 DS18B20简介和工作原理93.1 DS18B20性能特点93.

3、2 DS18B20内部结构103.3 DS18B20控制方法113.4 高速暂存存储器113.5 DS18B20时序图124 硬件工作原理电路1341 电路工作框图1342 硬件电路图1443 硬件引脚锁定145、小结14参考文献15附:程序清单16基于单片机的数字显示温度计设计1 摘要:本设计中,采用了新型数字温度传感器DS18B20,其特点是具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。本设计使用温度传感器所环境温度情况检测出来,再采用AT89S52单片机进行控制,可设置温度报警,采用数码管温度的显示,。在本系统设计中共有以下四个模块组

4、成:输入模块、单片机控制模块、数码管显示模块、温度传感器模块。能实现以下两个基本功能:3位温度的显示、可设置报警温度。关键字:矩阵键盘、AT89S52、DS18B20、数字温度计2 方案论证与选择2.1 输入模块方案一:采用独立式按键作为输入模块,其特点:直接用I/O口构成单个按键电路,接口电路配置灵活、软件结构简单,但是当键数较多时,占用I/O口较多;方案二:采用矩阵式键盘作为输入电路,其特点:电路和软件稍复杂,但相比之下,当键数越多时越节约I/O口。本设计使用键盘输入预置报警温度值,若采用独立按键,对数值进行递增递减需频繁按键,为软件设计增加负担,且操作界面不友好。若采用矩阵式按键,可以方

5、便地输入一个温度值,使操作界面更具人性化,节约了宝贵的I/O口资源。通过对比,故采用方案二作为系统输入模块。2.2 温度传感器模块方案一:用模拟温度传感器,比如普通的热敏电阻。热敏电阻的温度特性曲线是一条指数曲线,非线性度较大,因此在使用时要进行线性化处理,线性化处理虽然能改善热敏电阻的特性曲线,但比较复杂。为此常在要求不高的一般应用中,作出在一定的温度范围内温度与阻值成线性关系的假定,才能简化计算。另外,温度与输出电压量是非线性的,读出的是模拟量,需要A/D转换器进行转换才能送给数码管显示,从而增加了软硬件的负担。方案二:采用数字温度传感器DS18B20作为温度传感器模块,它具有独特的单总线

6、接口方式,需一根总线就能实现控制模块与DS18B20之间的半双工通信。DS18B20是集传感元件和转换电路于一体的小芯片上。 另外,DS18B20也支持"一线总线"接口,测量温度范围为-55°C+125°C,在-10+85°C范围内,精度为±0.5°C。现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便,体积更小。综上分析

7、,DS18B20大大节约了I/O口资源,且在软件结构上省去建查找表这一繁琐的步骤,且它有精确的转换电路直接送出直观的数据,并且DS18B20拥有较高的温度分辨率0.0625度(采用默认的12位时),在价格方面,单个DS18B20市场价7元,与热敏电阻加A/D转换器ADC0809的组合价格相差不大。用它作为本设计传感器模块最恰当不过,固选择方案二。2.3 显示模块方案一:用LCD显示,要用LCD显示,需要学习其专用的驱动控制芯片,比如HD61203,软件实现较为复杂,且LCD的价格昂贵。方案二:采用LED数码管并行动态显示,电路简单,同样的功率驱动下,显示亮度不及静态显示,且占用I/O口较多。方

8、案三:采用LED数码管串行静态显示,仅占用控制器串口的两个I/O口,软件实现简单,显示亮度高,成本低。表1 用LED显示器显示十六位进制数的字形代码在下图表示:字型共阳极代码共阴极代码字型共阳极代码共阴极代码0COH3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH综上所述,采用方案三串行静态显示是本设计最佳显示方案。LED数码管显示器由7个发光二极管组成,因此也称之为7段LED显示器,其排列形状如上。 2.4 报警

9、电路充分利用最小系统板上资源,用蜂鸣器作报警提示音,为了使其更加可视化,再加个发光二极管,声光结合充分突出了紧急提示信号的特点。3 DS18B20简介和工作原理DS18B20数字温度计是DALLAS半导体公司生产的1Wire,即单线智能温度传感器,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。属于新一代适配微处理器的智能温度传感器,它具有体积小,接口方便,传输距离远等特点。 3.1 DS18B20性能特点 采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(16位二进制数

10、,含符号位)。 测温范围为-55-+125,测量分辨率为0.0625。内含64位经过激光修正的只读存储器ROM。适配各种单片机或系统机。用户可分别设定各路温度的上、下限。内含寄生电源。 3.2 DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图1所示。 图1 DS18B20引脚分布图表2引脚功能描述序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此

11、引脚必须接地。表3:DS18B20高速暂存器共9个存存单元序号寄存器名称作    用 序号寄存器名称 作    用 0 温度低字节以16位补码形式存放4、5保留字节1、21 温度高字节6计数器余值2 TH/用户字节1存放温度上限7计数器/3 HL/用户字节2存放温度下限8CRC 以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为

12、1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。 表4 温度高低字节存放说明高8位SSSSS262524低8位232221202-12-22-32-43.3 DS18B20控制方法 在硬件上,DS18B20与单片机的连接有两种方法,一种是Vcc接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5K左右的上拉电阻。 DS18B20有六条控制命令。表5 RAM指令表指    令 约定代码 操    

13、;  作    说      明 温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2RAM中重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPUCPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严

14、格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。配置寄存器 该字节各位的意义如下:表6: 配置寄存器结构TMR1R0111113.4 高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补

15、码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表7是对应的一部分温度值。第九个字节是冗余检验字节。表7: DS18B20暂存寄存器分布寄存器内容 字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS

16、18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 表8: ROM指令表指 令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址) 符合 ROM 55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 搜索 ROM 0FOH用于确定挂接在同

17、一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 跳过 ROM 0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 告警搜索命令 0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。 3.5 DS18B20时序图对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的读时序:DS18B20的写时序图:DS18B20的复位时序图:4 硬件工作原理电路41 电路工作框图报警

18、电路数码管显示电路温度传感器电路单片机控制电路键盘控制电路42 硬件电路图图2 硬件电路图43 硬件引脚锁定a. DS18B20的1接电源vcc,2 脚接89S52 p2.7口,3脚接地gnd。b. 报警系统蜂鸣器接89S52p3.5口。c. 矩阵键盘18引脚接89S52的 p0.0p0.7口。d. 串口显示模块中的14引脚分别接p3.0、p3.1、vcc、gnd。5、实验数据序号待测温度(度)显示温度(度)15 512 10 113 20 1954 40 405 50 5016 80 7927 90 8948 100 994数据分析:系统数字化误差6、小结程序在编译过程中,出现了一些语法错误

19、,经过细心修改得以纠正。但是,将程序下载到单片机之后,发现串口显示模块一直显示“127.5”,经过推断得知,读取的温度值为全“1”,出现这个问题,全是DS18B20它有严格的时序和通信协议,在每次读取温度数据时,都有其严格的时序要求,经过检查,发现程序中有一个地方少加了一个1毫秒左右的延时,按照DS18B20的时序原理,把忘记加的延时加上之后,就可以让单片机读取传感器的温度值了。其次,在键盘处理时还遇到一个问题,当按键按下时,由于程序一直在扫描,数码管上显示了四个相同的数字(当时按下的键值),经过分析找到了问题的所在,键盘扫描模块中没有判断按键松开的语句,所以当人按下键没松开,键盘扫描程序执行

20、了很多次,每执行一次就返回一个值,所以才会显示很多同样的数字。解决这个问题的方法是在键盘扫描程序中加了一条等待按键松开的语句,这样一来,键盘上的按键每一次人为的操作只返回一个值,解决了先前出现的问题。经过三周时间的设计,我们的设计完成了所有设计要求,系统能够完成人为设置上、下限温度发声发光报警且显示功能、数字显示温度计功能、输入报警温度出错提示功能。此次温度计设计,让我学会了规范化程序的编写、程序调试的各种方法以及解决调试过程中出现的一系列的问题。更重要的是让我明白程序的优化是多么重要。要想编写出一个系统的程序,就必须十分清楚硬件电路中所用芯片的工作原理以及使用它们的一些注意事项,比如这次设计

21、中所用的DS18B20数字温度传感器,它的时序要求十分严格,由于它是采用单总线结构的输入输出方法,它的时序中所用到的延时必然很关键,时间过长了会使整个温度计的反应时间变慢,延时时间过短会使传感器不能正常工作。在后期的程序优化过程中,在温度计状态下多加了一毫秒的延时,提高了系统的工作稳定性,解决了系统因不稳定而自动跳到报警温度设置模式的问题。本次设计过程中,和两位同学的合作加强了我的团队合作能力。课程设计指导老师高老师给了我循序渐进地指导,在此特别感谢高老师精心地栽培!参考文献1.手把手教你学单片机 周兴华著 北京航空航天出版社 2005.42.单片机原理及接口技术 余锡存 曹国华著 西安电子科

22、技出版社 1999.11附:程序清单#include <reg52.h>#define Word unsigned int#define Byte unsigned charsbit alarm=P35; /定义蜂鸣器端口sbit led=P34; /定义绿色发光管端口sbit DQ=P20;/定义“1-wire”总线Byte z4=0;/从键盘输入的负号, z4=0 : 输入数字为正;Byte z3=0,z2=0,z1=0; /从键盘输入的三个有效数字int SetTempH=125,SetTempL=-55;/存储报警温度值上下限bit SetFlag=0;/是否进入设置,0:

23、不显示 1:显示char RealTemp=0; /当前真实温度的整数部分Byte tmp1;/存温度值整数部分Byte tmp2;/存温度值小数部分bit f;/存温度符号标志bit disone=1;/设置温度时,显示所用到的标志位/* 延时函数*/void Delay(Byte n)while(-n>0) ;/* DS18B20复位函数*/void DsReset(void)DQ=0;Delay(155);/延时 884usDQ=1;Delay(5);/延时 38us/* 功能:从DS18B20读取一位数据 返回值:位*/bit DsReadBit(void)Word i;bit

24、dat;DQ=0;i+;/微延时DQ=1;i+;i+;/微延时dat=DQ;Delay(10);/延时 70usreturn(dat);/* 功能:从DS18B20读取一字节数据 返回值:字节*/Byte DsReadByte(void)Byte i,j,dat;dat=0;for(i=1;i<=8;i+)j=DsReadBit();dat=(j<<7)|(dat>>1);return(dat);/* 功能:发送一字节数据到DS18B20 形参:一字节*/void DsWriteByte(Byte n)Byte j;bit k;for(j=1;j<=8;j+

25、)k= n & 0x01;n=n>>1;if(k)DQ=0;Delay(1);/微延时DQ=1;Delay(9);/延时 64uselseDQ=0;Delay(9);/延时 64usDQ=1;Delay(1);/微延时/* 启动DS18B20转换*/void DsStartConvert(void)DsReset();Delay(155);/延时 1014usDsWriteByte(0xcc);/跳过序列号命令DsWriteByte(0x44);/发送转换命令/* 读取DS18B20的温度值(传感器单机工作) 全局变量:tmp1、tmp2、f*/void DsReadTem

26、p(void)Byte i,j;DsReset();DsDelay(155);/延时 1014usDsWriteByte(0xcc);/跳过序列号命令DsWriteByte(0xbe);/发送读取命令i=DsReadByte();/读取低位温度j=DsReadByte();/读取高位温度tmp1=j<<4;tmp1+=(i&0xf0)>>4;tmp2=i&0x0f;if(tmp1>0x80)f=1;tmp1=tmp1;/如果温度为负,温度整数部分取反tmp2=tmp2+1;/如果温度为负,温度小数部分取反加1if(tmp2=0)/如果小数部分加1后

27、溢出,整数部分再加1 tmp1+; RealTemp=-tmp1;elsef=0;tmp1=tmp1;tmp2=tmp2;RealTemp=tmp1;tmp2=(Byte)(tmp2*6.25)%10;/小数部分转换为实际温度/* 消 隐 n 个 LED */void ClearLed(Byte n)Byte i;for(i=0;i<n;i+) SBUF=0x00;while(!TI) ; TI=0;/* 共阴数码管串行LED显示不带小数点的 a */void Show(Byte a)unsigned char code led_anti=0xfc,0x60,0xda,0xf2,0x66

28、,0xb6,0xbe,0xe0,0xfe,0xf6,/0-90xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x6e,0xce,0x7c,0x02,0x00;/a-f,h,p,u,-,不显 SBUF=led_antia; while(!TI); TI=0; /* 共阴数码管串行LED显示带小数点的数字 a */void ShowPoint(Byte a)Byte code led_anti_point=0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0x0ff,0xf7,/0-90xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x6e,0

29、xce,0x7c,0x00;/a-f,h,p,u,不显 SBUF=led_anti_pointa; while(!TI); TI=0; /* 温度转换及显示程序 */void DisTemp(void)Byte t1,t2,t3,t4;t1=tmp1/100;t2=(tmp1%100)/10;t3=tmp1%10;t4=tmp2;if(f)t1=19;elseif(t1=0)t1=20;if(!t2)t2=20;ClearLed(4);Show(t1);Show(t2);ShowPoint(t3);Show(t4);/*矩阵键盘模块返回:有键按下,返回015 否则为16参数调用:无函数调用:无

30、*/Byte key_scan(void)unsigned char code_h; /键盘的行值unsigned char code_l; /键盘的列值unsigned char i;unsigned char s=16;P0=0xf0;/P0口发扫描码 11110000,此时若有键按下高四位中必有一位1变为0if(P0&0xf0)!=0xf0) for(i=0;i<200;i+) ; /延迟用于键盘去抖 if(P0&0xf0)!=0xf0) /判断是否有键按下 code_h=1; /扫描第1列P0=0xf7;/P0口发扫描第1列时的代码while(code_h<

31、5)/判断是不是最后一列if(P0&0xf0)!=0xf0)code_l=P0&0xf0;while(P0&0xf0)=code_l);/等待按键松开if(code_l=0x70) code_l=4; break; else if(code_l=0xb0) code_l=3; break; else if(code_l=0xd0) code_l=2; break; else if(code_l=0xe0) code_l=1; break; /通过比较得到列值else code_h+; P0=(P0>>1)|0x80;/若不为此行,行值加1,得到相应的代码 s

32、=16; switch(code_l)/键值转换部分 case 1: switch(code_h) case 1:s=1;break; case 2:s=2;break; case 3:s=3;break; case 4:s=10;break; default: s=16;break; break; case 2: switch(code_h) case 1:s=4;break; case 2:s=5;break; case 3:s=6;break; case 4:s=11;break; default: s=16;break; break; case 3: switch(code_h) ca

33、se 1:s=7;break; case 2:s=8;break; case 3:s=9;break; case 4:s=12;break; default: s=16;break;break; case 4: switch(code_h) case 1:s=14;break; case 2:s=0;break; case 3:s=15;break; case 4:s=13;break; default: s=16;break;break; default: s=16;break;return(s);/* 报警温度设置显示程序 */void DisSet(void)ClearLed(4);if(z3)if(z4)Show(19);Show(z3);Show(z2);Show(z1);elseif(z2)Show(20);if(z4)Show(19);Show(z2);Show(z1);elseif(z1)Show(20);Show(20);if(z4)Show(19);Show(z1);else if(z4)Show(19);/* 报警温度设置程序 */void SetTemp(void)Byte zz;Word i

温馨提示

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

评论

0/150

提交评论