当前位置:首页 > 基于DHT11的温湿度监测电路设计 - 图文
4 软件设计
软件设计是本次设计中不可缺少的环节,贯穿了整个毕业设计,是本次设计能够完成的最重要的环节之一。 根据温湿度监控系统功能,系统软件流程图如图4-1所示:
LCD正常显示 自动检测 系统启动开始 蜂鸣器鸣叫 LCD1602初始化 读取温湿度值 N 蜂鸣器不报警 判断是否超预设? Y 蜂鸣器鸣叫报警 启动相关调控设备
图4-1 系统软件流程图
12
4.1 温湿度采集模块
DHT11传感器内含一个NTC测温和一个电阻式感湿元件,并与一个8位的高性能单片机相连接,在精确的湿度校验室中DHT11传感器进行过校准,以程序的形式校准系数储存在0TP内存中,检测信号的时候,在处理过程中传感器内部要调用这些校准系数,采用单线制的串行接口。
首先将DHT11数据端口置低电平,发送开始信号,延时20毫秒,释放数据线,用于检测低电平应答信号。若无应答信号,则EA为高电平,返回;有应答信号,等待应答信号结束,若超出检测范围,则读数据出错,退出函数;应答信号后有80us高电平,等待高电平结束后,读出温湿度值。
unsigned char DHT11_ReadTempAndHumi(void) {
unsigned char i = 0, check_value = 0,count = 0; EA = 0;
dht11 = 0; //拉低数据线大于18ms 发送开始信号 Delay_1ms(20); //需大于18 毫秒
dht11 = 1; //释放数据线,用于检测低电平的应答信号
//延时20-40us,等待一段时间后检测应答信号,应答信号是从机拉低数据线80us DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us();
if(dht11 != 0) //检测应答信号,应答信号是低电平 {
//没应答信号 EA = 1;
return ERROR; } else {
//有应答信号
while(dht11 == 0 && count++ < NUMBER); //等待应答信号结束 if(count >= NUMBER) //检测计数器是否超过了设定的范围 { dht11 = 1; EA = 1; return ERROR; //读数据出错,退出函数 }
count = 0;
dht11 = 1;//释放数据线
13
//应答信号后会有一个80us 的高电平,等待高电平结束 while(dht11 != 0 && count++ < NUMBER); if(count >= NUMBER) { dht11 = 1; EA = 1; return ERROR; //退出函数 }
//读出湿.温度值
for(i = 0; i < SIZE; i++) { value_array[i] = DHT11_ReadValue(); if(status == ERROR)//调用ReadValue()读数据出错会设定status 为ERROR { dht11 = 1; EA = 1; return ERROR; } //读出的最后一个值是校验值不需加上去 if(i != SIZE - 1) { //读出的五字节数据中的前四字节数据和等于第五字节数据表示成功 check_value += value_array[i]; } }//end for //在没用发生函数调用失败时进行校验 if(check_value == value_array[SIZE - 1]) { //将温湿度扩大10 倍方便分离出每一位 humi_value = value_array[0] * 10; temp_value = value_array[2] * 10; dht11 = 1; EA = 1; return OK; //正确的读出dht11 输出的数据 } else { //校验数据出错 EA = 1; return ERROR; }
14
}
}
4.2 显示模块
LCD1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。首先将LCD1602的各个引脚定义,然后算出指令码,将温度显示和湿度显示的子程序分别定义,以备调用。 void displayfun1() {
display_temp(); }
void displayfun2() {
display_temp1(); }
void display()
{
if(!disp_mode) }
displayfun1(); //显示正常 else
displayfun2(); //设置界面
4.3 蜂鸣器报警模块
微型计算机控制系统中,为了安全起见,对于一些重要的参数或系统,都设定有紧急状态报警系统,以便于提醒操作人员注意,或者采取紧急措施,本设计采用把计算机采集的数据进行数据处理、标度变换、数字滤波之后,与该参数上下限与设定值进行比较,不符合标准值则进行报警,否则就作为采样的正常值,进行显示[12]。
本设计采用峰鸣音报警电路。蜂鸣器额定电流≤30Ma,而对于AT89S51单片机,P3口的电流为15mA,由此可见,仅靠单片机的P3口电流是不能驱动蜂鸣器的,必须使用晶体管放大电路,为了使单片机的功率更小,所以使用PNP型晶体管,当外部环境的温度或者湿度超过预设值的时候,基级变为低电平,蜂鸣器导通鸣叫[11]。 void display() {
if((((temp_value/10)0) {beep=0;red=0;} //温度低于下限值,报警 else if(((temp_value/10)0)>=temph || ((humi_value/10)0)>=huih) {beep=0;blue=0;} //温度高于或等于上限值,报警 else {beep=1;red=1;blue=1;} 15
共分享92篇相关文档