基于单片机的数字温度控制系统设计说明.docx

上传人:b****6 文档编号:5157823 上传时间:2022-12-13 格式:DOCX 页数:30 大小:467.41KB
下载 相关 举报
基于单片机的数字温度控制系统设计说明.docx_第1页
第1页 / 共30页
基于单片机的数字温度控制系统设计说明.docx_第2页
第2页 / 共30页
基于单片机的数字温度控制系统设计说明.docx_第3页
第3页 / 共30页
基于单片机的数字温度控制系统设计说明.docx_第4页
第4页 / 共30页
基于单片机的数字温度控制系统设计说明.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

基于单片机的数字温度控制系统设计说明.docx

《基于单片机的数字温度控制系统设计说明.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度控制系统设计说明.docx(30页珍藏版)》请在冰豆网上搜索。

基于单片机的数字温度控制系统设计说明.docx

基于单片机的数字温度控制系统设计说明

创新项目报告

 

项目名称:

基于单片机的数字温度控制系统设计

专业:

电子信息工程技术班级:

电信141

指导老师:

乔志勇姓名:

卢德寅

地点:

教学楼时间:

2015年12月

成绩

评定

 

二〇一六年一月十日

摘要

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同种类的传感器,可实现诸如电压、湿度、温度、速度、硬度、压力等的物理量的测量。

本文将介绍一种基于单片机控制理论及其应用系统设计的数字温度计。

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

DS18B20和AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合与恶劣环境下进行现场温度测量,有广泛的应用前景。

本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus软件上进行仿真,修改,仿真。

本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置围时,可以报警,同时根据设定的温度围通过升降温电路控制环境的温度达到恒温效果。

【关键词】单片机,数字控制,温度计,DS18B20,STC89C52RC

 

第1章绪论

1研究意义及背景

随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。

传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。

本设计使用单片机作为核心进行控制。

单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字化、智能化方面有广泛的用途。

2设计目的

1.温度显示基本围10℃—30℃。

2.精度误差小于0.01℃。

3.所测温度值由LCD1602液晶显示屏显示。

4.可以设定温度的上下限控制及报警功能。

3主要工作

本设计的研究重点是设计一种基于单片机的数字温度计控制系统。

设计采用数字温度传感器DS18B20,此传感器读取被测量温度值,并进行转换。

将转换后的数据送到单片机处理,再通过LCD1602液晶显示屏显示出来。

 

第2章系统概述

1系统方案

数字温度传感器DS18B20输出信号全数字化,便于单片机处理及控制,省去传统测温方法的很多外围电路。

且该芯片的物理性、化学性很稳定,能用做工业测温元件。

采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,硬件实现简单,体积小,安装方便。

所以该系统利用AT89C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可根据需要设定上下限控制及报警温度。

2系统组成

本设计是以AT89S52单片机为核心的一种数字温度显示控制系统,系统整体硬件电路包括:

采集模块、显示模块、设置模块和单片机最小系统模块四大模块组成。

系统框图如图2-1所示。

 

 

图2-1系统基本方框图

第3章系统硬件设计

1AT89S52单片机的介绍

AT89S52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时含5个中断源,2个优先级,2个16位定时/计数器。

AT89S52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成,具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计,使用系统可用USB供电。

AT89S52单片机的基本组成框图见图3-1。

图3-1AT89S52单片机结构

由图3-1可见,AT89S52单片机主要由以下几部分组成:

1.CPU系统

8位CPU,含布尔处理器;

时钟电路;

总线控制逻辑。

2.存储器系统

4K字节的程序存储器(ROM/EPROM/Flash,可外扩至64KB);

128字节的数据存储器(RAM,可再外扩64KB);

特殊功能寄存器SFR。

3.I/O口和其他功能单元

4个并行I/O口;

2个16位定时计数器;

1个全双工异步串行口;

中断系统(5个中断源,2个优先级)。

2显示电路

1602液晶简介

LCD1602分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如图3-2所示。

图3-2LCD1602规格

引脚功能

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示。

表3.1LCD1602引脚说明

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

数据

3

VL

液晶显示偏压

11

