欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機18b20 dht11溫濕度程序代碼
[打印本頁]
作者:
pdh
時間:
2016-1-11 11:29
標題:
51單片機18b20 dht11溫濕度程序代碼
18b20 dht11的51單片機驅動程序
00000.png
(31.11 KB, 下載次數: 191)
下載附件
2016-1-11 18:55 上傳
dht11單片機源程序:
#include"DHT11.h"
#include"delay.h"
#define uchar unsigned char
#define uint unsigned uint
uchar onedata;
uchar rh,rl,th,tl;
sbit JS=P1^4;
void start(void)//起始信號
{
JS=1;
delay_us(8);
JS=0;
delay_ms(20);//主機總線拉低大于18毫秒
JS=1;
delay_us(25);//發送起始信號結束后,拉高電平25US
}
uchar Receive_Byte()//接收一個字節
{
uchar i,temp;
for(i=0;i<8;i++) //接收八位數據
{
while(!JS); //等待50us的低電平開始信號結束
delay_us(25);//開始信號結束之后延時25us
temp=0; //時間在26us—28us 接收數據為‘0’
if(JS==1)
temp=1; //時間在26us—28us之后還為高電平 接收數據為‘1’
while(JS); //等待數據信號高電平26us—28us 接收數據為‘0’,70us為‘1’
onedata<<=1;
onedata|=temp;
}
return onedata;
}
void receive(void)//接收數據
{
uchar t_h,t_l,r_h,r_l;
uchar check,num_check;
start(); //開始信號
JS=1; //主機何為輸入,判斷從機 DUL11 相應信號
if(!JS) //判斷從機是否有低電平響應信號
{
while(!JS);//判斷從機發出80us的低電平響應信號是否結束
while(JS); //判斷從機80us的高電平是否結束 結束則主機進入接收狀態
r_h=Receive_Byte();
r_l=Receive_Byte();
t_h=Receive_Byte();
t_l=Receive_Byte();
check=Receive_Byte(); //校驗位
JS=0;
delay_us(50);//當最后一位數據接收完畢時從機拉低50us的低電平
JS=1; //主機有上啦電阻拉高進入空閑狀態
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;
}
}
}
void Get_Air_Humidity() //獲取空氣濕度
{
start(); //DHT11起始信號
receive();//獲取DHT11溫濕度
//SendData_Uart1(rh);//串口輸出濕度值
}
復制代碼
ds18b20單片機源程序:
#include"DS18B20.h"
#define uchar unsigned char
#define uint unsigned int
//18b20測溫
sbit DQ=P3^6;
sbit boom=P3^5;
uchar fuhao; //判斷溫度的正負
uchar temp_int=0;//定義溫度的整數部分
uint temp_point=0;//定義溫度的小數部分
uint temp,tempflag=261;
//char a,b,c,d,e,f,g,h;
//void delay(uchar i)
//{
// while(i--);
//}
/*初始化18b20*/
void Init_18b20(void)
{
P3M1=0X00;
P3M0=0X40;
DQ=1; //復位18b20
delay_us(16);
DQ=0; //拉低DQ
delay_us(160);
DQ=1; //拉高DQ
delay_us(100);
}
/*讀一個字節*/
ReadOneChar(void)
{
uchar i=0;
uchar dat=0;
P3M1=0X00;
P3M0=0X00;
for(i=8;i>0;i--)
{
DQ=0; //給脈沖信號
dat>>=1;
delay_us(1);
DQ=1; //給脈沖信號
if(DQ)
{
dat|=0x80;
}
delay_us(20);
}
return(dat);
}
/*寫一個字節*/
void WriteOneChar(uchar dat)
{
uchar i=0;
P3M1=0X00;
P3M0=0X40;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_us(20);
DQ=1;
dat>>=1;
}
delay_us(8);
}
/*寫RAm中的三四字節的內容*/
void Write_Calm(void)
{
Init_18b20();
WriteOneChar(0xCC);//跳過讀序列號操作
WriteOneChar(0x4E);//寫溫度上下限及配置寄存器
WriteOneChar(50); //寫溫度上限
WriteOneChar(0); //寫溫度下限
WriteOneChar(0x7f);//默認十二位精度
}
/*讀取溫度*/
void ReadTemperature(void)
{
uchar low=0;
uchar high=0;
uint t=0;
Init_18b20();
WriteOneChar(0xCC); //跳過讀序列號操作
WriteOneChar(0x44); //啟動溫度轉換
LCD_write_Num(36,1,temp_int);
Init_18b20();
WriteOneChar(0xCC); //跳過讀序列號操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共9個可讀寄存器)前兩個就是溫度
low=ReadOneChar(); //讀取溫度最低值
high=ReadOneChar(); //讀取溫度最高值
fuhao=high&0xf0; //取得溫度的符號,fuhao==0溫度為正或0,否則為負
if(fuhao!=0)
{
t=65536-(high<<8|low)+1;
high=t/256;
low=t%256;
}
temp_point=(low&0x0f)*625;
low=low>>4; //低位右移4位,舍棄小數部分
high=high<<4; //高位左移4為,舍棄符號位
temp_int=high|low;
temp=temp_int%100*10+temp_point/1000;
}
復制代碼
完整代碼(包含頭文件)下載:
溫濕度.rar
(2.64 KB, 下載次數: 138)
2016-1-11 11:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
whengfu
時間:
2016-1-11 11:37
下載來學習一下樓主編程技巧
作者:
pdh
時間:
2016-1-13 12:28
可以的,其實我很菜的。
作者:
pengrubin
時間:
2016-8-7 05:51
喜歡。收下了。
作者:
Skylake
時間:
2016-12-13 14:03
感謝分享,十分有用
作者:
單片機熱愛796
時間:
2017-2-1 11:07
頂樓主,贊一個
作者:
wbsazqnmam
時間:
2017-2-18 11:40
下載來學習一下樓主編程技巧,頂一下
作者:
lyf898
時間:
2017-4-3 15:18
這個很有用
作者:
zhu2233912
時間:
2017-4-18 11:11
51黑有你更精彩
作者:
傾國傾城123
時間:
2017-4-21 17:25
都需要黑幣 好無奈
作者:
leifeng
時間:
2017-7-27 16:29
delay.h 文件怎么沒有
作者:
老師金
時間:
2018-5-6 13:14
學習學習
作者:
卡薩丁斯柯達
時間:
2018-6-26 02:19
編譯不過
作者:
huangzhiquan
時間:
2018-10-31 23:13
很給力哈
作者:
shyongc
時間:
2018-11-26 09:17
感謝樓主分享
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1