一、驅(qū)動(dòng)程序介紹
驅(qū)動(dòng)程序一般指的是設(shè)備驅(qū)動(dòng)程序(Device Driver),是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序。相當(dāng)于硬件的接口,操作系統(tǒng)只有通過這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。因此,驅(qū)動(dòng)程序被比作“ 硬件的靈魂”、“硬件的主宰”、和“硬件和系統(tǒng)之間的橋梁”等。
驅(qū)動(dòng)程序(Device Driver)全稱為“設(shè)備驅(qū)動(dòng)程序”,是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序,可以說相當(dāng)于硬件的接口,操作系統(tǒng)只能通過這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。正因?yàn)檫@個(gè)原因,驅(qū)動(dòng)程序在系統(tǒng)中的所占的地位十分重要,一般當(dāng)操作系統(tǒng)安裝完畢后,首要的便是安裝硬件設(shè)備的驅(qū)動(dòng)程序。不過,大多數(shù)情況下,我們并不需要安裝所有硬件設(shè)備的驅(qū)動(dòng)程序,例如硬盤、顯示器、光驅(qū)等就不需要安裝驅(qū)動(dòng)程序,而顯卡、聲卡、掃描儀、攝像頭、Modem等就需要安裝驅(qū)動(dòng)程序。另外,不同版本的操作系統(tǒng)對硬件設(shè)備的支持也是不同的,一般情況下版本越高所支持的硬件設(shè)備也越多,例如筆者使用了Windows XP,裝好系統(tǒng)后一個(gè)驅(qū)動(dòng)程序也不用安裝。
驅(qū)動(dòng)程序的作用:
隨著電子技術(shù)的飛速發(fā)展,電腦硬件的性能越來越強(qiáng)大。驅(qū)動(dòng)程序是直接工作在各種硬件設(shè)備上的軟件,其“驅(qū)動(dòng)”這個(gè)名稱也十分形象的指明了它的功能。正是通過驅(qū)動(dòng)程序,各種硬件設(shè)備才能正常運(yùn)行,達(dá)到既定的工作效果。
硬件如果缺少了驅(qū)動(dòng)程序的“驅(qū)動(dòng)”,那么本來性能非常強(qiáng)大的硬件就無法根據(jù)軟件發(fā)出的指令進(jìn)行工作,硬件就是空有一身本領(lǐng)都無從發(fā)揮,毫無用武之地。這時(shí)候,電腦就正如古人所說的“萬事俱備,只欠東風(fēng)”,這“東風(fēng)”的角色就落在了驅(qū)動(dòng)程序身上。如此看來,驅(qū)動(dòng)程序在電腦使用上還真起著舉足輕重的作用。
從理論上講,所有的硬件設(shè)備都需要安裝相應(yīng)的驅(qū)動(dòng)程序才能正常工作。但像CPU、內(nèi)存、主板、軟驅(qū)、鍵盤、顯示器等設(shè)備卻并不需要安裝驅(qū)動(dòng)程序也可以正常工作,而顯卡、聲卡、網(wǎng)卡等卻一定要安裝驅(qū)動(dòng)程序,否則便無法正常工作。這是為什么呢?
這主要是由于這些硬件對于一臺(tái)個(gè)人電腦來說是必需的,所以早期的設(shè)計(jì)人員將這些硬件列為BIOS能直接支持的硬件。換句話說,上述硬件安裝后就可以被BIOS和操作系統(tǒng)直接支持,不再需要安裝驅(qū)動(dòng)程序。從這個(gè)角度來說,BIOS也是一種驅(qū)動(dòng)程序。但是對于其他的硬件,例如:網(wǎng)卡,聲卡,顯卡等等 卻必須要安裝驅(qū)動(dòng)程序,不然這些硬件就無法正常工作。
當(dāng)然,也并非所有驅(qū)動(dòng)程序都是對實(shí)際的硬件進(jìn)行操作的,有的驅(qū)動(dòng)程序只是輔助系統(tǒng)的運(yùn)行,如android中的有些驅(qū)動(dòng)程序提供輔助操作系統(tǒng)的功能,這些驅(qū)動(dòng)不是linux系統(tǒng)的標(biāo)準(zhǔn)驅(qū)動(dòng),如ashmen,binder等。
二、DHT11溫濕度傳感器介紹
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為該類應(yīng)用中,在苛刻應(yīng)用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。
DHT11電氣特性:
DHT11引腳說明:
DHT11封裝詳情:
三、溫濕度傳感器DHT11的驅(qū)動(dòng)程序
#include “typedef.h”
#include 《msp430g2553.h》
#include “TemDHT11.h”
#ifndef _DHT11_TYPE
#define _DHT11_TYPE
//連接端口
#define DHT11_Dir P2DIR
#define DHT11_In P2IN
#define DHT11_Out P2OUT
#define DHT11_Bit BIT4
#endif
//8bit濕度+8bit濕度小數(shù)點(diǎn)
//8bit溫度+8bit溫度小數(shù)點(diǎn)
//數(shù)據(jù)位為0是高電平26~28us | 1高電平70us
u8 DHT11_Data[5] = {0}; //從DHT11中讀到的數(shù)據(jù)
void read_DHT11(u8 *Data)
{
u8 re,m,n,Time_out;
DHT11_Dir &= (~DHT11_Bit); //引腳為輸入
for(n = 0; n 《 5; n++)
{
for(m = 0; m 《 8; m++)
{
while( ?。―HT11_In & DHT11_Bit) ); //每1bit以50us低電平時(shí)限開始,直到高電平到來
delay_us(30);
re = 0;
if((DHT11_In & DHT11_Bit)) //30us后還是高電平說明是1
{
re = 1;
}
Time_out = 2;
while((DHT11_In & DHT11_Bit) && (Time_out++ ));
if(Time_out == 1) //超時(shí)處理
{
break;
}
*Data 《《= 1;
if(re)
{
*Data |= 0x01;
}
}
Data++;
}
}
//DHT11的握手協(xié)議模擬和數(shù)據(jù)的讀取
u8 DHT11_GetData(void)
{
u8 o,sum;
DHT11_Dir |= DHT11_Bit;
DHT11_Out &= ~DHT11_Bit; //拉低,發(fā)出開始信號(hào)
delay_ms(18); //拉低18ms
DHT11_Out |= DHT11_Bit; //拉高20us等待
delay_us(20);
DHT11_Dir &= (~DHT11_Bit);
if( ?。―HT11_In & DHT11_Bit) ) //DHT11響應(yīng)
{
while( ?。―HT11_In & DHT11_Bit) ); //80us低電平,等待DHT11的響應(yīng)信號(hào)
while( (DHT11_In & DHT11_Bit) ); //DHT11準(zhǔn)備發(fā)送數(shù)據(jù)
read_DHT11(DHT11_Data); //主機(jī)接收數(shù)據(jù)
sum = 0;
for(o = 0; o 《 4; o++) //數(shù)據(jù)校驗(yàn)
{
sum += DHT11_Data[o];
}
if(sum != DHT11_Data[4])
{
return 0;
}
else
{
return 1;
}
}
return 0;
}
//對溫度濕度進(jìn)行格式化(如果獲取溫度成功)
void DHT11_format(char *Des_str)
{
Des_str[0] = DHT11_Data[0]/10 + 0x30;
Des_str[1] = DHT11_Data[0] + 0x30;
Des_str[2] = ‘?!?
Des_str[3] = DHT11_Data[1]/10 + 0x30;
Des_str[4] = DHT11_Data[1] + 0x30;
Des_str[5] = ‘%’;
Des_str[6] = ‘ ’;
Des_str[7] = DHT11_Data[2]/10 + 0x30;
Des_str[8] = DHT11_Data[2] + 0x30;
Des_str[9] = ‘?!?
Des_str[10] = DHT11_Data[3]/10 + 0x30;
Des_str[11] = DHT11_Data[3] + 0x30;
Des_str[12] = ‘C’;
Des_str[13] = 0;
}
評(píng)論
查看更多