我最近要做一个东西,就是4路温湿度采集数据,然后把采集到的数据显示在1602上。
温湿度传感器驱动程序
sbit dht11_data1 = P3^0;
sbit dht11_data2 = P3^1;
sbit dht11_data3 = P3^2;
sbit dht11_data4 = P3^3;
struct dht11
{
dht11_data1;
dht11_data2;
dht11_data3;
dht11_data4;
}dht11_data;
uchar dht11_flag = 0;
uchar dht11_temp;
uchar dht11_hum_H, dht11_hum_L, dht11_tep_H, dht11_tep_L;
uchar dht11_hum_tempH, dht11_hum_tempL, dht11_tep_tempH, dht11_tep_tempL;
uchar U8comdata, U8check_data, U8check_data1;
void delay_10us()
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void Delay_
time(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
/*检测发送的数据位是0还是1*/
void Check0_1()
{
uchar i;
for(i=0;i<8;i++)
{
dht11_flag = 2;
while((!dht11_data1) && dht11_flag++); //1bit是否结束
delay_10us();
delay_10us();
delay_10us();
dht11_temp=0;// 26us~28us 表示为0
if(dht11_data1)
{
dht11_temp=1; // 超过28us依然为高电平 表示为1
}
dht11_flag = 2;
while((dht11_data1) && dht11_flag++);
if(dht11_flag==1)
break;//U8FLAG溢出超时则跳出for循环
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata <<= 1;
U8comdata|= dht11_temp;
}
}
/*温湿度读取子程序*/
void rechive_data(data11 x) //传入参数
{
//dht11_data1 = 0;
x = 0;
Delay(34); //主机拉低高于18ms
x = 1;
//dht11_data1 = 1;
//总线由上拉电阻拉高 主机延时20us
delay_10us();
delay_10us();
delay_10us();
delay_10us(); d
//dht11_data1 = 1;//主机设为输入 判断从机响应信号
x = 1;
if(!x)//if(!dht11_data1)//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
dht11_flag = 2;
while((!x) && dht11_flag++);
//while((!dht11_data1) && dht11_flag++);//判断从机是否发出 80us 的低电平响应信号是否结束
dht11_flag = 2;
while((x) && dht11_flag++);
//while((dht11_data1) && dht11_flag++);//判断从机是否发出 80us 的高电平, 如发出则进入数据接收状态
Check0_1();//数据接收状态
dht11_hum_H = U8comdata; //湿度整数8位
Check0_1();
dht11_hum_L = U8comdata; //湿度小数8位
Check0_1();
dht11_tep_H = U8comdata; //温度整数8位
Check0_1();
dht11_tep_L = U8comdata; //温度小数8位
Check0_1();
U8check_data=U8comdata; //校验位
P1_0=1;
dht11_temp = (dht11_hum_H + dht11_hum_L + dht11_tep_H + dht11_tep_L);
if(dht11_temp == U8check_data) //数据校验 正确执行
{
dht11_hum_tempH = dht11_hum_H;
dht11_hum_tempL = dht11_hum_L;
dht11_tep_tempH = dht11_tep_H;
dht11_tep_tempL = dht11_tep_L;
U8check_data1 = U8check_data;
}
}
}
1602写程序函数
write_data(table[num]);
怎么样利用传函把4路采集的数据显示在一行上,求大仙指导。
一周热门 更多>