打印
[嵌入式linux]

求大神帮忙编写一个DHT11温湿度驱动程序。

[复制链接]
2166|2
手机看帖
扫描二维码
随时随地手机跟帖
沙发
Q85038427| | 2013-12-12 16:43 | 只看该作者
应用层写的一个驱动,希望能帮助你
int CDisplay::Get_SHT1_SENSOR(int command)
{
        //IO_SHT1_SCK   ,IO_SHT1_DATA   ,IO_DEV_D
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);

        for(int i = 0; i < 9; i++)                                    //9个复位脉冲
        {
                GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);
                GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);
        }
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);         //复位结束

        usleep(1);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);                   //启动传输
        usleep(1);
        GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
        usleep(1);
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
        usleep(1);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
        usleep(1);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
        usleep(1);
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);                //启动完成
        usleep(1);
        GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
        usleep(1);
        for(int i =0 ; i<3;i++)                       //地址000
        {
                   //000
                GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);
                GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);
        }
        //int command = 0x03;
        int temp = 0x10;
        for(int i =0; i<5 ; i++)                                      //5位command
        {
                if(command & temp)
                {
                        GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
                }
                else
                {
                        GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
                }
                temp >>=1;
                usleep(1);
                GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);
                GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);

        }

        GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);     //ACK
        usleep(1);
        if(GPIO_ReadInputDataBit(IO_DEV_D,IO_SHT1_DATA) )
        {
//                DC_DEBUG(LM_DEBUG, ACE_TEXT("Get_SHT1_SENSOR"), ACE_TEXT("SHT1 SENSOR ACK faild....."));
                return -1;               //        NO ACK
        }
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
        for(int i =0; i<25 ; i++)
        {
                usleep(1);                         //80ms  for 12bit
        }


        int value = 0;
        for(int i =0;i<16;i++)                                //读取数据
        {
                value <<= 1;                                          //MSB start
                GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
                if(GPIO_ReadInputDataBit(IO_DEV_D,IO_SHT1_DATA))//上升沿读数据
                {
                        value |= 0x01;
                }
                usleep(1);

                GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
                usleep(1);

        }
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);        //skip ACK
        GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
        usleep(1);
        GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
        usleep(1);
        GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
        stringstream ss;
        ss << "SHT1 SENSOR value=" << value << "command = " <<command;
        DC_DEBUG(LM_DEBUG, ACE_TEXT("Get_SHT1_SENSOR"), ACE_TEXT(ss.str().c_str()));

return value;
}


使用特权

评论回复
板凳
rocdove| | 2013-12-15 22:32 | 只看该作者
描述不详细,估计也没人帮你,多努力把

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