D4

数据

4

RS

数据/命令选择

12

D5

数据

5

R/W

读/写选择

13

D6

数据

6

E

使能信号

14

D7

数据

7

D0

数据

15

BLA

背光源正极

8

D1

数据

16

BLK

背光源负极

指令说明

LCD1602液晶模块部的控制器共有11条控制指令,如表3.2所示。

表3.2LCD1602部控制器

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据容

11

从CGRAM或DDRAM读数

1

1

读出的数据容

3DS18B20介绍

DS18B20引脚如图3-3所示。

图3-3DS18B20引脚图

数字温度传感器DS18B20是一种新型的“一线器件”,采用单总线的数据传输,其体积小,输出信号全数字化,便于单片机处理及控制,在0—100摄氏度时,其最大线形偏差小于1摄氏度。

工作电源既可以在远端引入,也可以采用寄生电源方式产生。

多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

因此用它来组成一个测温系统,线路十分简单。

3.1温度传感器测温原理

低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

其部结构图如图3-4所示。

图3-4DS18B20部结构

4系统工作原理

温度传感器DS18B20将模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,单片机将处理后的数据通过LCD1602显示屏显示出来,同时判断测得的温度和设置控制及报警的温度限进行比较,超过限度则通过蜂鸣器发出报警声音。

5系统整体电路

图3-5系统电路

第4章系统软件设计

1主程序设计

整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。

从软件的功能不同可分为两大类:

一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。

二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。

每一个执行软件也就是一个小的功能执行模块。

这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。

主程序流程见图4-1。

 

 

 

图4-1主程序流程图

主程序如下:

voidmain(void)

{

unsignedchari=0;

P2=0xef;P1=0x00;

BEEP=1;

LCD_Initial();//LCD初始化

Read_Temperature();//读取温度值

writestring(1,0,"DS18B20Alarmer");//显示"DS18B20Alarmer"

delayms(1000);//延时1S

writestring(0,0,"CurrentT=");//显示"CurrentT="writestring(0,1,"Low=10Top=30");//显示"Low=10Top=30"NG=0;

while

(1)

{

Read_Temperature();////读取温度值

Display_Temperature();//显示温度值

SetFun();Alarm();

}

}

2DS18B20初始化

DS18B20初始化流程图见图4-2。

图4-2DS18B20初始化流程图

初始化子程序:

voidds1820rst(void)/*ds1820复位*/

{

unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

3DS18B20温度传感器与单片机的接口电路

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

传感器与单片机接口如图4-3所示:

图4-3DS18B20与单片机的接口电路

uchards1820rd(void)/*读数据*/

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

unsignedintRead_Temperature(void)/*读取温度值并转换*/

{

uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)tflag=0;

else{tvalue=~tvalue+1;tflag=1;}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

CurrentT=tvalue;

return(tvalue);

}

 

4数码管显示与单片机对接

如图4-4所示。

用AT89S5的P0口作为数据端口,P2.5-P2.7为液晶显示使能控制端。

P0口接上上拉电阻,拉高信号使液晶显示。

图4-4LCD1602显示屏与AT89S52对接

LCD1602显示程序:

voidDisplay_Temperature()//显示温度

{

ucharflagdat;

disdata[0]=tvalue/1000+0x30;//百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

disdata[2]=tvalue%100/10+0x30;//个位数

disdata[3]=tvalue%10+0x30;//小数位

disdata[4]=tvalue%1+0x30;

if(tflag==0)flagdat=0x20;//正温度不显示符号

elseflagdat=0x2d;//负温度显示负号:

-

if(tflag==1)

{

writeChar(10,0,flagdat);//wr_(0x8a);wr_dat(flagdat);//显示符号位

writeChar(11,0,disdata[0]);//wr_(0x8b);wr_dat(disdata[0]);//显示百位

writeChar(12,0,disdata[1]);//wr_(0x8c);wr_dat(disdata[1]);//显示十位

writeChar(13,0,disdata[2]);//wr_(0x8d);wr_dat(disdata[2]);//显示个位

writeChar(14,0,0X2E);//wr_(0x8e);wr_dat(0x2e);//显示小数点

writeChar(15,0,disdata[3]);//wr_(0x8f);wr_dat(disdata[3]);//显示小数位

writeChar(16,0,disdata[4]);

}

else

{

writeChar(10,0,disdata[0]);//wr_(0x8a);wr_dat(disdata[0]);//显示百位

writeChar(11,0,disdata[1]);//wr_(0x8b);wr_dat(disdata[1]);//显示十位

writeChar(12,0,disdata[2]);//wr_(0x8c);wr_dat(disdata[2]);//显示个位

writeChar(13,0,0X2e);//wr_(0x8d);wr_dat(0x2e);//显示小数点

writeChar(14,0,disdata[3]);//wr_(0x8e);wr_dat(disdata[3]);//显示小数位

writeChar(15,0,disdata[4]);

}

}

