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

上传人:b****6 文档编号:8836416 上传时间:2023-02-02 格式:DOCX 页数:22 大小:1.20MB
下载 相关 举报
基于单片机的温度控制系统的设计.docx_第1页
第1页 / 共22页
基于单片机的温度控制系统的设计.docx_第2页
第2页 / 共22页
基于单片机的温度控制系统的设计.docx_第3页
第3页 / 共22页
基于单片机的温度控制系统的设计.docx_第4页
第4页 / 共22页
基于单片机的温度控制系统的设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

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

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

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

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

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

1•设计要求

要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。

具体设计要求如

下:

1数码管或液晶显示屏显示室内当前的温度;

2在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键;

3DS18B20温度采集;

4超过设置值的±5C时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。

2.方案论证

根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单,我们学习中接触到的51系列单片机完全可以实现上述功能,因此可以选用AT89C51单片机。

度采集直接可以用设计要求中所要求的DS18B20。

报警和指示模块中,可以选用3种不同颜色的LED灯作为指示灯,报警鸣笛采用蜂鸣器。

显示模块有两种方案可供选择。

方案一:

使用LED数码管显示采集温度和设定温度;

方案二:

使用LCD液晶显示屏来显示采集温度和设定温度。

LED数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。

LCD显示屏可识别性较好,背光亮度可调,而且比LED数码管显示更多字符,但是编程要求比LED数码管要高。

综合考虑之后,我选用了LCD显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的对比。

LCD显示模块可以选用RT1602C。

3•硬件设计

根据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD显示模块、报警与指示模块。

其相互联系如下图1所示:

单片机时钟电路

形成单片机时钟信号的方式有内部

时钟方式

和外部时钟方式。

本次设计米用内部时钟

图2所示。

单片机内部有一个用于构成振荡器

反相放大器,引脚XTAL1和XTAL2分

大器的输入端和输出端,其频率范围为

经由片外晶体振荡器或陶瓷振荡器与两

容一起形成了一个自激振荡电路,为单片

钟源。

复位电路

复位是单片机的初始化操作,其作用

系统中的其他部件都处于一个确定的初

这个状态开始工作,以防止电源系统不稳

工作不正常。

在系统中,有时会出现工作

况,为了从异常状态中恢复,同时也为了

便,需要设计一个复位电路。

19

20

X2

\1

方式,女口

XTALCl22pF

GND

图2单片机内部时钟方式电路

是使CPU和

始状态,并从

定造成CPU

不正常的情

系统调试方

单片机的复位电路有上电复位和按键复位两种形式3单片机按设计要求路

位键,因此本次设计采用按键复位,如图

运行时用户的按键复位功能。

键盘接口模块

本次设计需要的按键有4个,除去

按键外,还有3个功能按键,因此选择

盘。

如图4,将键盘直接与单片机P1

连。

3个键设计思路如下:

当按下S1

进入上下限警戒值调整状态;当第一次

时,进行上限警戒值设定,当第二次按

进行下限警戒值设定,当第三次按下S1

正常工作状态。

在警戒值调整状态下,

的高增益

别为此放

~12MHz,

个匹配电

机提供时

需要有启动

3。

复位电路主要完成系统的上电复位和系统在

图4键盘接口模块

P10

P11

P12

P13

P14

m<

一个复位

独立式键

口的、、相

键时,系统

按下S1键

下S1键时,

键时,回到

按下S2键,

 

上下限警戒值加1按下S3键,上下限警戒值减1正常工作状态下,按下S2和S3键无作用。

温度采集模块

本次设计中的温度传感器使用的是DALLAS公司的单总线数字温度传感器DS18B20,

这是一种常用的温度传感器,具有体积小、硬件开销低、抗干扰能力强、精度高的特点。

DS18B20采用独特的一线接口,具有只需要一条口线通信多点的能力,简化了分布式

温度传感应用,无需外部元件。

可用数据总线供电,电压范围为至,测量温度的范围为-55C

至+125C,在-10C至+85C范围内精度为土C。

温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,

用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、温度计、或任

信,所以

与DS18B20只有一个一条口线连接。

因为每一个DS18B20的包含一个独特的序号,多个

DS18B20可以同时存在于一条总线,这使得温度传感器放置在许多不同的地方。

它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。

图5DS18B20封装及引脚

DS18B20的核心功能是它的直接读数字的温度传感器。

温度传感器的精度为用户可编程的9、10、11或12位,分别以C,C,C和C增量递增。

在上电状态下默认的精度为12位。

DS18B20启动后保持低功耗等待状态;当需要执行温度测量和AD转换时,总线控

制器必须发出[44h]命令。

在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。

当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”,DS18B20正在温度转换中返回0,转换结束返回1。

