




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
P.PAGE1實驗名稱:姓名:學號:P.PAGE1裝訂線裝訂線專業(yè):測控技術與儀器姓名:顏睿專業(yè):測控技術與儀器姓名:顏睿學號:3130103850日期:2018.4.28地點:創(chuàng)客空間課程名稱:嵌入式系統(tǒng)設計指導老師:馬永昌成績:________________實驗名稱:綜合實驗一dht11和人體感應傳感器實驗類型:驗證型同組學生姓名:孫凡原一、實驗目的和要求(必填) 二、實驗內(nèi)容和原理(必填)三、主要儀器設備(必填) 四、操作方法和實驗步驟五、實驗數(shù)據(jù)記錄和處理 六、實驗結果與分析(必填)七、討論、心得一、實驗目的和要求1.掌握字符設備驅(qū)動程序的基本結構和開發(fā)方法2.掌握用戶空間調(diào)用設備驅(qū)動的方法3.掌握用戶和內(nèi)核的交互二、實驗內(nèi)容和原理1.編寫溫濕度傳感器DHT11驅(qū)動,傳輸打印溫濕度信息2.編寫人體感應傳感器驅(qū)動,控制LED燈亮滅原理:溫濕度傳感器DHT11:1.引腳圖實際使用傳感器沒有NC引腳2.數(shù)據(jù)采集a.數(shù)據(jù)總時序用戶主機發(fā)送一次開始信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,待主機開始信號結束后,DHT11發(fā)送響應信號,送出40bit的數(shù)據(jù),幵觸發(fā)一次信采集。b.主機發(fā)送起始信號連接DHT11的DATA引腳的I/O口輸出低電平,且低電平保持時間不能小于18ms,然后等待DHT11作出應答信號。c.檢測從機應答信號DHT11的DATA引腳檢測到外部信號有低電平時,等待外部信號低電平結束,延遲后DHT11的DATA引腳處于輸出狀態(tài),輸出80微秒的低電平作為應答信號,緊接著輸出80微秒的高電平通知外設準備接收數(shù)據(jù)。d.接收數(shù)據(jù)(1)數(shù)據(jù)判定規(guī)則
位數(shù)據(jù)“0”的格式為:50微秒的低電平和26-28微秒的高電平,位數(shù)據(jù)“1”的格式為:50微秒的低電平加70微秒的高電平。接收數(shù)據(jù)時可以先等待低電平過去,即等待數(shù)據(jù)線拉高,再延時60us,因為60us大于28us且小于70us,再檢測此時數(shù)據(jù)線是否為高,如果為高,則數(shù)據(jù)判定為1,否則為0。
if(err)
{
printk(KERN_ERR"[%s%d]:Requestbuttongpiofailed\n",__func__,__LINE__);
return-EFAULT;
}
err=gpio_request_one(config.led_num,GPIOF_OUT_INIT_LOW,"LEDlight");
if(err)
{
printk(KERN_ERR"[%s%d]:Requestledgpiofailed\n",__func__,__LINE__);
gpio_free(config.button_num);
return-EFAULT;
}
err=gpio_request_one(config.out_num,GPIOF_IN,"LightButton");
if(err)
{
printk(KERN_ERR"[%s%d]:Requestbuttongpiofailed\n",__func__,__LINE__);
gpio_free(config.button_num);
gpio_free(config.led_num);
return-EFAULT;
}
err=gpio_request_one(config.led1_num,GPIOF_OUT_INIT_LOW,"LEDlight");
if(err)
{
printk(KERN_ERR"[%s%d]:Requestledgpiofailed\n",__func__,__LINE__);
gpio_free(config.out_num);
gpio_free(config.button_num);
gpio_free(config.led_num);
}
flag=1;
break;
}
case1:
{
gpio_direction_output(config.led_num,0);//設置led輸出
gpio_direction_input(config.button_num);//設置人體傳感器輸入
gpio_set_value(config.led_num,0);//關led
if(gpio_get_value(config.button_num)==0)//人體感應輸入低電平,led滅
{
gpio_set_value(config.led_num,0);
}
elseif(gpio_get_value(config.button_num)==1)//人體感應輸入高電平,led亮
{
gpio_set_value(config.led_num,1);
}
gpio_direction_output(config.led1_num,0);//設置led1輸出(實際并未使用)
gpio_direction_output(config.out_num,1);//設置溫濕度傳感器數(shù)據(jù)端的引腳為輸出
gpio_set_value(config.led1_num,0);
gpio_set_value(config.out_num,0);//根據(jù)dht11的數(shù)據(jù)傳輸規(guī)則進行操作
mdelay(20);
gpio_set_value(config.out_num,1);
udelay(40);
gpio_direction_input(config.out_num);
while(gpio_get_value(config.out_num)==0)
{}
while(gpio_get_value(config.out_num)==1)
{}
for(i=0;i<40;i++)
{
while(gpio_get_value(config.out_num)==0)
{}
udelay(50);
if(gpio_get_value(config.out_num)==1)//獲得的數(shù)據(jù)存入buff[40]數(shù)組
{
buff[i]=1;
while(gpio_get_value(config.out_num)==1)
{}
}
else
buff[i]=0;
}
for(i=0;i<16;i++)//濕度移位相加
{
humi=humi*2+buff[i];
}
for(i=16;i<32;i++)//溫度移位相加
{
temper=temper*2+buff[i];
}
config.humidity=humi;
config.temperature=temper;
gpio_direction_output(config.out_num,1);//測量結束引腳置高電平
gpio_set_value(config.out_num,1);
mdelay(2000);//延時一段時間再測量
if(copy_to_user((void*)arg,&config,sizeof(structgpio_config)))//數(shù)據(jù)傳入用戶態(tài)
{
printk(KERN_ERR"[%s%d]:copytouserfailed!\n",__func__,__LINE__);
return-EFAULT;
}
flag=1;
break;
}
default:
printk(KERN_INFO"[%s%d]:Invalidcmd",__func__,__LINE__);
break;
}
return0;}
staticstructfile_operationsdemo_fops={
.owner=THIS_MODULE,
.open=demo_open,
.release=demo_release,
.unlocked_ioctl=demo_ioctl,};staticint__initdemo_init(void){
interr;
printk(KERN_INFO"DemoInit\n");
err=alloc_chrdev_region(&demo_devno,0,1,DRIVER_NAME);
if(err<0){
gotoerr;
}
cdev_init(&demo_dev,&demo_fops);
err=cdev_add(&demo_dev,demo_devno,1);
if(err<0)
{
printk(KERN_ERR"[%s,%d]addcdevfailed\n",__func__,__LINE__);
gotoFREE_DEVNO;
}
//自動生成設備文件在/dev目錄下,文件名為DEVICE_NAME
demo_class=class_create(THIS_MODULE,DEVICE_NAME);
if(IS_ERR(demo_class))
{
printk(KERN_ERR"[%s,%d]classcreatefailed\n",__func__,__LINE__);
gotoDEV_FREE;
}
device_create(demo_class,NULL,demo_devno,NULL,DEVICE_NAME);
return0;DEV_FREE:
cdev_del(&demo_dev);FREE_DEVNO:
unregister_chrdev_region(demo_devno,1);err:
returnerr;}staticvoiddemo_exit(void){
if(flag)
{
gpio_free(config.button_num);
gpio_free(config.led_num);
gpio_free(config.out_num);
gpio_free(config.led1_num);
}
device_destroy(demo_class,demo_devno);
class_destroy(demo_class);
cdev_del(&demo_dev);
unregister_chrdev_region(demo_devno,1);
printk(KERN_INFO"Demoexit\n");}module_init(demo_init);module_exit(demo_exit);MODULE_AUTHOR("hyg");MODULE_DESCRIPTION("BUTTONLEDDriver");MODULE_LICENSE("GPL");2.應用程序demo.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/ioctl.h>#include<sys/time.h>#include<sys/ioctl.h>#include<errno.h>#include<fcntl.h>structgpio_config{
intbutton_num;
intout_num;
intled_num;
intled1_num;
inthumidity;
inttemperature;};intmain(intargc,char**argv){
intfd;
floath;
floatt;
structgpio_configconfig;
config.button_num=26;//人體感應傳感器引腳
config.led_num=3;//led引腳
config.out_num=5;//dht11引腳
config.led1_num=6;//未使用
config.humidity=0;//濕度
config.tempe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溺水安全培訓
- 聚乙交酯在醫(yī)學領域的應用
- 成人教育課程開發(fā)計劃
- 哲學復習試題
- 聯(lián)大學堂《遙感概論(華北水利水電大學)》題庫附答案
- 六年級蘇教版數(shù)學考試復習計劃
- 2025年注冊環(huán)保工程師之注冊環(huán)保工程師專業(yè)基礎自我提分評估(附答案)
- 學生體能測試實施計劃
- 學前教育教師專業(yè)素養(yǎng)提升計劃
- 寧波七中教育集團八年級上學期科學期末試卷
- GRR表格MSA第四版完整版
- 京滬高速公路施工組織設計
- 陜西全過程工程咨詢服務合同示范文本
- 公路水運工程施工企業(yè)(主要負責人和安全生產(chǎn)管理人員)考核大綱及模擬題庫
- 1KV送配電調(diào)試報告
- GB/T 5801-2020滾動軸承機制套圈滾針軸承外形尺寸、產(chǎn)品幾何技術規(guī)范(GPS)和公差值
- FZ/T 93029-2016塑料粗紗筒管
- 2022年12月山東省普通高中學業(yè)水平合格性考試語文仿真模擬試卷C(答題卡)
- 塑膠原料來料檢驗指導書
- 人教版音樂三年級下冊知識總結
- 共點力平衡的應用-完整版PPT
評論
0/150
提交評論