成都工业学院毕业设计(论文)
附 录1 程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit DAT = P1^3 ;
//DHT11 数据输入口
sbit QD= P2^7;
//驱动通风设备接口
sbit rs=P1^2;
sbit rw=P1^1;
sbit e=P1^0;
//LCD 控制端
sbit k1= P3^2;
//温度设置
sbit k2=P3^3;
//湿度设置
sbit k3=P3^4;
sbit k4=P3^5;
//+
//-
FLAG,k;
temp,comdata;
T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;
uchar
uchar
uchar
uchar
T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;
uchar temph,humih;
uchar m=0,n=0;
uchar code num[10]="0123456789";
uchar code str1[]="Temp:";
uchar code str2[]="Humi:";
//温度
//湿度
uchar code str3[]="Error";
成都工业学院本科毕业设计(论文)
uchar code str4[]="Success ";
uchar code str5[]="%RH";
void delay1(uint i)
//延时 1us
{
while(i--);
}
void Delay(uint j)
//延时 j/10ms
{
uchar i;
for(;j>0;j--)
for(i=0;i<27;i++);
{
}
}
void Delay_10us(void)
{
}
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
/***********LCD1602 模块**********/
void wrc(uchar com)
//1602 写指令
{
delay1(1000);
rs=0;
成都工业学院本科毕业设计(论文)
rw=0;
e=0;
P0=com;
e=1;
delay1(10);
e=0;
}
void wrd(uchar dat)
//1602 写数据
{
}
delay1(1000);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay1(10);
e=0;
void lcd_init()
// LCD1602 初始化
{
}
delay1(100);
wrc(0x38);
//使用 8 位数据,显示两行,使用 5*7 的字形
wrc(0x06);
//字符不动,光标自动向右移动一格
wrc(0x0c);
//开显示,不显示光标
wrc(0x01);
//清屏
delay1(300);
void lcd_init_display()
//LCD 初始化显示温度湿度
成都工业学院本科毕业设计(论文)
{
}
uchar i;
for(i=0;i<5;i++)
{
}
wrc(0x80+i);
//第一行第一个开始
wrd(str1[i]);
//temp:温度
for(i=0;i<5;i++)
{
}
wrc(0xc0+i);
//第二行第一个开始
wrd(str2[i]);
//humi:湿度
void display()
//显示温湿度上限
{
}
wrc(0x80+0x0c);
wrd('/');
//温度上限
wrd(num[temph/10]);
wrd(num[temph%10]);
wrd('C');
wrc(0x80+0x4c);
wrd('/');
//湿度上限
wrd(num[humih/10]);
wrd(num[humih%10]);
wrd(str5[0]);
/**********DHT11 模块************/
void COM(void)
//读一个字节
成都工业学院本科毕业设计(论文)
{
uchar i;
for(i=0;i<8;i++)
{
FLAG=2;
while((!DAT)&&FLAG++);//判断数据位是 0 还是 1
Delay_10us();
Delay_10us();
Delay_10us();
temp=0;
if(DAT)
temp=1;//如果高电平超过预定高电平值则数据位为 1
FLAG=2;
while((DAT)&&FLAG++);
//flag 先与后+1
if(FLAG==1)
break;
//超时则跳出 for 循环
comdata<<=1;
//左移 1 位,高位在前,低位在后
comdata|=temp;
}
}
void RH(void)
//dht11 读 5 个字节
{
响应
DAT=0;
//主机拉低至少 18ms
Delay(180);
DAT=1;//总线由上拉电阻拉高,释放总线,主机延时 20~40us,等待 DHT11 做出
Delay_10us();
Delay_10us();
成都工业学院本科毕业设计(论文)
Delay_10us();
Delay_10us();
DAT=1;
//主机设为输入,判断从机响应信号
if(!DAT)
//判断从机是否有低电平信号,若不响应则跳出,响应则向下运行
{
FLAG=2;
while((!DAT)&&FLAG++);//判断从机是否发出 80us 的低电平响应信号
FLAG=2;
while((DAT)&&FLAG++); //之后判断从机是否发出 80us 的高电平,如果是则
DHT11 准备开始发送数据
COM();//数据接收状态
RH_data_H_temp=comdata;
COM();
RH_data_L_temp=comdata;
COM();
T_data_H_temp=comdata;
COM();
T_data_L_temp=comdata;
COM();
checkdata_temp=comdata;
DAT=1;
temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
//数据校验
if(temp==checkdata_temp)
{
RH_data_H=RH_data_H_temp;
RH_data_L=RH_data_L_temp;
T_data_H=T_data_H_temp;
成都工业学院本科毕业设计(论文)
T_data_L=T_data_L_temp;
checkdata=checkdata_temp;
}
}
}
void key1_pros()
//温度上限按键设置
{
if(k1==0)
{
delay1(100);
if(k1==0)
{
}
m++;
if(m==2) m=0;
while(!k1);
}
if(m==1)
{
if(k3==0)
//+
{
delay1(10);
if(k3==0)
{
}
temph++;
if(temph>=50) temph=50;
while(!k3);
成都工业学院本科毕业设计(论文)
}
if(k4==0)
//-
{
delay1(10);
if(k4==0)
{
}
temph--;
if(temph<=0)temph=0;
while(!k4);
}
}
}
void key2_pros()
//湿度上限按键设置
{
if(k2==0)
{
delay1(100);
if(k2==0)
{
n++;
if(n==2)
n=0;}
while(!k2);
}
if(n==1)
{
if(k3==0)
//+