如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。

在硬件上,DS18B20与单片机的连接有两种方法:

一种是VDD接外部电源,GND接地,DQ与单片机的I/O口相连;另一种是用寄生电源供电,此时,VDD、GND接地,DQ

在本次设计中,使用RT1602C字符型液晶显示模块(LCM)来设计当前温度和上下限警戒值的显示电路。

RT1602C字符型液晶显示模块是16字X2行的采用5X7点阵图形来显示字符的液晶

显示器,采用标准的16脚接口,其引脚定义如图7所示

引脚号

引脚名

说明

引脚号

引脚名

说明

1

GND/Vss

电源地

7

D0

2

Vdd

+5V电源

8

D1

3

Vl

液晶显示偏压信号

9

D2

4

RS

数据/命令控制,H/L

10

D3

8位双向数据线

5

R/W

读/写控制,H/L

11

D4

6

E

使能端

12

D5

15

BLA

背光源正极

13

D6

16

BLK

背光源负极

14

D7

图7RT1602C的引脚定义

RT1602C的内部结构可以分为3个部分:

LCD控制器、LCD驱动器、LCD显示器,

其中LCD控制器采用的是HD44780。

RT1602C与单片机的连线如图8所示

LCD1602

Qu・

GND

vcc

8RT1602C与单片机连线

LCM的数据总线与单片机的P0口通过一个上拉电阻排相连,LCM的三条控制线RS、

3引脚使

RW、EN分别与单片机的I/O口、、相连,第1、2引脚分别与地、电源相连,第

用一个10kQ的可调电阻对显示屏的明亮进行调整。

报警与指示模块

黄色发光二极管。

整个报警

灯分别接单片机、、口,电平拉低时点亮LED,蜂鸣器电路接单片机的口,电平拉高时蜂

鸣器响。

至此便完成了整个硬件电路的设计工作,整个系统的原理图见附录二,系统I/O分配

表如下:

I/O口

功能说明

I/O口

功能说明

LCM数据口

LCM读/写控制

键盘输入

LCM使能

DS18B20温度米集

LED信号输出

LCM数据/命令控制

报警信号输出

4•软件设计

单片机应用系统的设计中,软件设计占有重要的位置。

在本次设计中,根据功能要求,可以把系统程序划分为5个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其它子程序模块,如图10所示。

主程序设计

主程序的内容包括单片机初始化、相关部件初始化和一些其它子程序的调用等。

主程

开始

序清单如下,程序流程图如图11所示。

/************^主程^序************/

(2)

点击运行按钮开始仿真,初始上下限值为90C和10C,当前温度为25C,当前模式为N正常工作,绿灯亮,蜂鸣器不响,如图16。

(3)按下S1键,进入上限警戒值设置模式H,此时按S2、S3键可以进行上限值设定,同时温度正常显示,设置上限值80C,如图17。

(4)再次按下S1键,进入下限警戒值设置模设定仿真图匕时按S2、

 

图19下限报警仿真图

(6)

升高温度,超过上限值5C以上时,黄灯亮,蜂鸣器报警,如图20。

(7)按下S4键,单片机复位。

图20上限报警仿真图

在本次仿真中,可以看出,本次设计的硬件电路和软件程序均能成功仿真出来,设计要求的各种功能均已达到

6•总结

本次课程设计为期一周,到此已全部结束。

回想一周中的设计过程,我深深感觉收获良多。

由于从前只是在理论上学习了单片机以及各种其它知识,即使是实验也只是按照实验指导书进行操作,并没有实际的独立设计一个系统,因此在刚开始接触本次课程设计时,有一点无从下手的感觉。

后来通过查阅相关资料,渐渐开始了解课程设计的一般过程,开始明白一些元器件的相关作用与编程实现方法,并在此期间通过不断深入的学习和锻炼,开始渐渐能熟练运用和熟练编程起来。

通过本次计算机控制技术的课程设计,我更深层次的把理论知识和实际设计结合在一起,锻炼了我的综合运用所学的专业基础知识和解决实际工程问题的能力。

同时也提升了我查阅文献资料、设计手册、设计规范以及电脑制图等其他知识能力水平。

对各种系统的适用条件,各种设备的选用标准,各种管道的安装方式,我都是随着设计的不断深入而逐渐熟悉并学会应用的。

并且,通过对整体的掌控,对局部的取舍,对细节的斟酌处理,以及绘图的技巧都使我在设计领域的能力得到了锻炼,得到了较丰富经验。

最后,通过这次

的课程设计,我也深刻地认识到,只有将书本与具体的实践相结合,才会有真正的收获,才能巩固自己的所学,认识到自己的不足,同时我们也要有一种积极学习的态度,时代在进步我们也要跟着时代前进,要不断学习,不断创新,用自己的知识与行动来证明自己的价值。