5仿真结果

设置温度上限为38度,温度下限为8度。

1.如图4-5所示。

此时温度为6度,低于下限温度,蜂鸣器实现报警,加温器指示灯D3亮,表示加温器工作。

图4-5仿真图1

2.如图4-6所示。

此时温度为31度,超过上限温度,蜂鸣器实现报警,降温器指示灯D2亮,表示降温器工作。

图4-6仿真图2

3.如图4-7所示。

此时温度为26度,在所设围,蜂鸣器没有报警,说明温度正常。

图4-7仿真图3

6总程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitDQ=P2^3;//ds18b20与单片机连接口

sbitRS=P2^5;

sbitRW=P2^6;

sbitEN=P2^7;

sbitLED1=P3^6;

sbitLED2=P3^7;

uchardatadisdata[5];

uinttvalue,CurrentT=0;//温度值

uchartflag;//温度正负标志

#defineLCD_BUSP0

sbitSetKey=P2^2;

sbitUpKey=P2^1;

sbitDnKey=P2^0;

sbitBEEP=P2^4;

unsignedcharAlarmTempLow=10,AlarmTempTop=30,Set=0,NG=0;

voiddelayms(uintms)//延时xx毫秒

{

uchari;

while(ms--)

{

for(i=0;i<120;i++);

}

}

voidcommand(uint)//LCD写指令

{

RS=0;//RS为0

LCD_BUS=;//装载指令

delayms(5);//延时5ms

EN=1;//LCD使能

delayms(5);//延时5ms

EN=0;//LCD不使能

}

voidwrite_dat(uchardat)//LCD写数据

{

RS=1;//RS为1

LCD_BUS=dat;//装载数据

delayms(5);//延时5ms

EN=1;//LCD使能

delayms(5);//延时5ms

EN=0;//LCD不使能

}

voidwritestring(ucharx,uchary,uchar*s)//LCD写字符串

{

if(y==0)command(0x80+x);//表示第一行

elsecommand(0xC0+x);//表示第二行

while(*s)//判断是否字符串的结尾

{

write_dat(*s);//显示当前字符

s++;//字符串地址加1

}

}

voidwriteChar(ucharx,uchary,uchars)//LCD写字符串

{

if(y==0)command(0x80+x);//表示第一行

elsecommand(0xC0+x);//表示第二行

{

write_dat(s);//显示当前字符

}

}

voidLCD_Initial()//LCD初始化

{

EN=0;//LCD不使能

RW=0;//RW为0

command(0x38);//发送初始化指令

command(0x0c);//发送初始化指令

command(0x06);//发送初始化指令

command(0x01);//发送初始化指令

command(0x80+0x02);//发送LCD初始位置

}

/*************************DS1820程序****************************/

voiddelay_18B20(unsignedinti)//延时1微秒

{

while(i--);

}

voidds1820rst(void)/*ds1820复位*/

{

unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

uchards1820rd(void)/*读数据*/

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

unsignedintRead_Temperature(void)/*读取温度值并转换*/

{

uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)tflag=0;

else{tvalue=~tvalue+1;tflag=1;}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

CurrentT=tvalue;

return(tvalue);

}

voidDisplay_Temperature()//显示温度

{

ucharflagdat;

disdata[0]=tvalue/1000+0x30;//百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1