|
由於DHT11沒有顯示到小數
所以用了DHT22
在站內找了很多範例碼源
或許是本人的問題
測試後總無法正確的顯示
(感覺是Delay time有問題)
所以自己又花了些時間用DHT11可用的碼源修改碼源與調試DHT22成功
DHT11
R_H=DHT11_rec_byte(); //接收濕度高八位 DHT11/DHT22
R_L=DHT11_rec_byte(); //接收濕度低八位 DHT22
T_H=DHT11_rec_byte(); //接收溫度高八位 DHT11/DHT22
T_L=DHT11_rec_byte(); //接收溫度低八位 DHT22
DHT22主要是有小數點,所以低8位要使用。
//R_Dis=R_H; //DHT11
R_Dis=(R_H*256)+R_L;//DHT22
//T_Dis=T_H ; //DHT11
T_Dis=((T_H & 0x7F)*256)+T_L; //DHT22
在此分享
說明:
LCD1602接在Port 0
RS = P1^4;
RW = P1^5;
EN = P1^6;
DHT22 One wire : P3^6;
//-------main.c--------------
#include "common.h"
#include "Lcd.h"
#include "dht.h"
#define uint8 unsigned char
#define uint unsigned int
uchar abc[15]; //接收數據
//uint code temp[8]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //度C字型
//uchar Temp[1]={38};
/*顯示採集到的數據*/
void main()
{
uint i,j;
LCD_Init();
LCD_Clear();//清屏
Delay_1ms(1500);
while(1)
{
DHT_start();
DHT_receive();
if (j==0){
abc[0]='T';
abc[1]='e';
abc[2]='m';
abc[3]='p';;
abc[4]=':';
abc[5]='0'+T_Dis/100;;
abc[6]='0'+T_Dis%100/10;
abc[7]='.';
abc[8]='0'+T_Dis%10;
abc[9]=0xdf; //度
abc[10]='C';
abc[11]=' ';
abc[12]=' ';
abc[13]=' ';
abc[14]=' ';
}
if (j==1){
abc[0]='H';
abc[1]='u';
abc[2]='m';
abc[3]='i';
abc[4]=':';
abc[5]='0'+R_Dis/100;;
abc[6]='0'+R_Dis%100/10;
abc[7]='.';
abc[8]='0'+R_Dis%10;
abc[9]='%';
abc[10]=' ';
abc[11]=' ';
abc[12]=' ';
abc[13]=' ';
abc[14]=' ';
}
for(i=0;i<15;i++)
{
LCD_Write_Char(i,j,abc[i]);
}
//為了顯示度C
// Write1602_Str(0x40,8,temp); //攝氏度C->CGRAM的內存000中
//Write1602_Com(0x89); //LCD數字顯示位置
//Write1602_Dat(0);
//Delay_1ms(50);
j = !j;
}
}
|
-
-
DHT_LCD.rar
2019-9-20 10:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
32.9 KB, 下載次數: 133, 下載積分: 黑幣 -5
評分
-
查看全部評分
|