资源描述
目 录
引 言 1
1 系统的相关介绍 2
1.1 系统的目的及意义 2
1.2 设计要求 2
1.3 系统传感器DS18B20的介绍 2
1.3.1 DS18B20的主要特性 2
1.3.2 DS18B20的外形和内部结构 3
2 系统分析设计 4
2.1 温度控制系统结构图及总述 4
2.2 系统显示界面方案 4
2.3 系统输入方案 5
2.4系统的功能 5
3 相关软件编译知识介绍 5
3.1 C语言简介 5
3.1.1 C语言的优点 5
3.1.2 C语言缺点 6
3.2 Keil简介 6
3.2.1 系统概述 6
3.2.2 Keil C51单片机软件开发系统的整体结构 7
4系统流程图设计 7
4.1主程序流程图 7
4.2 DS18B20控制程序流程图 8
4.2.1 DS18B20 复位程序流程图 9
4.2.2 DS18B20写数据程序流程图 9
4.2.3 DS18B20读数据程序流程图 10
4.3 温度读取及转换程序流程图 12
4.4 MAX7219驱动程序流程图 13
4.4.1 MAX7219写入一个字节数据程序流程图 13
4.4.2 MAX7219写入一个字数据程序流程图 15
4.5 数码管温度显示程序流程图 16
4.6 按键中断服务程序流程图 17
5 电路仿真 19
5.1 PROTEUS软件介绍 19
5.2 温度控制系统PROTEUS仿真 19
6总结 20
7参考文献 21
附录1 源程序代码 22
引 言
信息采集(即传感器技术)、信息传输(通信技术)、信息处理(计算机技术)。传感器属于信息技术的前沿尖端产品,尤其是温度传感器被广泛用于工农业生产、科学研究和生活等领域,数量高居各种传感器之首。近百年来,温度传感器的发展大致经历了以下三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器/控制器;(3)智能温度传感器。目前,国际上新型温度传感器正从由集成化向智能化、网络化的方向发展。
下面介绍的就是两种最常见的温度传感器:
(1)集成温度传感器
模拟集成温度传感器。集成传感器是将温度传感器集成在一个芯片上、可完成温度测量及模拟信号输出功能的专用IC。模拟集成温度传感器的主要特点是功能单一(仅测量温度)、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等,适合远距离测温、控温,不需要进行非线性校准,外围电路简单。它是目前在国内外应用最为普遍的一种集成传感器,典型产品有AD590、AD592、TMP17、LM135等。某些增强型集成温度控制器(例如TC652/653)中还包含了A/D转换器以及固化好的程序,这与智能温度传感器有某些相似之处。但它自成系统,工作时并不受微处理器的控制,这是二者的主要区别。
(2)智能温度传感器
智能温度传感器(亦称数字温度传感器)是20世纪90年代中期微电子技术、计算机技术和自动测试技术的结晶。智能温度传感器内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。
1 系统的相关介绍
1.1 系统的目的及意义
温度检测控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B20进行范围的温度检测。因此温度监测是生产自动化的重要任务。因而本设计具有非常实际的生产意义。
1.2 设计要求
本设计是基于单片机STC89C52的温度控制。它实现的是温度的监测和控制功能。 可设置报警温度。本设计用DS18B20传感器来检测温度,LED用于显示。MAX7219用来驱动数码显示。设计先通过keil和proteus来联合仿真,然后焊接实物。
具体设计要求如下:
(1) 使用STC89C52控制器和DS18B20温度传感器,实现温度的检测和显示;
(2) 设置默认报警温度为500C,并且能够通过按键设置调高调低报警温度;
(3) 当温度高于报警温度时报警灯亮,低于报警温度时控制电阻丝加热;
(4) 四位数码管能通过按键交换显示实测温度和报警温度。
1.3 系统传感器DS18B20的介绍
1.3.1 DS18B20的主要特性
(1) 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。
(2) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3) DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内.
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
(6)可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以"一 线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。
1.3.2 DS18B20的外形和内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图1.3.2.1:
图1.3.2.1 DS18B20的外形及管脚排列
2 系统分析设计
2.1 温度控制系统结构图及总述
本设计实际上是模仿饮水机的工作原理。它是采用DS18B20温度传感器测试环境温度,经过CPU数据处理,用LED数码管来显示温度。该设计可设置预期温度。当温控开关打开时,若测得环境温度低于设定温度,则继电器吸合,启动电热丝工作;若测得环境温度高于设定温度,则继电器释放,电热丝停止工作。
时钟电路
按键设
定电路
温度传感器电路
LED显示电路
报警信号灯控制电路
继电器控制电路
单片机
(89C52)
主控制器
图2.1.1系统总框图
2.2 系统显示界面方案
该系统要求完成温度的显示以及按键操作时的实时显示功能。基于上述原因,本次设计考虑了两种方案:
方案一:完全采用LCD液晶显示。这种方案显示精确,可方便的显示各种英文字符,温度符号,正负号等,但实现复杂,且须完成大量的软件工作。
方案二:完全采用数码管显示。这种方案优点是实现简单。缺点是功能较少,只能显示有限的符号和数码字符。根据本设计的要求,方案二已经满足了要求,所以本次设计采用方案二以实现系统的显示功能。
2.3 系统输入方案
这里同样讨论了两种方案:
方案一:采用8155扩展I/O口、键盘及显示等。该方案的优点是使用灵活可编程,并且有RAM及计数器。若用该方案,可提供较多I/O口,但操作起来稍显复杂。
方案二:直接在I/O口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的端口资源还比较多。
由于该系统是对设定报警温度的控制,只需用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用,故选择方案二。
2.4系统的功能
能完成对系统温度的监测及控制,并且能够对被控现场的温度进行智能调节,以保
持被控现场温度基本不变。该系统如果应用于现实生活具有很强的实用意义。
3 相关软件编译知识介绍
3.1 C语言简介
C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言 。具体应用比如单片机以及嵌入式系统开发。
3.1.1 C语言的优点
C语言现在被广泛应用于单片机以及嵌入式系统的开发,它具有如下一些优点:
(1) 简洁紧凑、灵活方便;
(2) 运算符丰富;
(3) 数据类型丰富 ;
(4) C是结构式语言;
(5) 语法限制不太严格,程序设计自由度大;
(6) 允许直接访问物理地址,对硬件进行操作;
(7) 生成目标代码质量高,程序执行效率高;
(8) 适用范围大,可移植性好 。
3.1.2 C语言缺点
C语言是一种较汇编语言高级的语言,但相对于汇编这种直接面向机器的语言来说,它的处理效率较会变低。
3.2 Keil简介
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
3.2.1 系统概述
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。
3.2.2 Keil C51单片机软件开发系统的整体结构
C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
4系统流程图设计
软件总体设计主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的初始化,发送显示数据,同时对键盘进行扫描,等待外部中断,以及根据所需要的功能进行相应的操作。
4.1主程序流程图
本设计是模拟温度控制系统,主程序通过调用读取温度子程序和显示子程序,来实时扫描并显示系统温度;并通过调用温度控制子程序将测得的温度与系统所设的报警温度比较进而对温度进行控制。通过扫描中断口检查是否有按键按下,调用相应的按键扫描子程序来进行对应的设置。主程序如下:
void main(void)
{
EA=1; //开中断总开关
EX0=1; //允许INT0中断
IT0=1; //下降沿产生中断
text_rst(); //第一次使用数码管测试
while(1)
{
T_Current=GetTemperature(); //温度值传给T_time
temperature_display(T_Current); //显示温度
if(T_Current<T_Original) //判断继电器是否工作,当温度小于T0 时,继电器导通
JIDIANQI=1,alarm=1;
else
JIDIANQI=0,alarm=0;
delayms(30); //延时三秒,即每三秒扫描一次,显示一次
}
}
开始
中断设置
开中断
LED显示
读取当前实际温度值
显示读取的温度值
温度控制
结束
图4.1.1主程序流程图
4.2 DS18B20控制程序流程图
DS18B20控制程序包括DS18B20复位程序,DS18B20写数据程序以及DS18B20读数据程序。
4.2.1 DS18B20 复位程序流程图
具体程序如下:
ds18b20rst(void) //DS18B20复位初始化
{
unsigned char x=0;
DQ = 1;
delay(16);
DQ = 0;
delay(160);
DQ = 1;
delay(28);
x=DQ;
delay(40);
}
开始
DQ=1
延时
DQ=0
延时(延时大于480us)
DQ=1
延时
结束
图4.2.1 DS18B20复位程序流程图
4.2.2 DS18B20写数据程序流程图
DS18B20写程序流程图如图4.2.2所示。
DS18B20写数据程序如下:
ds18b20write(unsigned char dat) //写DS18B20的 子程序
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(10);
DQ = 1;
dat>>=1;
}
}
开始
循环控制变量i=8
i=0? Y
N
DQ=dat&0x01
延时
DQ=1
dat>>=1
结束
图4.2.2 DS18B20写数据程序流程图
4.2.3 DS18B20读数据程序流程图
DS18B20读数据程序流程图如图4.2.3所示。
DS18B20读数据程序如下:
ds18b20read(void) //读DS18B20的程序
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay(8);
}
return(dat);
}
开始
循环控制变量i=8
dat=0
i=0? Y
N
DQ=0;dat>>1;DQ=1
Y DQ=1?
N
dat|=0x80
延时
返回dat 值
结束
图4.2.3 DS18B20读数据程序流程图
4.3 温度读取及转换程序流程图
温度读取及转换流程图如图4.3.1所示。
温度读取及转换具体程序如下:
GetTemperature(void) //从DS18B20中读出两个字节的温度数据
{
uchar symbol;
unsigned int temperature;
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
ds18b20rst();
ds18b20write(0xCC);
ds18b20write(0x44);
ds18b20rst();
ds18b20write(0xCC);
ds18b20write(0xBE);
a=ds18b20read();
b=ds18b20read();
t=b;
t<<=8; //进行精度转换
t=t|a;
if(t<0x0fff)symbol=0;
else
{
t=~t+1;
symbol=1;
}
temperature=t*0.625;
if(symbol==1) temperature=-temperature;
return(temperature);
}
开始
DS18B20初始化
启动温度转换
读取当前实际温度值
处理读取的温度值
Y 温度大于0? N
符号标志为0 符号为1,按正温度处理
返回处理后的温度值
结束
图4.3.1 温度读取及转换程序流程图
4.4 MAX7219驱动程序流程图
4.4.1 MAX7219写入一个字节数据程序流程图
写入一个字节数据程序流程图如图4.4.1所示。
开始
循环控制变量i=8
code1=ch&0x80
ch=ch<<1
code1=1? Y DIN=1,给上升沿
N
DIN=0,给上升沿
结束
图4.4.1 MAX7219写入一个字节数据程序流程图
具体程序如下:
void write_byte(uchar ch)
{
uchar i,code1;
_nop_();
_nop_();
_nop_();
for(i=0;i<8;i++)
{
code1=ch&0x80;
ch=ch<<1;
if(code1)
{
DIN=1;
CLK=0;
CLK=1;
}
else
{
DIN=0;
CLK=0;
CLK=1;
}
}
}
4.4.2 MAX7219写入一个字数据程序流程图
写入一个字节数据程序流程图如图4.4.1所示。
开始
LOAD=0
延时
写地址
延时
写数据
延时
LOAD=1
结束
图4.4.2 MAX7219写入一个字数据程序流程图
具体程序如下:
void write7219(uchar addr,uchar number)
{
LOAD=0;
_nop_();
_nop_();
_nop_();
write_byte(addr);
_nop_();
_nop_();
_nop_();
write_byte(number);
_nop_();
_nop_();
_nop_();
LOAD=1;
}
4.5 数码管温度显示程序流程图
数码管温度显示程序流程图如图4.5.1所示。
具体程序如下:
temperature_display(int temperature_x)
{
uchar symbol;
if(temperature_x<0)
{
symbol=1;
temperature_x=-temperature_x;
}
else symbol=0;
switch(symbol)
{
case 0:DisBuffer[0]=0x0f;break;
case 1:DisBuffer[0]=0x0a;break;
}
DisBuffer[1]=temperature_x/100;
DisBuffer[2]=(temperature_x%100)/10;
DisBuffer[2]=DisBuffer[2]|0x80;
DisBuffer[3]=temperature_x%10;
if(DisBuffer[1]==0x00)
{
DisBuffer[1]=0x0f;
}
write7219(0x01,DisBuffer[0]);
write7219(0x02,DisBuffer[1]);
write7219(0x03,DisBuffer[2]);
write7219(0x04,DisBuffer[3]);
}
开始
温度小于0? Y symbol=1
N
symbol=0
显示符号位
显示十位
显示个位
显示小数位
结束
图4.5.1 数码管温度显示程序流程图
4.6 按键中断服务程序流程图
按键中断服务程序流程图如图4.6.1所示。
具体程序如下:
int0() interrupt 0 using 0
{
temperature_display(T_Original);
key_v = 0x07;
for(;;)
{
if(key())
{
delayms(10);
if(key())
{
key_v = key_s;
if((key_v & 0x01) == 0)
{
T_Original=10+T_Original;
temperature_display(T_Original);
}
else if((key_v & 0x02) == 0)
{
T_Original=T_Original-10;
temperature_display(T_Original);
}
else if((key_v & 0x04) == 0)
{
goto EXIT;
}
}
}
}
EXIT:temperature_display(T_Current);
}
中断入口
K1键按下? Y 报警温度加一,
显示报警温度
N
K2键按下? Y 报警温度减一,
显示报警温度
N
K3键按下
退出按键程序,显示当前温度
中断返回
图4.6.1 按键中断服务程序流程图
5 电路仿真
5.1 PROTEUS软件介绍
Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。
5.2 温度控制系统PROTEUS仿真
系统仿真图如图5.2.1所示。
图5.2.1 系统仿真图
6总结
用单片机实现系统温度控制,可以使我们的生活方
展开阅读全文