欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求助利用DHT11進行溫濕度調節(jié)的風扇的程序傳輸困難的問題
[打印本頁]
作者:
2290692143
時間:
2018-6-13 10:56
標題:
求助利用DHT11進行溫濕度調節(jié)的風扇的程序傳輸困難的問題
現在急需大神幫助解決DHT11傳輸困難的問題,具體程序如下
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char //宏的定義變量類型 uchar 代替 unsigned char
typedef unsigned char BYTE;
typedef unsigned char WORD;
typedef bit BOOL;//聲明一個布爾型變量,即真或假
sbit io=P2^3; //dht11data端接單片機的P2^3
sbit rw=P2^0;
sbit rs=P2^1;
sbit ep=P2^2; //設置LCD1602的使能端
uchar data_byte; //單片機接收DHT11的數據
uchar RH,RL,TH,TL; //濕度、溫度各自的高八位和低八位
void delay1() //用于一個FOR循環(huán)大概需要8個多機器周期,一個機器周期為1us,晶振12mhz,本延遲函數8us多
{
uchar i;
for(i=0;i<1;i++);
}
BOOL lcd_bz() //測試LCD忙碌狀態(tài),返回值為布爾型數值,真或假“1”、“‘0”
{
BOOL result;
rs=0; //讀忙信號
rw=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(BOOL)(P2&0x80);
ep=0;
return(result);
}
void write_cmd(uchar cmd) //寫指令
{
while(lcd_bz());
rs=0;
rw=0;
ep=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
void write_addr(uchar addr) //寫地址
{
write_cmd(addr|0x80);//LCD第一行的首地址為0X80,第二行的首地址為0X80+0X40+0XC0
}
void write_byte(uchar dat) //寫字節(jié)
{
while(lcd_bz());
rs=1;
rw=0;
ep=0;
_nop_();
_nop_();
P0=dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
void lcd_init()//LCD初始化
{
write_cmd(0x38);//設置lcd兩行顯示,一個數據由5*7點陣表示 ,8位數據接口
delay(1);
write_cmd(0x0c);//清除屏幕顯示
delay(1);
write_cmd(0x06);//設定輸入方式,增量不移位
delay(1);
}
void display(uchar addr,uchar q)//在某地址上顯示內容,addr表示的是地址偏移量,q表示的是顯示的字符或者數字
{
delay(10);
write_addr(addr);
write_byte(q);
delay(10); //修改此時間,可以改變lcd上數值跳變的速度
}
//*****DHT11測試模塊**
void start()//開始信號
{
io=1;
delay1();
io=0;
delay(25);//主機把總線拉低必須大于18MS DHT11能檢測到起始信號
io=1;// 20-40us
delay1();
delay1();
delay1();//三個延時函數差不多為24us
}
uchar receive_byte()//接收一個字節(jié)
{
uchar i,temp;
for(i=0;i<8;i++)// 接收8bit的數據
{
while(!io); //等待50US的低電平開始信號結束
delay1(); //開始信號結束之后,延時26US-28US以下是三個延時函數
delay1();
delay1();
temp=0; //時間為26us-28us ,表示接收的數據為“0”
if(io==1)
temp=1; //如果26us-28us之后,還為高電平,則表示接收的數據為“1”
while(io); //等待數據信號高電平,“0'為26us-28us,’1‘為70us
data_byte<<=1; //接受的數據為高位在前,右移
data_byte|=temp;
}
return data_byte;
}
void receive()//單片機接收DHT11數據
{
uchar T_H,T_L,R_H,R_L,check,num_check,i;
start();//開始信號
io=1;//主機設為輸入,判斷從機 DHT11響應信號
if(!io)//判斷從機有低電平響應信號是否結束
{
while(!io); //判斷從機發(fā)出80us的低電平響應信號是否結束
while(io);//判斷從機發(fā)出80us的高電平是否結束,如結束則主機進入數據接收狀態(tài)
R_H=receive_byte();//濕度高位
R_L=receive_byte();//濕度低位
T_H=receive_byte();//溫度高位
T_L=receive_byte();//溫度低位
check=receive_byte();//校驗位
io=0;//當最后一BIT數據接完畢后,從機拉低電平50US
for(i=0;i<7;i++) //差不多50US的延時
delay1();
io=1;//總線由上拉電阻拉高,進入空閑狀態(tài)
num_check=R_H+R_L+T_H+T_L;
if(num_check==check)//判斷讀到四個數據之和是否與校驗位相同
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
check=num_check;
}
}
}
//DHT11數據顯示程序
void main()
{
lcd_init();//初始化LCD
while(1)
{
display(0x00,'R');//LCD的第一行顯示
display(0x01,':');
display(0x02,RH/10+0x30);//表示帶字庫的LCD1602中的0x30的位置放有數字0RH/10+0x30即表示濕度的十位數字在字庫RH/10+0x30的位置處放著
display(0x03,RH%10+0x30);
display(0x04,'%');
display(0x40,'T');//LCD的第二行顯示
display(0x41,':');
display(0x42,TH/10+0x30);
display(0x43,TH%10+0x30);
display(0x44,0xdf);//以下是兩個溫度單位的處理
display(0x45,0x43);
}
}
復制代碼
作者:
zsyzdx
時間:
2018-6-13 13:35
傳輸困難是什么問題。。。。。。。。。。。。。
作者:
2290692143
時間:
2018-6-15 12:38
就是傳感器不能把數據傳輸到單片機,啟動后完全沒有反應
作者:
胡家宏
時間:
2019-3-27 09:26
DHT11濕度傳感器當開關控制風扇程序如何寫
作者:
new_hand
時間:
2019-4-1 19:08
一個個模塊功能的排查,先看下DHT11是否正常工作
作者:
xjtong
時間:
2019-4-2 04:16
2290692143 發(fā)表于 2018-6-15 12:38
就是傳感器不能把數據傳輸到單片機,啟動后完全沒有反應
你搞個熱敏電阻,不就完事了,搞這復雜!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1