资源描述
信息工程学院
《单片机原理与外围电路》课程论文
题目:基于单片机的数字温度计设计
姓名:
学号:
班级:
2
摘要: 温度是生产过程和科学实验中普遍而且及其重要的物理参数之一。因为在日常生活以及工业生产的过程中,经常要用到温度的检测以及对温度的控制,因此在生产过程中,为了能够高效地进行生产,就不得不对它的各项主要参数,如压力、流量特别是温度等进行有效的控制。而这个设计就是应用51 系列单片机的内部结构与组成、I/O 口结构与功能、时钟与复位电路以及温度控制器原理与应用、中断系统、指令系统与汇编语言程序设计、C51 程序并且基于AT89S52单片机的一种温度测量电路以及报警电路,采用美国DALLAS半导体公司推出的一种改进型智能温度传感器DS18B20作为检测元件,测量的温度范围涵盖了-55~+125 ºC,同时其最高分辨率亦可以达到0.0625 ºC,另外本设计使用LCD液晶屏显示,还能设置温度报警上下限,可以称之为设计新颖、功能强大、结构简单、实用可靠。
关键词:温度测量;DS18B20;AT89S52
目 录
Temperatur measurement; DS18B20; LED不要删除行尾的分节符,此行不会被打印
1绪论 4
1.1课题背景及研究意义 4
1.2国内外现状 4
1.3课题的设计目的 4
1.4课题的主要工作 4
2系统概述 5
2.1方案论证 5
2.2系统设计原理 6
3系统硬件设计 7
3.1 主控电路设计 7
3.2 LCD液晶显示器接口电路设计 7
3.3 温度传感器DS18B20 9
4系统软件设计 10
4.1主程序设计 10
4.2 DS18B20初始化 10
4.3仿真结果 11
结论 13
参考文献 13
附录A 系统整体电路 16
附录B 全部程序清单 16
- II -
1绪论
1.1技术背景
单片机是指一个集成在一块芯片上的完整计算机系统。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而且性能不错获得了很多的好评。此后在8031的基础上发展出了MCS51系列单片机系统并且基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元[5]。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上,而作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
1.2课题的设计目的
首先巩固、加深和扩大单片机知识的应用面,提高综合及灵活运用所学知识解决工业控制的能力。
其次,培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。
最后,通过对课题设计方案的分析、选择、比较来熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。
1.3课题的主要工作
本课题的研究重点是设计一种基于单片机的数字温度计控制系统。能够显示温度的测量值
主要工作目标如下:
1. 温度测试基本范围-25℃—125℃。
2. 精度误差小于1℃。
3. LCD液晶显示。
4. 可以设定温度的上下限报警显示功能。
5. 实现报警显示。
2系统概述
2.1方案论证
该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的已经实现的方案。
方案一:采用热电偶温差电路测温,热电偶由两个焊接在一起的异金属导线所组成,通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。系统主要包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。
系统框图如图 2-1所示。
图 2-1 热电偶温差电路测温系统框图
方案二:采用数字温度芯片DS18B20 测量温度,输出信号全数字化。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。另外AT89S52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。该系统利用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。
从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。
2.2系统设计原理
利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性。同时处理后的数据送到LCD中显示。
本课题以是AT89S52单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成,系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LCD显示、温度传感器组成。
系统框图如图2-2所示。
单片机复位
按键设置
时钟振荡
主
控
制
器
LCD显示
温度传感器
图2-2 系统基本方框图
1、主控制器:
单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用三节电池供电。
2、显示电路
显示电路采用LCD液晶屏显示具有 如下特点:一、机身薄,节省空间。二、省电,不产生高温。 三、无辐射,益健康。 四、画面柔和不伤眼。随着数字时代的来临,数字技术必将全面取代模拟技术,LCD不久就会全面取代现在的模拟CRT显示器。
3、温度传感器
温度传感器采用美国DALLAS半导体公司[8]生产的DS18B20温度传感器。DS18B20输出信号全数字化。便于单片机处理及控制,在0—100 摄氏度时,最大线形偏差小于1 摄氏度,采用单总线的数据传输,可直接与计算机连接。
特点:独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用,无需外部元件,可用数据总线供电。用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度。
3系统硬件设计
3.1 主控电路设计
AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。在本系统中,AT89S52单片机内部的功能单元已经能够满足系统设计需要,不需要系统扩展。
AT89S52具有以下的特点:
l CPU与MCS-51 兼容
l 1000写/擦循环
l 8K字节可编程FLASH存储器
l 全静态工作:0--33MHz
l 三级加密程序存储器
l 256*8位内部RAM
l 32个可编程I/O线
l 三个16位定时器/计数器
l 8个中断源
l 可编程串行通道
l 低功耗的闲置和掉电模式
片内振荡器和时钟
3.2 LCD液晶显示器接口电路设计
显示器是人与机器沟通的重要界面,液晶显示器(LCD)英文全称为Liquid Crystal Display[17],它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×1的字符型液晶显示模块。
LM016L的结构及功能:
LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式。LM016L液晶模块的引脚图如图3-1所示。
图3-1 1601引脚图
如图3-2所示。用89S52的P2口作为数据线,用P3.2、P3.1、P3.0分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
图3-2 液晶与89C52的接口
3.3 温度传感器DS18B20
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。DS18B20引脚如图3-3所示。
图3-3 DS18B20引脚图
DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55~+125 摄氏度,可编程为9位~12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的内部结构如图3-4所示。主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分
图3-4 DS18B20内部结构
4系统软件设计
4.1主程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块[20]。主程序流程见图4-1。
红灯亮
绿灯亮
灯灭
结束
显示温度
开始
MCBU初始化
BS18B20初始化
判定温度是否在范围内
图 4-1 主程序流程图
4.2 DS18B20初始化
18B20初始化流程图见图4-2。
图 4-2 DS18B20初始化流程图
4.3仿真结果
设置温度上限为38度,温度下限为24度。
1.如图4-2所示。此时温度时39度,超出上限温度,红灯亮,实现报警。
图4-2
2.如图4-3所示。此时温度为23度,低于下限温度,绿灯亮,实现报警。
图4-3
3.如图4-4所示。此时温度为33度,在所设范围内,两灯都没亮,说明温度正常。
图4-4
结论
本文介绍了基于AT89S52单片机的电子温度设计,对整个硬件电路和软件程序设计做了分析,文中介绍了数字温度计的现状及发展,介绍了仿真软件proteus及keil的基本知识,学习了proteus的仿真方法和步骤,介绍了数字温度计的设计方案选择及原理介绍,加深了51单片机的知识了解,介绍51单片机的结构、特点等。并学习了数字温度传感器DS18B20,设计软件仿真,更直观的反应设计的正确性。本文对其中的一些基本原理也做了简要的概述。其实写完了本篇论文,也仅仅是对数字温度计控制系统做出了一个简单的设计方案,数字温度计科利用在很多领域,在一些人不能直接进入的场所,利用单片机控制的数字温度计,可以设置并控制其中的温度,数字温度计还可以利用在温室中,这样就可以方便的控制温室中的温度,当温度超过所要求的温度时,可发生报警。总之数字温度计利用在很多领域。本课题只是单片机控制数字温度计系统得一种设计方法。
参考文献
[1]浙江 苏迎春. 基于51单片机的多功能电子琴设计和制作(上)[N]. 电子报,2012-07-29009.
[2]浙江 苏迎春. 基于51单片机的多功能电子琴设计和制作(下)[N]. 电子报,2012-08-05009.
[3]胡敏,谌海云,侯阳,邱志勇. 数字温度计的设计[J]. 现代电子技术,2012,06:168-169+172.
[4]冯霞. 基于单片机的数字式热敏温度计设计[J]. 硅谷,2012,09:71+192.
[5]陈子元. 基于单片机的数字温度计设计[J]. 数字技术与应用,2012,05:24.
[6]臧京. 燃油加油机的自动检定系统设计与实现[D].吉林大学,2012.
[7]杨承帅. 蒸化工艺中温湿度测量装置的研制[D].苏州大学,2012.
[8]杨沉陈. 基于AVR单片机农产品害虫耐热特性测试系统的研制[D].西北农林科技大学,2012.
[9]陈世夏,高玉章,丁国臣. 基于SPCE061A的温度控制器设计[J]. 国外电子测量技术,2012,08:51-53.
[10]孙燕,邬天达,朱鹏健. 环境参数检测系统[J]. 湖南农机,2012,07:30-31.
[11]吕俊亚. 一种基于单片机的温度控制系统设计与实现[J]. 计算机仿真,2012,07:230-233.
[12]弟宇鸣,陈荣桦,左广霞,宋仓. 基于C8051单片机电子光纤封记系统设计[A]. 中国电子学会、中国核学会核电子学与核探测技术分会.第十六届全国核电子学与核探测技术学术年会论文集(下册)[C].中国电子学会、中国核学会核电子学与核探测技术分会:,2012:6.
[13] Rhee W.Design of high-performance CMOS charge pumps inphase-locked loops. IEEE International Symposium on Cir-cuits and Systems. 1999
[14]焦冰,温雅婷,叶松,王晓蕾,陈晓颖. 一种抛弃式海温探测仪通信系统的设计[A]. 中国气象学会.S8 大气探测与仪器新技术、新方法[C].中国气象学会:,2012:5.
[15]George Lee,Karina Ng,Edmond Kwang.Design of ring oscillator based voltage controlled oscillator. Project Final Report[R]. 2011
[16]郭维. 穿戴式人体生理参数监测系统的研究与实现[D].吉林大学,2012.
[17]李志明. 整辊镶块式板形仪信号处理及板形闭环控制方法研究[D].燕山大学,2012.
[18]席新明. 基于介电特性的流体组分检测方法与技术研究[D].西北农林科技大学,2012.
[19]陕西 罗有鑫. 基于AT89C2051单片机制作的水泥取样控制器[N]. 电子报,2012-02-05011.
[20]福建 江飞 曹煌华. PSM发射机功率开关控制器测试仪的研制[N]. 电子报,2012-07-01014.
[21] Behzad Razavi.Design of Analog CMOS Integrated Circuits[M]. .20012
附录A 系统整体电路
附录B 全部程序清单
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;
sbit lcdrs=P3^6; //数据命令选择控制
sbit lcdrw=P3^5; //读/写选择控制
sbit lcden=P3^4; //使能信号
sbit d1=P1^0;
sbit d2=P1^1;
uchar code t0[]="the temperature ";
uchar code t1[]=" is ";
uchar code wendu[]="0123456789"; //利用一个温度表解决温度显示乱码
sbit DQ = P3^7;//定义ds18B20总线IO
unsigned char fuhao ;//;标记温度正负
//液晶显示模块
void delay(uint z)
{
uint x,y;
for(x=100;x>1;x--)
for(y=z;y>1;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(t0[i]);
delay(0);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(t1[i]);
delay(0);
}
}
//温度采集模块
void tmpDelay(int num)//延时函数
{
while(num--) ;
}
/******************************************************************************/
void Init_DS18B20()//初始化ds1820
{
unsigned char x=0;
DQ = 1; //DQ复位
tmpDelay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
tmpDelay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
tmpDelay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
tmpDelay(20);
}
unsigned char ReadOneChar()//读一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat)//写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
tmpDelay(5);
DQ = 1;
dat>>=1;
}
}
unsigned int Readtemp()//读取温度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //连续读两个字节数据 //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a; //两字节合成一个整型变量。
tt=t*0.0625; //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度 t= tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
if(t&0x8000)
{
fuhao=1 ;
t=(~t)+1;
}
t=t*10/16;//
return(t);
}
void display()
{
unsigned int num,num1; //定义的时候用uchar宏定义就会出错
unsigned int shi,ge,xiaoshu; //这里的num,shi,ge,xiaoshu 必须用unsigned int无符号整数来表示,用unshigned char 字符型则显示错误
num=Readtemp();
num1=num/10;
if(num1>380)
{d1=0;d2=1;delay(500);}
else if(num1<240)
{d1=1;d2=0;delay(500);}
else
{d1=1;d2=1;}
shi=num/100;
ge=num/10%10;
xiaoshu=num%10;
write_com(0x80+0x40+4);
if(fuhao)write_date('-');
else write_date(' ');
write_com(0x80+0x40+5);
write_date(wendu[shi]);
write_com(0x80+0x40+6);
write_date(wendu[ge]);
write_com(0x80+0x40+7);
write_date(0x2e);
write_com(0x80+0x40+8);
write_date(wendu[xiaoshu]);
}
void main()
{
init_lcd();
while(1)
{display();
delay(100);
}
}
18
展开阅读全文