本次课程设计以单片机为核心,介绍了用DS18B20温度传感器进行温度采集,并将其传输给AT89C51单片机进行处理再送到LCD显示屏显示。

在此期间可以通过按键进行上下限警戒值设置,通过LED和蜂鸣器进行指示和报警。

本文是采用模块化的方式进行叙述,对各模块的设计进行了比较详细地阐述,并着重分析硬件搭建过程和系统软件的设计过程,使用单片机C语言进行程序没计。

本次设计的基于DS18B20的温度测量系统是一个分布式的温度测量系统,它可以远程对温度实现测量和监控,广泛应用于电力工业、煤矿、森林、火灾、高层建筑等场合。

本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度、水池等的监控。

当然,本次设计还存在一些不足,例如在本次设计中,由于时间较短,警戒值只是在1~99°C之间,没有能够扩展到负温度和100C以上;在本次设计中只是用了4个独立按键,实现简单的上下限警戒值设定,操作较麻烦,如果能够设计出多按键的矩阵式键盘,则能够对温度进行很方便的设定。

此外如果把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具有更大的应用价值。

7.参考文献

[1]潘新民,王燕芳•微型计算机控制技术[M].北京:

电子工业出版社,2014

[2]王迎旭.单片机原理与应用[M].北京:

机械工业出版社,2013

[3]康华光.电子技术基础[M].北京:

高等教育出版社,2013

[4]周正华,唐宁RT1602C与FPGA接口技术[J].中国科技信息,2008(10)

⑸廖琪梅,韩彬等•基于DS18B20的温度测量仪[J].国外电子元器件,2008

(2)

附录一:

程序清单

#include<>

#include<>

#include<>

#defineucharunsignedchar#defineuintunsignedint#defineBUSY0x80voidDelay(uint);

voidinit_LCD(void);

voidLCD_Command(uchar,uchar);

voidLCD_Data(uchar);

voidReadyLCD(void);voidDisplay_char(uchar,uchar,uchar);voidDisplay_str(uchar,uchar,ucharcode*Data);voidChange(void);

voidDisplay(void);voidinit_18B20(void);ucharRead_18B20(void);voidWrite_18B20(uchar);voidRead_temp(void);voidDelay_us(uchari);

voidKey_scan(void);

voidKey_set(void);voidKey_inc(void);voidKey_dec(void);

voidAlarm(void);

sbitLCD_RS=P2P;sbitLCD_RW=P2a;sbitLCD_EN=P2A2;

sbitDQ=P1A7;

sbitNormal=P2A4;

sbitAlarm_H=P2A5;

sbitAlarm_L=P2A6;sbitAlarm_BEEP=P2A7;

ucharSet_flag=0;ucharTemp_mea,Temp_set1,Temp_set2;

ucharTemp_high_1,Temp_high_2;ucharTemp_low_1,Temp_low_2;ucharTemp_true_1,Temp_true_2;

