• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: DHT11  

资源简介

linux平台下,DHT11驱动程序,增加超时等待机制,稳定,包括应用测试程序,已在MINI2440测试通过。

资源截图

代码片段和文件信息

#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
  
/* 相关引脚定义方便以后移植 */  
#define DQ         S3C2410_GPB(1)   
#define CFG_IN     S3C2410_GPIO_INPUT   
#define CFG_OUT    S3C2410_GPIO_OUTPUT
#define TIME_OUT_DEALY 100   
  
// dht11主次设备号(动态分配)   
static int dht11_major = 0;  
static int dht11_minor = 0;  
static int dht11_nr_devs = 1; 
unsigned short temperaturehumidity;
unsigned char checknum;
static volatile unsigned char values[6]={000000}; 
  
// 定义设备类型   
static struct dht11_device  
{  
    struct cdev cdev;  
};  
  
struct dht11_device *dht11_devp;    /*设备结构体指针 */  
  
static struct class *dht11_class;  
static struct class_device *dht11_class_dev;  
  
/* 函数声明 */  
static int dht11_open(struct inode *inode struct file *filp);  
static int dht11_init(void);  
static ssize_t dht11_read(struct file *filp char __user * buf size_t count loff_t * f_pos);  
void dht11_setup_cdev(struct dht11_device *dev int index);  


static void set_pin_high(void)
{
      s3c2410_gpio_cfgpin(DQCFG_OUT);
  s3c2410_gpio_setpin(DQ 1);
}

static void set_pin_low(void)
{
      s3c2410_gpio_cfgpin(DQCFG_OUT);
  s3c2410_gpio_setpin(DQ 0);


static int set_pin_delay_get(unsigned int time)
{   
    
s3c2410_gpio_cfgpin(DQCFG_IN);
    udelay(time);
    if(s3c2410_gpio_getpin(DQ))
return 1;
else
return 0;
}

static int set_pin_get(void)
{   
    
 
    if(s3c2410_gpio_getpin(DQ))
return 1;
else
return 0;
}



  
static int dht11_open(struct inode *inode struct file *filp)  
{  
    int flag = 0;  
  
    flag = dht11_init();  
    if (flag & 0x01)  
    {  
        printk(KERN_WARNING “open dht11 failed\n“);  
        return -1;  
    }  
    printk(KERN_NOTICE “open dht11 successful\n“);  
    return 0;  
}  
  
static int dht11_init(void)  
{  
    int retval = 0;  
  
    set_pin_high();
  
    return retval;  




static int read_word_data(void)
{
     int i;
     int counter=0;
     int timerout_counter=0;
     int timerout_flag=0;
     int ret=0;
start:
 set_pin_low();    //
 mdelay(20);       //18ms
 set_pin_high();   //
     if(set_pin_delay_get(50)) //
      {
           printk(KERN_INFO“can not detect the low ack!“);
           counter++;
           if(counter>5)
          {
           ret=-1;
           goto stop;
          }
           goto start;
    }
     counter=0;
     timerout_counter=0;
     while((!set_pin_get())&&(timerout_counter++     if(timerout_counter>=TIME_OUT_DEALY)
     {
             timerout_flag=1;
             goto out_err;
     } 
     timerout_counter=0;
     while((set_pin_get())&&(timerout_count

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    I.A....      8056  2014-07-27 15:03  linxu_dht11\dht11\app_mini2440_dht11

    I.A....       829  2014-07-27 15:03  linxu_dht11\dht11\app_mini2440_dht11.c

    I.A....       829  2014-07-27 14:54  linxu_dht11\dht11\app_mini2440_dht11.c~

    I.A....       157  2014-07-27 10:05  linxu_dht11\dht11\Makefile

    I.A....       112  2014-07-27 10:04  linxu_dht11\dht11\Makefile~

    I.A....      8959  2014-07-27 14:53  linxu_dht11\mini2440_dht11.c

    I..D...         0  2014-07-27 15:09  linxu_dht11\dht11

     目录          0  2014-07-27 15:17  linxu_dht11

----------- ---------  ---------- -----  ----

                18942                    8


评论

共有 条评论