用4路温湿度采集数据后怎么显示在一行1602上?

2019-07-16 01:12发布

我最近要做一个东西,就是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路采集的数据显示在一行上,求大仙指导。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。