_nop_(); //等待一个机器周期
dq=0;
//将数据线从高拉低时即启动写时序
//利用与运算取出要写的某位二进制数据,并将其送到数据
dq=date&0x01;
线上等待DS18B20采样
}
4.3.2 温度处理程序
温度处理程序将上一把操作中读取的温度值进行转换,将二进制数转化为十进制数,然后输出数字,直接交给显示程序显示。
其流程图16所示:
输出十进制整数 图16 温度处理子程序流程图
}
date>>=1; delayus(4); dq=1;
//4us //释放数据线
delayus(4); //稍作延时,给硬件一点反应时间
初始化 等待初始化完成 启动温度测量 等待转化完成 读取高八位和低八位 处理数据 其子程序如下:
//**************做好读温度的准备**************
uint read_temp() {
17
uint g,d,m; uint c; m=1;
m=clean_ds18b20(); //初始化完成m=0 while(m);
//等待初始化完成 write_ds18b20_date(0xcc); //跳过rom write_ds18b20_date(0x44);
//启动温度测量
delayus(100); m=clean_ds18b20(); while(m);
//等待转化完成 write_ds18b20_date(0xcc); //跳过rom write_ds18b20_date(0xbe); //读数据命令 d=read_ds18b20_date();
//读低8位数据
g=read_ds18b20_date();
//读高3位数据
g<<=4; g=g+(d>>4);
//整数部分
g=g*100;
d=(d&0x0f)*0.0625*100;
c=g+d; return c;
}
4.4 键盘扫描子程序
本设计配备两个输入按键,分别可以对设定温度进行加减,此子程序用来检测按键输入。流程图17所示: 扫描按键 判断是否按下 延时判断是否按下 设定温度加一(减一)
图17 键盘扫描流程图
18
子程序如下:
//****************键盘输入********************
void keyscan(void) { }
if(key1==0) { }
if(key2==0)
//延时判断key2是否按下
//判断key2是否按下
//延时判断key1是否按下
//判断key1是否按下
delay(10); if(key1==0) { }
set++;
//设定温度加1
if(key1==100) set=18;
while(!key1);
{ }
delay(10); if(key2==0) { }
set--; if(set==0) set=18;
//设定温度减1
while(!key2);
4.5 温度比较处理子程序
温控风扇设定5个档位,根据温度的变化来变化风扇的转速。输出的型式采用高地电平的交替变换,档位越高,输出高电平的次数越多,相应的输出低点平的次数变少,反之,档位越低,输出的高电平次数越少,相应的输出的高电平的次数变多。低于设定温度时,风扇不转,大于最大挡位时满负荷运转。
流程如图18所示:
19
读取温度 是 温度比较 低于设定温度 风扇不转 否 低于设定温度+1 是 设置为1档 否 低于设定温度+3 是 设置为2档 否 低于设定温度+5 是 设置为3档 否 低于设定温度+7 是设置为4档 否
高于设定温度+7 是 设置为5档 图18 温度比较处理流程图
子程序如下:
//*************温度处理函数****************
void deal(uint temp) //温度处理
{ if(temp<=set) { //温度低于设置值
h=0; l=5;
}
else if((temp>set)&&(temp<=(set+1))) //温度低于设定值+1
{ h=1; l=4;
}
else if((temp>(set+1))&&(temp<=(set+3)))
//温度高于设定值+1,小于设定值+3
20
}
{ }
else if((temp>(set+3))&&(temp<=(set+5))) { }
else if((temp>(set+5))&&(temp<=(set+7))) { }
else if(temp>(set+7)) { h=5; l=0; }
//温度高于设定值+7
h=4; l=1;
//温度值高于设定值+5,小于设定值+7
h=3; l=2;
//温度高于设定值+3,小于设定值+5
h=2; l=3;
4.6 电机控制程序(包含红外探测)
本设计最终驱动电机的子程序,包含了红外检测。首先进行红外检测判断,若没有人,电机不转,若有人,承接上函数设定的档位,模拟PWM波输出,一次输出5个电平,1档就输出一个高电平,四个低电平,2档输出两个高电平,三个低电平,依次类推。
流程图如图19所示:
电机输输出模拟PWM波 模拟PWM高低电平次数 红外探测是否有人 电机不转 开始 图19 红外探测电机输出流程图
21