91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-20
  • 語言: C/C++
  • 標簽: dht11??ok6410??嵌入式??

資源簡介

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?< /*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? {
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?< *gpccon?|=?(?0x1?<
/*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?< /*
等同于
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?

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????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


評論

共有 條評論