歡迎訪問(wèn)深圳市金恒昌泰科技有限公司官網,我公司主要(yεδ"ào)從(cóng)事(shì)電(diàn)子(zǐ)産品、電(di<♦✘àn)子(zǐ)設備的(de)研發及銷售、傳感器(q→§ì)的(de)研發及銷售、國(guó)內(nèi)貿易、貨物(wù)及技(φ¶♠•jì)術(shù)進出口 www.zy-sensor.→± ✔com
1、PHT11傳感器(qì)
PHT11 數(shù)字溫濕度傳感器¥★(qì)是(shì)一(yī)款低(dī)成本高(gāo)性價比的(de)溫濕度β↔δπ傳感器(qì)。采用(yòng)單總線數(shù)字通(tōng)訊和(hé)12位AD↕C采樣溫濕度傳感技(jì)術(shù),傳感器(qì)包括一(yī)個(gè)γφ♦電(diàn)阻式感濕元件(jiàn)和(hé)一(yī)個(gè)NTC測溫元件(jiàn♣&£),并與一(yī)個(gè)高(gāo)性能(néng) 8 位單片機(jī)相(x®← iàng)連接。因此該産品具有(yǒu)品質卓越、超快(kuài)響應α₩、抗幹擾能(néng)力強、性價比極高(gāo)等優點。
2、溫濕度讀(dú)取方式
單片機(jī)通(tō✘•ng)過單根數(shù)據線與PHT11進行(xíng)通(tōng)訊,單 Ω片機(jī)拉低(dī)數(shù)據線的(de)電(diàn)平20m ₹δs後切換IO口為(wèi)輸入狀态,即可(kě)激活PHT11,緊接著↑★(zhe)連續讀(dú)取PHT11輸出的(de)溫濕度數(s←♥ hù)據,根據時(shí)序時(shí)間(jiān)進®×£行(xíng)采集判斷輸出的(de)數(shù)據位是(shì)邏輯1還(hái→↓)是(shì)邏輯0,然後再把讀(dú)取到(dào)的Ω↔(de)數(shù)據進行(xíng)簡單轉換即可(kě)得(de)到(d¶©∑ào)溫度值和(hé)濕度值,濕度範圍5%~95%,溫度範圍-20~60度。
3、C51例程參考
//---------------------------φφ₹∏---------------------
// STC15W系列
// 讀(dú)DHT11數(shù)據
// 晶振12MHZ
// 間(jiān)隔1s讀(dú)取溫濕度并發送到(©♠ dào)串口
//-----------------------------------↑←γ -------------
//--------------------------♥₽----------------------
// 頭文(wén)、宏定義
//-----------------------------------------δ♣-------
#define MAIN_Fosc 11059200L //定義主時(shí)鐘(zhōng)
#define BaudRate1 115200UL //選擇波特率
#include "STC15Fxxxx.H"
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1)) //Timer 1 重裝值, 對(duì)應300KHZ
#define Timer2_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate±γ 1)) //Timer 2 重裝值, 對(duì)應300KHZ
/************* 本地(dì)變量聲明(míng) **************/
//-----------------------------★™ ☆-------------------
// 端口定義、寄存器(qì)定義
//--------------------------------<'----------------
sbit DIO = P1^0;
sbit LED = P5^5; //指示燈
uint timeout;
uchar read_data[10];
//-------------------------------✔&-----------------
// 30us延時(shí)
//--------------------------✔ε₹★----------------------
void Delay30us() //@11.0592MHz
{
unsigned char i;
i = 80;
while (--i);
}
void Delay20ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 1;
j = 216;
k = 35;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//-----------------------------------------∑'-------
// 100ms延時(shí)
//-----------------------------------§β÷-------------
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//---------------------------σ<♦---------------------
// 開(kāi)始信号
//---------------------------------------------¥♥---
void Strt_DHT()
{
DIO=0;
Delay20ms();
DIO=1;
}
//-----------------------------------&$-------------
// 應答(dá)信号 11.059Ω₹2MHZ
//----------------------------------------•€--------
uchar Ack()
{
timeout=0;
while(DIO)
{
if(++timeout>300)
return 0;
}
if(DIO==0)
{
timeout=0;
while(!DIO)
{
if(++timeout>167)
return 0;
}
timeout=0;
while(DIO)
{
if(++timeout>50)
return 0;
}
}
else
{
return 0;
}
return 1;
}
//--------------------------------------- >¶---------
// 讀(dú)一(yī)個(gè)字節數(shù)據
//-------------------------------------- λ----------
uchar read_1byte()
{
uchar i;
uchar temp=0;
for(i=0;i<8;i++)
{
temp<<=1;
timeout=0;
while(!DIO)
{
if(++timeout>111)
break;
}
Delay30us();
if(DIO)
temp=temp|0x01;
timeout=0;
while(DIO)
{
if(++timeout>20)
break;
}
}
return temp;
}
void init()
{
P0M1 = 0; P0M0 = 0; //設置為(wèi)準雙向口
P1M1 = 0; P1M0 = 0; //設置為(wèi)準雙向口
P2M1 = 0; P2M0 = 0; //設置為(wèi)準雙向口 弱上(shàng)拉,應為(wèi)外(wài)©↑部按鍵沒有(yǒu)上(shàng)拉電(diàn)阻,所以需要(yào)配置端口上α&←≠(shàng)拉不(bù)然那(nà)檢查不(bù)到(dào),雖然複位φπ§寄存器(qì)是(shì)0,但(dàn)是(shì)還(hái)是(shì)要(♣≈yào)配置一(yī)遍才生(shēng)效。
P3M1 = 0; P3M0 = 0; //設置為(wèi)準雙向口
P4M1 = 0; P4M0 = 0; //設置為(wèi)準雙向口
P5M1 = 0; P5M0 = 0; //設置為(wèi)準雙向口
P6M1 = 0; P6M0 = 0; //設置為(wèi)準雙向口
P7M1 = 0; P7M0 = 0; //設置為(wèi)準雙向口
//---------------------------------------------λ™>-串口1初始化(huà)
S1_8bit(); //8位數(shù)據
S1_USE_P30P31(); //UART1 使用(yòng)P30 P31口 默認
AUXR &= ~(1<<4); //Timer stop 波特率使用(yòng)Timer2産生(shēng)γ↔
AUXR |= 0x01; //S1 BRT Use Timer2;
AUXR |= (1<<2); //Timer2 set as 1T mode
TH2 = (u8)(Timer2_Reload >>σ↑∏ 8);
TL2 = (u8)Timer2_Reload;
AUXR |= (1<<4); //Timer run enable
REN = 1; //允許接收
ES = 1; //允許中斷
TI=1; //發送中斷标志(zhì)位,必須σ ×設置
EA = 1; //全局中斷
}
//========================================αεγε================================
// 函數(shù): void main(void)
// 描述: 主函數(shù)。
// 參數(shù): none.
// 返回: none.
// 版本: VER1.0
// 日(rì)期:
// 備注:
//===============================÷$==================================="↓©======
void main(void)
{
float Temperature,Humidity;
uchar temp;
uchar i;
init();
DIO=1;
while(1)
{
LED=0;//指示燈亮(liàng)
Strt_DHT();
if(Ack())
{
for(i=0;i<5;i++)
{
read_data[i]=read_1byte();
}
}
Humidity=read_data[0];
temp=read_data[3]&0x0f;
Temperature=temp/10.0;
Temperature=Temperature+read≥→_data[2];
if((read_data[3]&0x80)==0★'→x80) //判斷是(shì)否為(wèi)負溫度
{
Temperature=-Temperature;
}
printf("PHT:%0.1f,%0.0f&nbε•λsp; ",Temperature,Humidity);
for(i=0;i<5;i++)
{
read_data[i]=0;
}
LED=1;//指示燈滅
for(i=0;i<10;i++)//延時(shí)1s
{
Delay100ms();
}
}
}