基于89C52单片机的温度测量系统设计讲解.docx
- 文档编号:27994960
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:24
- 大小:612.72KB
基于89C52单片机的温度测量系统设计讲解.docx
《基于89C52单片机的温度测量系统设计讲解.docx》由会员分享,可在线阅读,更多相关《基于89C52单片机的温度测量系统设计讲解.docx(24页珍藏版)》请在冰豆网上搜索。
基于89C52单片机的温度测量系统设计讲解
基于89C52单片机的温度测量系统设计
湖北师范学院机电与控制工程学院李春波
指导教师
摘要:
对温度测量进行讨论,并对温度传感器DS18B20的结构和使用方法进行说明,温度测量系统的设计分为硬件电路设计和软件设计两部分,其中硬件部分使用Proteus进行搭建,在构成单片机最小系统的基础上进行功能扩展,并在其上进行电路的连接和仿真,实现系统的温度测量功能,软件部分则是用Proteus和Keil联调的方式最终完成软硬件的设计过程,在仿真的过程中,可以控制温度传感器DS18B20的温度值,模拟真实条件下,温度的测取工作。
系统所显示的结果最终使用数码管进行显示,从而完成整个系统的设计过程。
关键词:
温度传感器数码管
TheDesignOfTemperatureMeasuringSystemBasedOnMCU89C52
StudentmajoringinElectrical&InformationEngineering
TutorLiXiujuan
Abstract:
Discussaboutthemeasuringsystemofthetemperature,andexplainthestructureofthetemperaturesensorDS18B20togetherwithitsusing.Thetemperaturemeasuringsystemisdividedintotwoparts,onehardware,theothersoftware.HardwaredesignisbuiltwithProteus,intheformofthebasisMCUsystemplusextraextensions.ThecircuitandthetemperaturesimulationarerealizedonProteustoaccomplishthetemperaturemeasurementofthesystem.SoftwaredesigncanfinalizethesystemwiththemethodofdebuggingonProteusandKeil.IntheprocedureofthevirtualsystemyoucancontrolthetemperatureofDS18B20toreadtheresultofthetruecondition.Intheendtheresultofthetemperatureappearsonthenumericalcodetubes,andyoucanseethefinalresultonit.
Keywords:
Temperature;Sensor;Numericalcodetubes
引言 随着社会经济的发展,尤其是工业控制方面,有许多场合要求无人值守并且环境条件恶劣,为此对于环境的监控就要求其能够自动完成并且有一定的抗干扰能力,传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿、多点测量切换误差和放大电路零点漂移误差等技术问题,才能达到较高的测量精度,而以单片机为核心的数字测量系统则能克服这些问题,以简单电路的连接方式,实现温度的高精度测量,并且最终的测量结果可以使用PC机进行处理,下面将进入温度测量系统的设计。
1 温度测量系统器件简介
1.1MCS-52单片机
按照功能划分,它由微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口(P0口、P1口、P2口、P3口)、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)组成。
它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器(SFR-SpecialFunctionRegister)的集中控制方式。
1.2 温度传感器(DS18B20)
美国DALLAS半导体公司数字温度传感器的DS1820是世界上第一片支持“一线总线”的温度传感器,“一线总线”的数字方式传输,大大提高了系统的抗干扰能力,适合于恶劣条件下温度的测量,其内部使用了on-board专利技术。
新一代的DS18B20体积更小、更经济、更灵活,充分发挥了“一线总线”的优点。
其测温范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃,最差为±2℃,支持3V~5.5V的电压范围,分辨率(9~12位)可由用户设置。
引脚如图1.2所示。
GND:
接地
DQ:
总线数据传输端
Vcc:
电源输入
图1.3DS18B20的基本测温原理
低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送计数器1,高温度系数晶振随温度变换其振荡频率明显改变,产生的信号作为计数器2的脉冲输入,计数器1和温度寄存器被预置在-55℃所对应的一个基数值,计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值加1计数器1的预置被重新装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器累加,此时温度寄存器中的数值即为所测温度值。
只要将温度寄存器的值写入EEPROM,读取EEPROM的数值即完成温度测量。
1.3三端集成稳压芯片H7805
H7805为三端正稳压芯片,能提供固定5V电压输出,内含过流、过热和过载保护电路。
带散热片时,输出电流可达1A,虽然是固定稳压芯片,但使用外接元件,可以获得不同的电压和电流。
外观图和引脚如图1.4所示
1脚:
电压输入端
2脚:
接地端
3脚:
稳定电压输出端
1.474HC138芯片
74HC138为一款高速CMOS器件,引脚兼容低功耗肖特基TTL(LSTTL)系列,由其真值表可以看出其逻辑为反相输出,可以将BCD码转换成单引脚的低电平输出。
74HC138引脚如图1.5,
A、B、C:
BCD码输入端
E1:
使能端,高电平有效
E2、E3:
使能端,低电平有效
Y0~Y7:
输出端
1.5数码管7SEG-MPX8-CC-BLUE
从电路上,数码管又分为共阴和共阳两种,8个发光二极管的阳极都连接在一起的,称之为共阳极LED数码管,8个发光二极管的阴极都连接在一起的,称之为共阴极LED数码管。
图1.5数码管7SEG-MPX8-CC-BLUE
A、B、C、D、E、F、G、DP分别接数码管的八段,1、2、3、4、5、6、7、8分别控制八个数码管的点亮。
1.6其他
电路中的电容,分陶片电容和电解电容,其中陶片电容不分极性,电解电容有正负极之分。
电阻、二极管根据具体要求选择相应的型号和大小。
变压线圈可以选定相应的匝数比。
晶振根据工程上的应用,较多选用12M和11.0592M,不妨选12M。
2 系统的硬件设计
2.1温度测量系统硬件电路连接图
图2.1为电源电路的设计和各个器件的连接图,图2.2为系统电路设计连接图,由电源电路和系统电路搭建起温度测量系统的硬件部分。
图2.1电源电路的硬件设计
图2.2温度测量系统硬件连接图
2.2各电路模块分析
2.2.1电源电路
单片机、温度传感器、数码管都支持5V电源工作,因此电源只需要单一5V供电即可,然后用芯片7805将直流电压降到稳定到5V,特别的芯片7805的输入电压应比输出电压高4-7V,所以最好选用输出电压9~12V的变压器。
如图1,220V的交流电通过变压器变压,在通过整流桥和滤波电容,可以变为特定数值的直流电(大于5V),通过7805芯片、C2(低频滤波电容)和C2(高频滤波电容),得到稳定的5V直流电,满足单片机、温度传感器和数码管的使用。
2.2.2单片机电路
要使单片机工作起来,需要给单片机接入复位电路和外接晶振。
图2.3上电复位电路
当AT89C52上电时,需要对其进行一次复位操作。
复位操作可以将AT89C52置成初始一个瞬时高电平来完成的,电路如图2.3所示。
上电瞬间,电流产生一个突发的向上尖峰脉冲,电流通过C1电容到达AT89C52的复位端口RST对其进行复位。
尖峰过后,电流平稳,电容C1阻止电流通过,避免反复复位。
电阻R1用于给C1放电,将9脚的电位拉低,防止RST端口上持续高电平。
图2.4晶振电路
给AT89C52提供一定的时钟频率,它才能正常工作,如图2.4。
2.2.3温度传感器DS18B20电路
DS18B20数字传感器是一个3脚的芯片,1脚接地,2脚为数据输入输出,3脚为可选的VCC电源。
通过一个单线接口发送或接收数据,因此单片机与DS18B20仅需一条数据连接线(除了地线)。
DS18B20应用电路有下面几种:
(1)寄生电源工作方式。
优点:
1)进行远距离测温时,无需本地电源
2)可以在没有常规电源的条件下读取ROM
3)电路简洁,仅用一个I/O口
缺点:
多个温度传感器挂在一个I/O口上进行多点测温时,4.7K上拉电阻无法提供足够的能量,造成无法转换温度或误差较大。
因此这种电路只适合于单一温度传感器测温下使用,不适用采用电池供电的系统中,且电源VCC必须保证在5V,电源电压下降时,寄生电源汲取的能量降低,使误差变大。
(2)寄生电源强上拉供电方式。
改进的寄生电源工作方式,为使DS18B20在动态转换周期中获得足够的电流供应,进行温度转换或拷贝到E2存储器时,用MOSFET把I/O线直接拉到VCC就可满足电流的供应,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10us内把I/O线转换到强上拉状态,强上拉方式可以解决电流供应不足的问题,因此适用于多点测温,缺点是多占用一个I/O口进行强上拉切换。
(3)外部电源供电方式。
这种方式是DS18B20的最佳工作方式,工作温度可靠,抗干扰能力强,电路也简单,并且可以开发出稳定可靠的多点温度监控系统。
图2.5外部电源供电方式
综合比较,采用图2.5所示的外部电源供电方式应用电路进行设计。
2.2.4数码管显示电路
单片机驱动LED数码管的方法很多,按照显示方法分为静态显示和动态显示。
静态显示是指显示驱动电路具有输出锁存功能,要显示的数据送出后不再控制LED,直到下次直到下次显示时再传送一次新的显示数据。
静态显示的数据稳定,占用的CPU时间少。
动态显示要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用CPU时间多。
两种方式各有利弊:
静态显示虽然数据稳定,占用很少的CPU时间,但是每个显示单元都需要单独的锁存驱动电路,使用的电路硬件较多,动态显示虽然有闪烁感,占用CPU时间多,但使用的硬件少,能节省线路板空间。
动态扫描显示接口是单片机中应用最广泛的一种显示方式,其接口电路是把所有的LED数码管的8个笔画段a~g、dp的同名端连在一起,而每一个数码管接收到相同的字型码,但究竟是哪个数码管亮,则取决于COM端,而这一端是由IO控制的,可以自行决定显示哪一位。
所谓动态扫描,就是指我们采用分时的方法,轮流控制各个数码管的COM端,使各个数码管轮流点亮,在轮流点亮的扫描过程中,每位数码管的点亮时间是极为短暂的,约1ms左右,但由于人的视觉暂留现象及发光二极管的余晖效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
从上述论述中可以看出动态显示方案具备较强的实用性,也是目前单片机应用中数码管显示较为常用的一种方式,所以在本设计中采用动态显示方案。
2.2.5译码电路部分
通过控制单片机的I/O口实现数码管部分的数码显示,根据A、B、C、D、E、F、G、DP在数码管上的位置,不妨选用共阴极的数码管来显示,分别将八段数码管编码为hgfedcba,由此可得0~9的编码分别为0x3f、0x06、0x5b、0x4f、0x66、0x6d、0x7d、0x07、0x7f、0x6f,通过74HC138进行译码,从而控制每一个数码管的输出。
3 系统的软件设计
3.1温度测量系统软件流程图
温度测量系统的软件主流程图可以划分成各子模块,分别为定时器设置、中断部分、读取DS18B20温度和温度译码输出,如图3.1所示,
图3.1软件主流程图
3.2 温度测量系统各子模块
3.2.1定时器设置部分
数码管的扫描采用定时器中断的方式,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。
特殊功能寄存器TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式。
特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。
TMOD、TCON这两个寄存器的内容由软件设置。
单片机复位时,两个寄存器的所有位都被清0。
D7D6D5D4D3D2D1D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
表3.1工作方式寄存器TMOD格式
定时器/计数器有4种工作方式,本次设计采用工作方式1,选择T0定时,所以TMOD中T1方式半段没有用到,高4位全为0,选择工作方式1,所以M1M0为01,选择定时模式,所以C/T为0。
GATE为0,仅由运行控制位TR0来启动定时器运行,代码部分见附录A中定时器设置部分。
3.2.2中断部分
当定时器/计数器T0溢出时产生中断,为此可以设置中断允许寄存器IE,使ET0置1同时开放CPU的中断源,使EA置1。
中断允许寄存器IE对中断的开放和关闭实现两级控制。
即有一个总的开关中断控制位EA(IE.7位),当EA=0时,所有中断源请求被屏蔽,CPU对任何中断请求拒绝,当EA=1时,CPU开中断,但5个中断源的中断请求是否允许,还要IE中的低5位所对应的5个中断请求允许控制位的状态决定。
D7D6D5D4D3D2D1D0
IE
EA
ES
ET1
EX1
ET0
EX0
位地址
AFH
ACH
ABH
AAH
A9H
A8H
表3.2中断允许寄存器IE的结构
所以,IE值设置为82H。
3.2.3读取DS18B20温度部分
由于温度测量系统所选用的温度传感器为DS18B20,且查阅DS18B20温度传感器的使用手册,可以将温度传感器的使用分为温度传感器的初始化、温度传感器写一个字节、读一个字节。
图3.2DS18B20配置寄存器的结构
图3.3DS18B20的分辨率设置表
DS18B20加电启动时,默认值R1=1,R2=1,所以默认分辨率为12位,为实验的方便,可以不改动R1、R0的值。
图3.3DS18B20的温度值格式表
由上表可见,在DS18B20的12位温度转换过程中,转换后的12位数据,存在两个8位的RAM中,其中前5位为符号位,即如果温度大于0,S全为0,否则S全为1,且负数值以二进制补码的形式存储在RAM中,温度转换时只要取反后加1,即得到所测温度的原码。
图3.4DS18B20初始化示意图
初始化时,需要将DQ数据总线拉低至少480us,数据总线就进入接收模式,DS18B20收到信号后等待15~60us,然后DQ发出60~240us的存在低脉冲,CPU收到此信号表明复位成功。
指令
代码
说明
读ROM
33H
读ROM的64位地址
符合ROM
55H
指令发出后,发出64位地址,访问该地址对应的DS18B20,为下一步的读写准备
搜索ROM
0F0H
确定连在一条总线上的DS18B20个数和识别64位ROM地址
跳过ROM
0CCH
忽略64位ROM地址,直接温度变换
告警搜索命令
0ECH
只有超过温度上下限才做出反应
表3.3DS18B20的ROM指令表
指令
代码
说明
温度变换
44H
启动温度转换,结果存入内部9字节RAM中
读暂存器
0BEH
读内部RAM中9字节内容
写暂存器
4EH
发出向内部RAM的3、4字节写上下限温度命令
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM
重调EEPROM
0B8H
将EEPROM中的内容恢复到RAM的第3、4字节
读供电方式
0B4H
读DS18B20的供电模式
表3.4DS18B20的RAM指令表
因此,可以控制单片机,向DS18B20的ROM写入0CCH,向RAM写入44H,0BEH,让DS18B20进行温度转换。
图3.5DS18B20暂存寄存器分布
读取温度时,只需读取byte0和byte1中的内容,用数码管显示出来,就得到要测量的温度值。
3.2.4温度译码输出
因为显示部分最多要用6个数码管,即负号的显示、百位显示、十位显示、个位和小数点显示、一位小数显示。
考虑到成本、器件使用的方便和尽量减少连线等因素,温度显示部分可以选用连在一起的8个数码管7SEG-MPX8-CC型号。
温度显示部分采用定时器/计数器T0中断控制数码管进行动态显示,由P2口送出动态扫描信号,且P2口的送出值为BCD码,因此需要74HC138进行译码,送入数码管的1~8口,控制数码管的选通,扫描由左向右依次进行,将所要显示的各位数码管值存入数组str[]中,str[0]存放符号位,str[1]存放百位数据,str[2]存放十位数据,str[3]存放个位数据和小数点,str[4]存放一位小数,str[5]存放温度单位C。
扫描到相应数码管时,对应位的值经过查表,所对应的断码值就被送到P0口,从而完成温度的译码显示。
4 结论与设计展望
4.1结论
温度测量系统采用Proteus进行仿真,分别将DS18B20放不同的温度条件下,看数码管是否显示正确的温度值,以下为DS18B20正常工作温度下,系统的仿真图。
(1)设置温度为21.2℃时的仿真图
图4.1仿真图1
(2)设置温度为-21.2℃时的仿真图
图4.2
4.2 展望
随着现代数字电路和可编程器件的发展,使用数字器件代替传统的模拟器件进行测量是很好的发展方向,但这对设计人员提高了软件方面的要求,设计人员进行设计时,必须仔细阅读器件的使用手册,才能在此基础上,完成符合设计要求的一个系统。
通过控制温度传感器的读和写,将得到的温度转换成数字,并最终用数码管成功显示,验证了所学的理论,成功完成了温度测量系统设计。
本次设计只是在仿真的水平上,成功完成了设计,但到了具体的硬件平台,或许还有微小的差别,在硬件电路焊接和调试方面的能力,也是一个设计人员所必备的能力,在未来的工作岗位,或科研等有条件的情况下,亲身参与软硬件的调试和设计,尤其是硬件方面就非常有必要了。
电子信息领域的变化日新月异,新的技术层出不穷,但扎实的知识理论基础和基本电路分析方法给我们指明了所要努力的方向和实现方式,毕业设计是四年本科学习的知识、理论、方法等综合知识运用的一次检验,是对知识体系的一个回顾,是迈向未来走向工作岗位的第一步,要学习的还有很多。
致谢
在这四年的时间里,我在学习上和思想上都受益非浅。
这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。
论文的写作是枯燥艰辛而又富有挑战的。
温度测量在生产、生活中很重要,老师的谆谆诱导、同学的出谋划策及家长的支持鼓励,是我坚持完成论文的动力源泉。
在此,要感谢我的指导老师李秀娟。
从论文的选题、文献的采集、框架的设计、结构的布局到最终的论文定稿,从内容到格式,从标题到标点,给予了精心的指导,才最终顺利完成论文。
感谢电子信息工程专业的各位同学,与他们的交流使我受益颇多。
最后要感谢我的家人以及我的朋友们对我的理解、支持、鼓励和帮助,正是因为有了他们,我所做的一切才更有意义;也正是因为有了他们,我才有了追求进步的勇气和信心。
时间的仓促及自身专业水平的不足,整篇论文肯定存在尚未发现的缺点和错误。
恳请阅读此篇论文的老师、同学,多予指正,不胜感激!
参考文献:
[1]李学礼.基于Proteus的8051单片机实例教程[M].1版.北京:
电子工业出版社.2008年6月
[2]那彦.电子及通信专业毕业设计宝典[M].1版.西安:
西安电子科技大学出版社.2008年3月
[3]张毅刚.彭喜元.姜守达.乔立岩.新编MCS-51单片机应用设计[M].3版.哈尔滨:
哈尔滨工业大学出版社,2008年4月
[4]罗强.基于单片机的嵌入式工程开发详解[M].1版.北京:
电子工业出版社.2009年1月
[5]赵佩华.DS1820在单片机温度测控中的应用[N].上海电机学院学报,2008年12月
附录A温度测量系统单片机C程序
#include
#include
#include
sbitseg1=P2^0;
sbitseg2=P2^1;
sbitseg3=P2^2;
sbitDQ=P1^3;
sfrdataled=0x80;//P0口数据送数码管
unsignedinttemp;
unsignedcharflag,count,num;
unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码表
unsignedcharstr[6];
unsignedintReadTemperature(void);
voidInit_DS18B20(void);
unsignedcharReadOneChar(void);
voidWriteOneChar(unsignedchardat);
voiddelay(unsignedinti);
main()
{
unsignedcharTempH,TempL;
num=0;
TMOD=0x01;//定时器设置
TH0=0xef;
TL0=0x00;
IE=0x82;
TR0=1;
P2=0x00;
while
(1)
{
if(flag==1){
temp=ReadTemperature();
if(temp&0xf800){
str[0]=0x40;//负号标志
temp=~temp;
temp+=1;}//取反加1
elsestr[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
flag=0;
str[1]=tab[TempH/100];//百位
str[2]=tab[(TempH%100)/10];//十位
str[3]=tab[(TempH%100)%10]|0x80;//个位,小数点
str[4]=tab[TempL];
str[5]=0x39;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 C52 单片机 温度 测量 系统 设计 讲解
![提示](https://static.bdocx.com/images/bang_tan.gif)