externucharcodestr0[]={"High:

CLow:

C"};externucharcodestr1[]={"Mode:

Deg:

C"};

externucharcodestr2[]={"Hellow!

!

"};

externucharcodeexternucharcodemode[]={"NHL"};

主程序

*******

*/

voidmain(void)

{

P1=0xff;

P2|=0x70;

P2&=0x7f;

Temp_set仁90;//上限报警温度初值90Temp_set2=10;〃下限报警温度初值10Delay(500);〃延时500ms启动init_LCD();//LCD初始化

init_18B20();//DS18B20初始化

Display_str(0,0,st⑵;〃开机界面

Display_str(0,1,st⑵;〃开机界面

Delay(2000);

Display_str(0,0,str0);

Display_str(0,1,str1);

while

(1)

{

Key_scan();〃扫描键盘

Read_temp();〃读取温度Change();

Display。

;//显示

Alarm();〃指示灯与报警程序

Delay(1000);

}

}

voidDelay(uintk)

{

uinti,j;

for(i=0;i

{

for(j=0;j<60;j++)

{

voidinit_LCD(void)

{

P0=0;

Delay(15);

LCD_Command(0x38,0);

Delay(5);

LCD_Command(0x38,0);

Delay(5);

LCD_Command(0x38,0);

Delay(5);

LCD_Command(0x38,1);//8位数据传送,2行显示,5*7字形

LCD_Command(0x08,1);/关闭显示

LCD_Command(0x01,1);/清屏

LCD_Command(0x06,1);/显示光标右移设置

LCD_Command(0x0c,1);/显示屏打开,光标不显示不闪烁

voidLCD_Command(ucharLC,ucharBC)

{

if(BC)ReadyLCD();

P0=LC;

LCD_RS=O;选中指令寄存器

LCD_RW=O;/写模式

LCD_EN=1;

_nop_();

_nop_();

_nop_();

LCD_EN=O;

/********

写显示数据到LCD********/

voidLCD_Data(ucharLD)

{

ReadyLCD();

PO=LD;

LCD_RS=1;选中数据寄存器

LCD_RW=O;/写模式

LCD_EN=1;

_nop_();

_nop_();

_nop_();

LCD_EN=O;

 

检测LCD忙状态********/

voidReadyLCD(void)

{

PO=Oxff;

LCD_EN=1;

LCD_RS=0;

LCD_RW=1;

_nop_();

while(P0&BUSY)

{

LCD_EN=0;

_nop_();

_nop_();

LCD_EN=1;

_nop_();

_nop_();

}

LCD_EN=0;

}

/********

显示一个字符********/

voidDisplay_char(ucharX,ucharY,ucharData)

{

Y&=0x01;

X&=0x0f;

if(Y)X|=0x40;

X|=0x80;

LCD_Command(X,0);

LCD_Data(Data);

/********

显示一串字符********/

voidDisplay_str(ucharX,ucharY,ucharcode*Data)

{

ucharList=0;

Y&=0x01;

X&=0x0f;

while(X<16)

{

Display_char(X,Y,Data[List]);

List++;

X++;

}

}

voidChange(void)

{

Temp_high_1=Temp_set1/10;

Temp_high_2=Temp_set1%10;

Temp_low_1=Temp_set2/10;

Temp_low_2=Temp_set2%10;

Temp_true_1=Temp_mea/10;

Temp_true_2=Temp_mea%10;

voidDisplay(void)

{

Display_char(5,0,str3[Temp_high_1]);

Display_char(6,0,str3[Temp_high_2]);

Display_char(13,0,str3[Temp_low_1]);

Display_char(14,0,str3[Temp_low_2]);

Display_char(5,1,mode[Set_flag]);

Display_char(13,1,str3[Temp_true_1]);

Display_char(14,1,str3[Temp_true_2]);

voidinit_18B20(void)

{

ucharx=0;

DQ=1;//DQ复位

Delay_us(4);〃延时

DQ=O;〃将DQ拉低

Delay_us(250);〃精确延时大于480us

DQ=1;〃拉高总线

Delay_us(40);

x=DQ;

Delay_us(20);

}

/********从DS18B20读取一个字节数据********/ucharRead_18B20(void)

{

uchari=0;

uchardat=0;

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

{

DQ=0;

_nop_();dat>>=1;

DQ=1;

Delay_us

(1);

if(DQ)dat|=0x80;

Delay_us(10);

}

return(dat);

voidWrite_18B20(uchardat)

{

uchari=0;

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

{

DQ=0;

_nop_();

DQ=dat&0x01;

Delay_us(10);

DQ=1;

dat>>=1;

Delay_us(10);

}

}

/********从DS18B20读取温度********/

voidRead_temp(void)

{

uchara=0;

ucharb=0;

uchart=0;

init_18B20();

Write_18B20(0xcc);

Write_18B20(0x44);

init_18B20();

Write_18B20(0xcc);

Write_18B20(0xbe);

a=Read_18B20();

b=Read_18B20();

t=b;

t<<=8;

 

t=t|a;

Temp_mea=t*;

voidDelay_us(uchari)

{

while(--i);

}

/********

键盘扫描程序********/

voidKey_scan(void)

{

uchartemp;

P1=0xff;

if(P1!

=0xff)

{

Delay(20);〃延时消抖

if(P1!

=0xff)

{

temp=P1;

switch(temp)

{

case0xfe:

Key_set();break;//按下,功能选择case0xfd:

Key_inc();break;//按下,数字加一case0xfb:

Key_dec();break;//按下,数字减一default:

break;

}

}

}

voidKey_set(void)

{

Set_flag++;

if(Set_flag>=3)//Set_flag=1,设定上限值

Set_flag=0;//Set_flag=2,设定下限值

/********

按键加一子程序********/

voidKey_inc(void)

{

switch(Set_flag)

{

case1:

Temp_set1++;if(Temp_set1>=99)Temp_set1=99;break;

case2:

Temp_set2++;if(Temp_set2>=Temp_set1)Temp_set2=Temp_set1;break;default:

break;

}

}

voidKey_dec(void)

{

//Delay(150);

switch(Set_flag)

{

case1:

Temp_set1--;

if(Temp_set1<=Temp_set2)Temp_set1=Temp_set2;break;

case2:

Temp_set2--;

if(Temp_set2<=1)Temp_set2=1;break;

default:

break;

/********

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

当前位置:首页 > 高等教育 > 农学

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

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