长春网站建设与健,厦门建设局地址,wordpress arduino,建设网站东莞一、系统方案 1、本设计采用51单片机作为主控器。 2、DHT11采集温度度#xff0c;支持3路温度度#xff0c;液晶1602显示。 3、按键设置报警阀值。 4、系统声光报警。
二、硬件设计 原理图如下#xff1a;
三、单片机软件设计 1、首先是系统初始化 //初始化LCD*********…一、系统方案 1、本设计采用51单片机作为主控器。 2、DHT11采集温度度支持3路温度度液晶1602显示。 3、按键设置报警阀值。 4、系统声光报警。
二、硬件设计 原理图如下
三、单片机软件设计 1、首先是系统初始化 //初始化LCD************************************************************ void LCD_Initial() { E0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 }
2、液晶1602显示程序 //液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) { if(y0) LCD_Write(LCD_COMMAND,0x80|x); if(y1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); }
//将字符输出到液晶显示 void Print(unsigned char *str) { while(*str!‘\0’) { LCD_Write(LCD_DATA,*str); str; } } 3、按键程序 void key()// 按键扫描 { if (k10) //设置调整按键检测 { delay(10); if (k10) { presskeynum;//切换显示界面 if(presskeynum5) presskeynum0; while(k10); LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 } } if(presskeynum1)//温度上限设置 { if(k20)// 加 { delay(10); temp_high; if (temp_high99) temp_high0; while(k20); //加上此句必须松按键才处理 } if(k30)//减 { delay(10); temp_high–; if (temp_high0) temp_high99; while(k30); //加上此句必须松按键才处理 } } if(presskeynum2)//温度下限设置 { if(k20)// 加 { delay(10); temp_low; if (temp_low99) temp_low0; while(k20);}if(k30){delay(10);temp_low--;if (temp_low0)temp_low99;while(k30);}} if(presskeynum3)//湿度上限设置 { if(k20)// 加 { delay(10); humi_high; if (humi_high99) humi_high0; while(k20);}if(k30){delay(10);humi_high--;if (humi_high0)humi_high99;while(k30);}} if(presskeynum4)//湿度下限设置 { if(k20)//加 { delay(10); humi_low; if (humi_low99) humi_low0; while(k20);}if(k30)// 减{delay(10);humi_low--;if (humi_low0)humi_low99;while(k30);}} if(k40)// 退出键 { delay(10); if(k40) { while(k40); presskeynum0; LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏}} } 4、核心算法程序 void COM(void)//读DHT11一个字节 { uchar i; for(i0;i8;i) { U8FLAG2; while((!DATA)U8FLAG); Delay_10us(); Delay_10us(); Delay_10us(); U8temp0; if(DATA)U8temp1; U8FLAG2; while((DATA)U8FLAG); if(U8FLAG1)break; U8comdata1; U8comdata|U8temp; } }
//-------------------------------- //-----温湿度读取子程序 ------------ //-------------------------------- //----以下变量均为全局变量-------- //----温度高8位 U8T_data_H------ //----温度低8位 U8T_data_L------ //----湿度高8位 U8RH_data_H----- //----湿度低8位 U8RH_data_L----- //----校验 8位 U8checkdata----- //----调用相关子程序如下---------- //---- Delay();, Delay_10us();,COM(); //-------------------------------- uchar RH(void) { DATA0; //主机拉低18ms Delay1(180); //原来为5 DATA1; //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); DATA1; //主机设为输入 判断从机响应信号 if(!DATA) //判断从机是否有低电平响应信号 如不响应则跳出响应则向下运行 { U8FLAG2; while((!DATA)U8FLAG); //判断从机是否发出 80us 的低电平响应信号是否结束 U8FLAG2;while((DATA)U8FLAG); //判断从机是否发出 80us 的高电平如发出则进入数据接收状态COM(); //数据接收状态U8RH_data_H_tempU8comdata;COM();U8RH_data_L_tempU8comdata;COM();U8T_data_H_tempU8comdata;COM();U8T_data_L_tempU8comdata;COM();U8checkdata_tempU8comdata;DATA1;U8temp(U8T_data_H_tempU8T_data_L_tempU8RH_data_H_tempU8RH_data_L_temp); //数据校验if(U8tempU8checkdata_temp){U8RH_data_HU8RH_data_H_temp;U8RH_data_LU8RH_data_L_temp;U8T_data_HU8T_data_H_temp;U8T_data_LU8T_data_L_temp;U8checkdataU8checkdata_temp;}return 1;
}
else //传感器不响应
{return 0;
}} 四、 proteus仿真设计 Proteus软件是一款应用比较广泛的工具它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况这样就可以通过软件仿真来验证我们设计的方案有没有问题如果有问题可以重新选择器件连接器件直到达到我们设定的目的避免我们搭建实物的时候如果当初选择的方案有问题我们器件都已经焊接好了再去卸载下去再去焊接新的方案的器件测试这样会浪费人力和物力也给开发者带来一定困惑Proteus仿真软件就很好的解决这个问题我们在设计之初就使用该软件进行模拟仿真测试选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸焊接实物调试最终完成本设计的作品。