2.7系统整体硬件电路
系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主控电路等,通过Protel99se可画出如图2-9所示的电路图[9][10][11]
1
图2-9 温度控制电路原理
三 系统软件设计
3.1 温度控制系统原理框图
主控制程序的主要是用来实时控制当前所要测控的环境温度,并读出由DS18B20测量的经过处理的当前环境的温度值,同时检查温度是否在限度之内,否则报警,同时调整温度值。其主控制程序流程图如3-1所示。
开始 发温度转换命令 发DS18B20复位命令
Y
STC89C52初始化 DS18B20初始化 发跳过读序列号命令 温度是否到达设定限度 Y 红灯亮 N 温度显示 读取操作,CRC校验 Y N 9字节完? Y CRC校验正?N 温度在显示范围内 移入温度暂存器 N 结束 结束 图3-1 主程序流程图 图3-2 读温度流程图
2
温度控制系统C语言程序
#include
sbit DQ=P2^2; //定义DS18B20总线I/O
sbit SET=P3^1; //定义选择报调整警温度上限和下限(1为上限,0为下限) sbit LING=P2^0; //定义闪烁 signed char m; //温度值全局变量 bit sign=0; //外部中断状态标志
signed char shangxian=38; //上限报警温度,默认值为38 signed char xiaxian=5; //下限报警温度,默认值为5
ucharcode LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; /*****延时子程序*****/ void Delay(uint i) {
while( i-- ); }
/*****初始化DS18B20*****/ void Init_DS18B20(void) {
unsigned char x=0; DQ=1;
Delay(8); //稍做延时 DQ=0; //单片机将DQ拉低 Delay(80); //精确延时,大于480us DQ=1; //拉高总线 Delay(14);
x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay(20); }
3
/*****读一个字节*****/ unsigned char ReadOneChar(void) {
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(4); }
return(dat); }
/*****写一个字节*****/
void WriteOneChar(unsigned char dat) {
unsigned char i=0; for (i=8; i>0; i--) { DQ=0; DQ=dat&0x01; Delay(5); DQ=1; dat>>=1; } }
void Tmpchange(void) //发送温度转换命令 {
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换 }
/*****读取温度*****/
4

