久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于15w系列單片機的溫濕度傳感器DHT11程序
[打印本頁]
作者:
蘇海
時間:
2020-2-18 09:07
標題:
基于15w系列單片機的溫濕度傳感器DHT11程序
親測可行。頭文件網上隨便搜都有。LCD 數據口是P4端口。
IMG_20200218_090405.jpg
(2.01 MB, 下載次數: 37)
下載附件
2020-2-18 09:06 上傳
單片機源程序如下:
#include<15w.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P5^5; //定義端口
sbit RW = P5^4;
sbit EN = P5^3;
sbit io=P1^0;//dht11data端接單片機的P1^0口//
typedef bit BOOL;//此聲明一個布爾型變量即真或假//
uchar data_byte;
uchar RH,RL,TH,TL;
void Delay25ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 2;
j = 13;
k = 237;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay8us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
i = 19;
while (--i);
}
void Delay27us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 72;
while (--i);
}
/**************************dht11測試某塊*************************************/
void start()//開始信號
{
io=1;
Delay8us();
io=0;
Delay25ms();// 主機把總線拉低必須大于18ms保證DHT11能檢測到起始信號
io=1; //發送開始信號結束后拉高電平延時20-40us
Delay8us();//以下三個延時函數差不多為24us符合要求
Delay8us();
Delay8us();
}
uchar receive_byte()//接收一個字節//
{
uchar i,temp;
for(i=0;i<8;i++)//接收8bit的數據
{
while(!io);//等待50us的低電平開始信號結束
Delay27us();//開始信號結束之后延時26us-28us以下三個延時函數
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()//接收數據//
{
uchar T_H,T_L,R_H,R_L,check,num_check,i;
start();//開始信號//
io=1; //主機設為輸入判斷從機DHT11響應信號
if(!io)//判斷從機是否有低電平響應信號//
{
while(!io);//判斷從機發出 80us 的低電平響應信號是否結束//
while(io);//判斷從機發出 80us 的高電平是否結束如結束則主機進入數據接收狀態
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的延時
Delay8us();
io=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;
}
}
}
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函數
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
P4= 0xFF;
RS=0;
RW=1;
EN=0;
_nop_();
EN=1;
return (bit)(P4 & 0x80);
}
/*------------------------------------------------
寫入命令函數
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙則等待
RS=0;
RW=0;
EN=1;
P4= com;
_nop_();
EN=0;
}
/*------------------------------------------------
寫入數據函數
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙則等待
RS=1;
RW=0;
EN=1;
P4= Data;
_nop_();
EN=0;
}
/*------------------------------------------------
清屏函數
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
寫入字符函數
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函數
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*顯示模式設置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*顯示關閉*/
LCD_Write_Com(0x01); /*顯示清屏*/
LCD_Write_Com(0x06); /*顯示光標移動設置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*顯示開及光標設置*/
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
全部資料51hei下載地址:
DHT11.rar
(25.27 KB, 下載次數: 16)
2020-2-18 09:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人激情视频在线观看
|
www.天天操.com
|
亚洲精品中文在线观看
|
久久99精品久久久久蜜桃tv
|
日韩在线免费
|
视频一区二区三区中文字幕
|
日美女逼逼
|
美女在线观看av
|
综合久久久
|
亚洲va欧美va天堂v国产综合
|
在线观看中文字幕视频
|
亚洲福利在线观看
|
欧美日韩成人在线
|
99国产欧美
|
亚洲欧美日韩精品久久亚洲区
|
最近最新中文字幕
|
天天躁人人躁人人躁狂躁
|
国产成人精品在线
|
国产乱码精品一区二三赶尸艳谈
|
久久99精品久久久久久
|
亚洲 欧美 激情 另类 校园
|
黄色一级视频免费
|
久久久综合网
|
国产精品免费观看视频
|
丝袜天堂
|
亚洲精品在线播放
|
久久精品国产一区二区三区
|
欧日韩在线观看
|
一级片免费视频
|
国产成人免费在线观看
|
精品国产一区探花在线观看
|
奇米影视首页
|
日本爱爱
|
99久热在线精品视频观看
|
久久国产精品免费视频
|
亚洲精品久久久久久国产精华液
|
黄色在线播放视频
|
成人性视频免费网站
|
aaa在线观看
|
中文一区
|
91久久精品一区二区二区
|