查看: 2395|回复: 7

[求助] 求kw01+dht11底层驱动构件

[复制链接]

该用户从未签到

3

主题

6

帖子

0

新手上路

Rank: 1

积分
41
最后登录
2017-5-17
发表于 2016-12-9 21:53:48 | 显示全部楼层 |阅读模式
已经完成硬件的连接,仿写网上的代码,不过却没有成功
我知道答案 目前已有7人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2019-4-30 16:08
  • 签到天数: 184 天

    连续签到: 1 天

    [LV.7]常住居民III

    3

    主题

    651

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1310
    最后登录
    2020-11-30
    发表于 2016-12-10 09:45:14 | 显示全部楼层
    不是太明白,进来看看...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    41
    最后登录
    2017-5-17
     楼主| 发表于 2016-12-10 11:03:13 | 显示全部楼层
    baxk1986 发表于 2016-12-10 09:45
    不是太明白,进来看看...

    这是仿照kl25连接dht11,写的底层驱动,运行时候一直显示136,62,141,142,
    /*
    * dht11.c
    *
    *  Created on: 2016年11月16日
    *      Author: HP
    */
    #include"dht11.h"
    #include"gpio.h"
    //复位DHT11
    DHT11_Rst(void)
    {
        //DHT11_DQ_OUT=0;         //拉低DQ
            gpio_set((PORTD)|(4), 0);
        //DelayMs(20);            //拉低至少18ms
        Delay_ms(20);
        //DHT11_DQ_OUT=1;         //DQ=1
        gpio_set((PORTD)|(4),1);
            //        DelayUs(30);             //主机拉高20~40us
        Delay_us(30);
    }
    //等待DHT11的回应
    //返回1:未检测到DHT11的存在
    //返回0:存在
    uint8_t DHT11_Check()
    {
            uint8_t retry=0;
            //DHT11_IO_IN();//SET INPUT
        while (gpio_get((PORTD)|(4))==0 && retry < 100)//DHT11会拉低40~80us
            {
                    retry ++;
                    Delay_us(1);
            };
            if(retry>=100)return 1;
            else retry=0;
        while (gpio_get((PORTD)|(4))!=0 && retry < 100)//DHT11拉低后会再次拉高40~80us
            {
                    retry ++;
                    Delay_us(1);
            };
            if(retry>=100) return 1;
            return 0;
    }
    //从DHT11读取一个位
    //返回值:1/0
    uint8_t DHT11_Read_Bit()
    {
            uint8_t retry=0;
            while(gpio_get((PORTD)|(4))==0 && retry<100)//等待变为低电平
            {
                    retry ++;
                    Delay_us(1);
            }
            retry=0;
            while(gpio_get((PORTD)|(4))!=0 && retry<100)//等待变高电平
            {
                    retry ++;
                    Delay_us(1);
            }
            Delay_us(40);//等待40us
            if(gpio_get((PORTD)|(4))==0) return 1;
            else return 0;
    }
    //从DHT11读取一个字节
    //返回值:读到的数据
    uint8_t DHT11_Read_Byte()
    {
        uint8_t i,dat;
        dat=0;
            for (i=0;i<8;i++)
            {
                       dat<<=1;
                dat|=DHT11_Read_Bit();
        }
        return dat;
    }
    //从DHT11读取一次数据
    //temp:温度值(范围:0~50°)
    //humi:湿度值(范围:20%~90%)
    //返回值:0,正常;1,读取失败

    uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi,uint_8 *temp1,uint_8 *humi1,uint_8 *jym)
    {
            uint8_t buf[5];
            int i;
            DHT11_Rst();
            if(DHT11_Check()==0)
            {
                    for(i=0;i<5;i++)//读取40位数据
                    {
                            buf=DHT11_Read_Byte();
                    }
                    //if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
                    if((buf[0]+buf[1]+buf[2]+buf[3])==(buf[0]+buf[1]+buf[2]+buf[3]))
                    {
                            *humi=buf[0];
                            *humi1=buf[1];
                            *temp=buf[2];
                            *temp1=buf[3];
                            *jym=buf[4];
                    }

            }else return 1;
            return 0;
    }
    //初始化DHT11的IO口 DQ 同时检测DHT11的存在
    //返回1:不存在
    //返回0:存在
    uint8_t DHT11_Init()
    {
            ///*IO初始化*/
            gpio_init((PORTD)|(4), 1, 1);
            //GPIO_QuickInit(HW_GPIOC, 16, kGPIO_Mode_OPP);
            //Delay_us(1);
            //GPIO_SetBit(HW_GPIOC,16);                                                 //PC16 输出高


            DHT11_Rst();  //复位DHT11
            return DHT11_Check();//等待DHT11的回应
    }




    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-12-22 14:33
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    34

    主题

    512

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1378
    最后登录
    1970-1-1
    发表于 2016-12-10 11:56:56 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-21 08:52
  • 签到天数: 861 天

    连续签到: 1 天

    [LV.10]以坛为家III

    75

    主题

    2523

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5867
    最后登录
    2025-1-22
    发表于 2016-12-10 12:53:19 | 显示全部楼层
    本帖最后由 leo121_3006061 于 2016-12-10 12:55 编辑
    harry1080 发表于 2016-12-10 11:03
    这是仿照kl25连接dht11,写的底层驱动,运行时候一直显示136,62,141,142,
    /*
    * dht11.c

    一直显示那几个说明已经运行了,只是有湿度,温度,还有一个checksum组成的,注意一下顺序即可
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25450
    最后登录
    2025-9-4
    发表于 2016-12-12 09:24:39 | 显示全部楼层
    harry1080 发表于 2016-12-10 11:03
    这是仿照kl25连接dht11,写的底层驱动,运行时候一直显示136,62,141,142,
    /*
    * dht11.c

    楼主你好!
    如果在KW01中不成功,在KL25中能成功,你可以测试下你在KW01中的波形,看看是否是哪里时序不符合你的传感器了,比如说延时不够?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-12-12 11:00:19 | 显示全部楼层
    harry1080 发表于 2016-12-10 11:03
    这是仿照kl25连接dht11,写的底层驱动,运行时候一直显示136,62,141,142,
    /*
    * dht11.c

    首先说你的代码,结合行太大,你记住只要有一个芯片可以跑那其他的一定也可以跑,检查下你Hal层驱动,和那个Delay,软件延时不行的话那就用内核SYStick定时器做延时
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    41
    最后登录
    2017-5-17
     楼主| 发表于 2017-4-7 10:51:02 来自手机 | 显示全部楼层
    leo121_3006061 发表于 2016-12-10 12:53
    一直显示那几个说明已经运行了,只是有湿度,温度,还有一个checksum组成的,注意一下顺序即可 ...

    我顺序修改好多次,都不能改变恒定的数值,你可以留一个邮箱,我把源码发给你,你指导下吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 18:33 , Processed in 0.105359 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表