北华航天工业学院毕业论文
//----------------IO口定义区--------------------// //----------------------------------------------// sbit DQ = P3^0 ;
//----------------------------------------------//
//----------------定义区--------------------// //----------------------------------------------// U8 U8FLAG,k; U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8
U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数 U8 indata[5]; U8 count, count_r=0; U16 U16temp1,U16temp2; //以上为变量的定义. void COM(void);
void Delay2(U16 j) //延时函数 { U8 i; for(;j>0;j--) { }
void Delay_10us(void) //延时10us的延时函数. { U8 i; i--; i--; i--;
for(i=0;i<27;i++);
}
33
北华航天工业学院毕业论文
i--; i--; i--;
}
void COM(void) {
U8 i;
for(i=0;i<8;i++) {
U8FLAG=2; Delay_10us(); Delay_10us(); U8temp=0;
while((!DQ)&&U8FLAG++);
Delay_10us();
if(DQ)U8temp=1;
U8FLAG=2;
while((DQ)&&U8FLAG++);
//超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; //左移1位
U8comdata|=U8temp; //U8comdata与U8temp相或,结果保存在U8comdata中.
} }
//-------------------------------- //-----湿度读取子程序 ------------ //-------------------------------- //----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------ //----温度低8位== U8T_data_L------
34
北华航天工业学院毕业论文
//----湿度高8位== U8RH_data_H----- //----湿度低8位== U8RH_data_L----- //----校验 8位 == U8checkdata----- //----调用相关子程序如下---------- //---- Delay();, Delay_10us();,COM(); //-------------------------------- void RH(void) {
//主机拉低18ms DQ=0; Delay2(180); DQ=1;
//总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();
//主机设为输入 判断从机响应信号 DQ=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DQ) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DQ)&&U8FLAG++); U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((DQ)&&U8FLAG++); //数据接收状态
COM(); //调用COM函数 U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
35
北华航天工业学院毕业论文
COM();
U8T_data_H_temp=U8comdata; COM();
U8T_data_L_temp=U8comdata; COM();
U8checkdata_temp=U8comdata; DQ=1; //数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp) {
U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; }//对数据作出相应的处理与运算. } }
2、LCD1602
1602将接受来的信息进过字符转换,反馈到了液晶屏上面,同时我们可以根据需要加减所学要的预设湿度值。
#include
define uchar unsigned char
void delay(uint z) //延时函数 {
uint a,b; for(a=z;a>0;a--) for(b=120;b>0;b--);
36

