资源简介
C语言,基于飞凌OK6410开发板的DHT11驱动,内有详细注释

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define GPC_7 S3C64XX_GPC(7)
static volatile unsigned char values[4]={0000};
static struct class * dhtdrv_class;
static struct device * dht11_drv_device;
volatile unsigned long *gpccon = NULL;
volatile unsigned long *gpcdat = NULL;
int major;
static int dht11_drv_open(struct inode *inodestruct file * file)
{
/*设置GPC7为输出引脚*/
*gpccon &= ~( 0xf << (4*7));
/*GPC7输出高电平*/
*gpcdat |= (1<<7);
return 0;
}
static char dht11_drv_read_byte ( void )
{
char dht11_byte ;
unsigned char i ;
unsigned char temp ;
dht11_byte = 0 ;
/*接收数据,并利用|和&存储到dht11_byte*/
for ( i = 0 ; i < 8 ; i ++ )
{
temp = 0 ;
/*50us传输间隔时间*/
while ( ! (gpio_get_value ( GPC_7 ) ) )
{
temp ++ ;
if ( temp > 12 )
return 1 ;
udelay ( 5 ) ;
}
temp = 0 ;
/*根据接收到高电平持续的时长判断数据是0还是1*/
while ( gpio_get_value ( GPC_7 ) )
{
temp ++ ;
if ( temp > 20 )
return 1 ;
udelay ( 5 ) ;
}
/*大于6的话,也就是大于35us,数据为1,否则数据为0*/
if ( temp > 6 )
{
dht11_byte <<= 1 ;
dht11_byte |= 1 ;
}
else
{
dht11_byte <<= 1 ;
dht11_byte |= 0 ;
}
}
return dht11_byte ;
}
static ssize_t dht11_drv_read ( struct file* filp char __user* buf size_t count loff_t* f_pos )
{
unsigned char DataTemp;
unsigned char i;
unsigned char err;
char tempBuf[5];
err = 0 ;
/*设置GPC7为输出引脚*/
*gpccon &= ~( 0xf << ( 4*7) );
*gpccon |= ( 0x1 << (4*7));
/*GPC7输出低电平*/
*gpcdat &= ~( 1<<7 );
/*
等同于
s3c_gpio_cfgpin ( GPC_7 S3C_GPIO_OUTPUT );
gpio_set_value ( GPC_7 0 );
*/
/*延时18毫秒,用于DHT11从待机状态进入工作状态*/
msleep ( 18 );//msleep()休眠延时函数,并不精确,实际延时时间会大于设置值
/*GPC7输出高电平*/
*gpcdat |= ( 1<<7 );
//gpio_set_value ( GPC_7 1 );
udelay ( 40 ); //udelay()忙等待函数延迟过程中无法运行其他任务.这个延迟的时间是准确但是浪费CPU,不适用鱼长时间延时。
/*设置GPC7为输入引脚*/
*gpccon &= ~( 0xf << ( 4*7 ));
/*
等同于
s3c_gpio_cfgpin ( GPC_7 S3C_GPIO_INPUT );
*/
/*
这时候DHT会发出80us的低电平信号,利用while等待信号结束。
下面这个函数在此间拔出 DHT11的话,将会进入死循环,
所以需要添加一个判断。
while ( !( gpio_get_value ( GPC_7 ) ) )
;
*/
while ( !( gpio_get_value ( GPC_7 ) ) && DataTemp )
{
DataTemp --;
udelay ( 10 );
}
if ( !DataTemp )
{
err = 1;
count = -EFAULT;
}
/*
同上,消掉80us的高电平信号。
while ( ( gpio_get_value ( GPC_7 ) ) )
;
*/
if ( !err )
{
DataTemp = 10 ;
while ( ( gpio_get_value ( GPC_7 ) ) && DataTemp )
{
DataTemp --;
udelay ( 10 );
}
if ( !DataTemp )
{
err = 1;
count = -EFAULT;
}
}
if( !err )
{
/*利用数组接收数据
分别是:
8bit湿度整数数据
8bit湿度小数数据
8bi温度整数数据
8bit温度小数数据
8bit校验和
*/
for ( i = 0; i < 5
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 162 2014-12-21 10:25 Makefile
文件 609 2014-12-21 10:25 open.c
文件 4622 2014-12-21 10:25 dht11_ok6410.c
----------- --------- ---------- ----- ----
5393 3
相关资源
- C语言进阶——嵌入式系统高级C语言编
- stc8g1k08特性.doc
- 嵌入式C语言自我修养
- oled-超声波测距
- 嵌入式QtC++编程课件
- 嵌入式c编程语言入门与深入.pdf58199
- 基于STM32的嵌入式flash读写控制
- C语言的嵌入式汇编基本使用.docx(2页
- C语言嵌入式Modbus协议栈,支持主站和
- 颜色识别形状识别STM103嵌入式代码
- IoT-ESP32_DHT11温湿度_2017P40
- GBT 28169-2011 嵌入式软件 C语言编码规范
- 基于机器视觉可移动裂纹检测机器人
- 嵌入式工程师必知必会 (完整高清中
- EAN13条码生成(C语言+VS2010)[包含EA
- 嵌入式Qt实战教程.
- 《测试驱动的嵌入式C语言开发》源码
- 基于stm32的交通信号灯代码
- DHT11驱动程序基于STM32
- C语言嵌入式系统编程修炼之道
- GBT28169-2011嵌入式软件C语言编码规范
- 嵌入式软件C语言编码规范(高安全性
- 嵌入式软件c编程规范
- 嵌入式linuxC语言程序设计基础教程
- 嵌入式技术基础与实践.pdf
- 基于GEC6818的电子相册和2048小游戏.z
- uml状态图的实用C/C++设计 中英文非扫
- 嵌入式web服务器boa_C语言/Python + HTML
- c与c++嵌入式系统编程.pdf
- K210使用情况指南以及测试情况
评论
共有 条评论