标题:
单片机dht11 LCD1602显示湿度值总为0为什么啊?编译没有问题,一个警告
[打印本页]
作者:
夜灯
时间:
2023-3-27 19:09
标题:
单片机dht11 LCD1602显示湿度值总为0为什么啊?编译没有问题,一个警告
#include <reg52.h>
#define uint unsigned int;
#define uchar unsigned char;
unsigned char rec[5]={'\o'};
unsigned char code array[]={"humi:"};
sbit ledl=pl^1;
sbit dht=Po^4;
sbit EN=P3^4;10
sbit rs=P3^5;
uint num;
void delayms (unsigned int xms) {
unsigned int i j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--); }
void delayus(unsigned char xus)
{
while(xus--);
}
void DHTll Start(void) {
dht=1;
delayus(2);
dht=0;
delayms(20);
dht=1;
delayus (40);
dht=1;
if(dht=-0)
{
while(!dht);
while(dht);}
unsigned char dhTll receive byte() {
unsigned char i;
60 unsigned char flag=o;
for(i=0;i<8;i++)
while(!dht);
delayus(30);
flag<<=1;
if(dht==1)
flag+=1;
while(dht);
}
return flag; }
void DHTll receive()
{
unsigned char R h,R L,receive;
dht=1;
delayus(30);
dht=0;
delayms(20);
dht=1;
delayus(30);
dht=1;
if(dht==0)
{
while(!dht);
while(dht);
R H=DHTll receive byte;
R L=DHTll receive byte;
receive=DHTll receive byte;
dht=0;
delayus(55);
dht=1;
if((R H+R L)==receive)
{
rec[0]=R H;
rec[1]=RL;
rec[2]=receive;
} } }
void Lcd1602 write cmd(unsigned char cmd) { RS=0; P0=cmd;
delayms(5);
EN=1;
delayms (5) ;
EN=0; }
void Lcd1602 write data(unsigned char date)
RS=1;
P0=date;
delayms (5);
EN=1;
delayms (5) ;
EN=0;}
void Lcd1602 init() {
Lcd1602 write cmd(0x38);
Lcd1602 write cmd(0x0c);
Lcd1602 write cmd(0x06);
Lcd1602 write cmd(0x0l); }
void DHT display() {
Lcd1602 write cmd(0x85);
Lcd1602 write data(rec[0]/10+0x30);
Lcd1602 write cmd(0x86);
Lcd1602 write data(rec[0]810+0x30);
Lcd1602 write cmd(0x87);
Lcd1602 write data('.');
Lcd1602 write cmd(0x88);
Lcd1602 write data(rec[1]/10+0x30);
Lcd1602 write cmd(0x89);
Lcd1602 write data('%');
}
void main ( ) {
Lcd1602 init0;
delayms(1500);
Lcd1602 write cmd(0x80);
for(num=0;num<5;num++)
Lcd1602 write data(array[num]);
}
while(1)
{
delayms(1000);
DHT11 Start();
DHT display();
}
}
作者:
夜灯
时间:
2023-3-27 19:15
大家有时间帮我看看啊,我改了好几天了,实在想不出来了。明天就到截止日期了
作者:
angmall
时间:
2023-3-27 21:35
错误的地方太多了
给你改了,对比一下就知道哪里错了。
#include <reg52.h>
#define uint unsigned int //;
#define uchar unsigned char //;
unsigned char rec[5]={'\0'}; //{'\o'};
unsigned char code array[]={"humi:"};
sbit led1=P1^1; //pl^1;
sbit dht=P0^4; //Po^4;
sbit EN=P3^4; //10
sbit rs=P3^5;
uint num;
void delayms(unsigned int xms) {
unsigned int i, j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void delayus(unsigned char xus)
{
while(xus--);
}
void DHTll_Start(void) {
dht=1;
delayus(2);
dht=0;
delayms(20);
dht=1;
delayus (40);
dht=1;
if(dht=-0)
{
while(!dht);
while(dht);}
}
unsigned char DHTll_receive_byte() {
unsigned char i;
//60
unsigned char flag=0;//o;
for(i=0;i<8;i++)
while(!dht);
delayus(30);
flag<<=1;
if(dht==1)
{
flag+=1;
while(dht);
}
return flag;
}
void DHTll_receive()
{
unsigned char R_h,R_L,receive;
dht=1;
delayus(30);
dht=0;
delayms(20);
dht=1;
delayus(30);
dht=1;
if(dht==0)
{
while(!dht);
while(dht);
R_H=DHTll_receive_byte(); //DHTll_receive byte;
R_L=DHTll_receive_byte(); //DHTll_receive byte;
receive=DHTll_receive_byte(); //DHTll receive byte;
dht=0;
delayus(55);
dht=1;
if((R_H+R_L)==receive)
{
rec[0]=R_H;
rec[1]=R_L;
rec[2]=receive;
}
}
}
void Lcd1602_write_cmd(unsigned char cmd) {
RS=0; P0=cmd;
delayms(5);
EN=1;
delayms (5) ;
EN=0;
}
void Lcd1602_write_data(unsigned char date)
{
RS=1;
P0=date;
delayms (5);
EN=1;
delayms (5) ;
EN=0;
}
void Lcd1602_init() {
Lcd1602_write_cmd(0x38);
Lcd1602_write_cmd(0x0c);
Lcd1602_write_cmd(0x06);
Lcd1602_write_cmd(0x0l);
}
void DHT_display() {
Lcd1602_write_cmd(0x85);
Lcd1602_write_data(rec[0]/10+0x30);
Lcd1602_write_cmd(0x86);
Lcd1602_write_data(rec[0]810+0x30);
Lcd1602_write_cmd(0x87);
Lcd1602_write_data('.');
Lcd1602_write_cmd(0x88);
Lcd1602_write_data(rec[1]/10+0x30);
Lcd1602_write_cmd(0x89);
Lcd1602_write_data('%');
}
void main() {
Lcd1602_init();
delayms(1500);
Lcd1602_write_cmd(0x80);
for(num=0;num<5;num++)
Lcd1602_write_data(array[num]);
//}
while(1)
{ //{
delayms(1000);
DHT11_Start();
DHT_display();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1