亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
IAP15F2K61S2單片機+DHT11源程序
[打印本頁]
作者:
15936895147
時間:
2019-7-17 13:29
標題:
IAP15F2K61S2單片機+DHT11源程序
IAP15F2K61S2單片機 + DHT11 親測可以實現(xiàn)功能,歡迎大家下載
單片機源程序如下:
/*********************************************************************************************
程序名: DHT11驅(qū)動程序
*********************************************************************************************
說明:1、單片機是IAP15F61S2,晶振頻率12MHz,實驗成功。換用12T單片機或別的晶振的時候要修改
延時函數(shù)和JUDGE。程序里判斷超時的變量t的閥值也要改。15F單片機處理速度快一點,51的慢,
2、好東西要共享,大家隨意折騰~~
*********************************************************************************************/
char Check (void);
typedef unsigned char uchar;
typedef unsigned int uint;
#define JUDGE 30 //用于判斷通信的0和1,與單片機速度和晶振頻率有關(guān)
sbit DATA = P1^1; //定義數(shù)據(jù)引腳
uchar dat_r[5],checkout; //用于存放從DHT11讀取到的數(shù)值
/* checkout 為校驗位;
dat_r[0]->溫度整數(shù)
dat_r[1]->溫度小數(shù)
dat_r[2]->濕度整數(shù)
dat_r[3]->濕度小數(shù)
dat_r[4]->校驗位
dat_r[1]->溫度小數(shù)
*/
/*********************************************************************************************
函數(shù)名:延時函數(shù)
調(diào) 用:Delay30us();/Delay20ms();/Delay1s();
參 數(shù):無
返回值:無
結(jié) 果:延時相應(yīng)時間
備 注:振蕩晶體為12MHz(所有延時函數(shù)Copy自STC-ISP(v6.85).exe)
**********************************************************************************************/
void Delay30us() //@12.000MHz
{
unsigned char i;
i = 87;
while (--i);
}
void Delay20ms() //@12.000MHz
{
unsigned char i, j, k;
i = 1;
j = 234;
k = 113;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay1s() //@12.000MHz
{
unsigned char i, j, k;
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*********************************************************************************************
函數(shù)名:DHT11讀數(shù)據(jù)函數(shù)
調(diào) 用:? = GetData();
參 數(shù):無
返回值:失敗->-1,-2,-3,-4;成功->0
結(jié) 果:讀DHT11數(shù)據(jù)并保存到數(shù)組dat_r[]
備 注:
**********************************************************************************************/
char GetData (void)
{
uchar i,j; //for循環(huán)變量
uchar t; //超時判斷
uchar dat8=0; //一次讀取的8位數(shù)據(jù),需要讀5次
DATA = 0; //主機發(fā)起始信號
Delay20ms(); //主機拉低總線至少18ms
DATA = 1; //主機拉高總線20~40us
Delay30us();
t = 80; //設(shè)置超時等待時間
while(DATA && t--); //等待DHT11拉低總線
if(t == 0) //超時
{
DATA = 1;
return -1; //通信錯誤退出,返回錯誤信號:-1
}
//等80us響應(yīng)信號
t = 250; //設(shè)置超時等待時間
while(!DATA && t--); //等待DHT11拉高總線
if(t == 0) //超時
{
DATA = 1;
return -2; //通信錯誤退出,返回錯誤信號:-2
}
//等80us響應(yīng)信號
t = 250; //設(shè)置超時等待時間
while(DATA && t--); //等待DHT11拉低總線
if(t == 0) //超時
{
DATA = 1;
return -3; //通信錯誤退出,返回錯誤信號:-3
}
for(j=0; j<5; j++) //5次讀取
{
for(i=0; i<8; i++) //1次8個位
{
//等待50us開始時隙
t = 150; //設(shè)置超時等待時間
while(!DATA && t--); //等待DHT11拉高總線
if(t == 0) //超時
{
DATA = 1;
return -4; //通信錯誤退出,返回錯誤信號:-4
}
t = 0; //記錄時間清零
while(DATA && ++t); //等待并記錄高電平持續(xù)時間
dat8 <<= 1;
if(t > JUDGE) //高電平持續(xù)時間較長(70us)
dat8 += 1; //傳輸值為1
//else dat8 += 0;
}
dat_r[j] = dat8;
}
Delay30us(); //等待DHT11拉低50us
Delay30us();
DATA = 1; //結(jié)束,拉高總線
checkout = Check();
if(checkout == 0)return 0; //校驗成功,返回成功信號
else return(88); //返回不成功
}
/*********************************************************************************************
函數(shù)名:數(shù)據(jù)校驗函數(shù)
調(diào) 用:? = Check();
參 數(shù):無
返回值:成功->0;失敗->-1;
結(jié) 果:數(shù)據(jù)校驗
備 注:數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。
**********************************************************************************************/
char Check (void)
{
uchar i; //for循環(huán)變量
uint chk=0; //校驗和
for(i=0; i<4; i++)
chk += dat_r[i]; //累加
if((uchar)chk != dat_r[4]) //比對
return -1; //返回錯誤信號:-1
else
return 0; //返回正確信號:0
}
復(fù)制代碼
#include <REGX51.H>
#include <init.c>
#include <DHT11.c>
unsigned int cp,adc,cp1;
char kk,mm,temp,hum;
void display()
{
unsigned char j;
P0 = 0xff;
switch(j)
{
case 0:display_mm(0x01,0xc0);break;
case 1:display_mm(0x02,0xc0);break;
case 2:display_mm(0x04,seg[hum/10]);break;
case 3:display_mm(0x08,seg[hum%10]);break;
case 4:display_mm(0x10,0xbf);break;
case 5:display_mm(0x20,0xbf);break;
case 6:display_mm(0x40,seg[temp/10]);break;
case 7:display_mm(0x80,seg[temp%10]);break;
}j++;if(j >= 8) j = 0;
}
void T0_isr()interrupt 1
{
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
cp++;
display();
}
void T0_init()
{
TMOD = 0x01;
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
T0_init();
ULN2003(0x00);
led(0x00);
Delay1s();
while(1)
{
if(cp >= 1000) //讀取數(shù)據(jù)時間不能小于1秒 時間 > 1s
{
cp = 0;
kk = GetData();//讀取數(shù)據(jù)
}
if(kk == 0) //數(shù)據(jù)讀取成功
{
hum = dat_r[0];
temp = dat_r[2];
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
溫濕度傳感器—DHT11.zip
(27.06 KB, 下載次數(shù): 20)
2019-7-17 13:26 上傳
點擊文件名下載附件
溫度傳感器DHT11用的是IAP15F2K61S2單片機
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1