|
剛學(xué)C51單片機(jī),想學(xué)學(xué)DHT11在LCD顯示,遇到了濕度和溫度都是00的問(wèn)題,請(qǐng)教一下各位大神這是什么問(wèn)題導(dǎo)致的~
DHT11.PNG (19.49 KB, 下載次數(shù): 26)
下載附件
2022-12-7 21:53 上傳
代碼是- #include "reg52.h"
- #include "intrins.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit Dat=P2^0;
- sbit RS=P2^6;
- sbit RW=P2^5;
- sbit EN=P2^7;
- sbit CE=P3^5;
- sbit DSIO=P3^4;
- sbit SCL=P3^6;
- uchar code talble[]="0123456789";
- uchar read[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //??????????????????????????
- uchar time[]={0x21,0x53,0x15,0x18,0x09,0x05,0x20}; //??????????????????????BCD?
- uchar num0=0,num1=0,num2=0;
- void delayms(uint z) //12MHz?,z=1??1ms
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=122;y>0;y--);
- }
- void delayus(uchar z) //12MHz?,z=1??17us
- {
- while(z--);
- }
- /************************************??*************************************/
- //??
- /******************************DHT11??????********************************/
- uchar Read_Byte()
- {
- uchar m,n,sum;
- for(m=0;m<8;m++)
- {
- while(!Dat); //??????????50us????,??50us??
- delayus(3); //??50us?????
- sum<<=1; //????,?????????0??1???,??????
- n=Dat; //???
- if(n==1)
- {
- sum=sum|0x01;
- while(!Dat); //???????
- }
- else
- {
- sum=sum|0x00;
- }
- delayus(3);
- }
- return (sum);
- }
- void dht11()
- {
- uchar m0,m1,m2,m3,m4;
- Dat=1;
- delayms(2);
- Dat=0; //?????
- delayms(30); //????18ms
- Dat=1; //????,????DHT11????
- delayus(30); //?????????,??20~40u?,??DHT11????
- if(Dat==0) //??DHT11???????,?DHT11??????,????????80us,?????80us??????
- {
- while(!Dat); //???????,????????
- while(Dat); //???????,???????80us,??????,???????
- m0=Read_Byte(); //????????
- m1=Read_Byte(); //????????
- m2=Read_Byte(); //????????
- m3=Read_Byte(); //????????
- m4=Read_Byte(); //?????
- }
- if(m4==(m0+m1+m2+m3)) //????,????????,??????????
- {
- num0=m0;
- num1=m2;
- }
- else
- {
- num0=num0;
- num1=num1;
- }
- }
- /************************************DS1302*************************************/
- void Ds1302_Write_Byte(uchar addr,uchar dat) //?????????????
- {
- uchar i;
- CE=0; //CE????,??????
- SCL=0; //??????
- CE=1; //CE??,??????
- for(i=0;i<8;i++) //????,??8???
- {
- DSIO=addr&0x01; //????????
- addr>>=1; //?????1?
- SCL=1; //????????DS1302
- _nop_();
- SCL=0;
- _nop_();
- }
- for(i=0;i<8;i++) //?????
- {
- DSIO=dat&0x01;
- dat>>=1;
- SCL=1;
- _nop_();
- SCL=0;
- _nop_();
- }
- CE=0;
- }
- uchar Ds1302_Read_Byte(uchar addr) //?????????
- {
- uchar i,dat0,dat1;
- CE=0; //CE????,???
- SCL=0; //SCL????,???
- CE=1; //??DS1302??,CE??
- for(i=0;i<8;i++)
- {
- DSIO=addr&0x01; //?????,??addr????,?????DSIO
- addr>>=1; //???????,????,???0
- SCL=1; //??SCL????,????,???????,?????DS1302,??????,?????
- _nop_();
- SCL=0; //?SCL??,??????????
- _nop_();
- }
- for(i=0;i<8;i++)
- {
- dat0=DSIO;
- dat1=(dat1>>1)|(dat0<<7);
- SCL=1;
- _nop_();
- SCL=0;
- _nop_();
- }
- CE=0;
- SCL=1;
- DSIO=0;
- DSIO=1;
- return dat1;
- }
- void DS1302_Init()
- {
- Ds1302_Write_Byte(0x8e,0x00); //????????
- Ds1302_Write_Byte(0x80,0x21); //?????
- Ds1302_Write_Byte(0x82,0x53); //?????
- Ds1302_Write_Byte(0x84,0x15); //?????
- Ds1302_Write_Byte(0x86,0x18); //?????
- Ds1302_Write_Byte(0x88,0x09); //?????
- Ds1302_Write_Byte(0x8a,0x05); //????
- Ds1302_Write_Byte(0x8c,0x20); //????
- Ds1302_Write_Byte(0x8e,0x80); //?????
- }
- void Read_time()
- {
- uchar i;
- for(i=0;i<7;i++)
- {
- time[i]=Ds1302_Read_Byte(read[i]);
- }
- }
- /************************************??*************************************/
- //??
- /**********************************1602??*************************************/
- bit Busy()
- {
- bit bsy;
- RS=0;
- RW=1;
- EN=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- bsy=(bit)(P0&0x80);
- EN=0;
- return (bsy);
- }
- void Wr_com(uchar com)
- {
- while(Busy());
- RS=0;
- RW=0;
- P0=com;
- delayus(1);
- EN=1;
- EN=0;
- }
- void Wr_dat(uchar dat)
- {
- while(Busy());
- RS=1;
- RW=0;
- P0=dat;
- delayus(1);
- EN=1;
- EN=0;
- }
- void LCD_Init()
- {
- Wr_com(0x38);
- Wr_com(0x0C);
- Wr_com(0x06);
- Wr_com(0x01);
- }
- void display()
- {
- Wr_com(0x80);
- Wr_dat('2');
- Wr_dat('0');
- Wr_dat('0'+time[6]/16); //?
- Wr_dat('0'+(time[6]&0x0f));
- Wr_dat('-'); //-
- Wr_dat('0'+time[4]/16); //?
- Wr_dat('0'+(time[4]&0x0f));
- Wr_dat(0xb0); //-
- Wr_dat('0'+time[3]/16); //?
- Wr_dat('0'+(time[3]&0x0f));
- Wr_com(0x80+0x0b);
- Wr_dat('0'+(time[5]&0x0f)); //??
- Wr_com(0x80+0x0d);
- Wr_dat(talble[num0/10]); //??
- Wr_dat(talble[num0%10]);
- Wr_dat(0x25); //%
- Wr_com(0xC0);
- Wr_dat('0'+time[2]/16); //?
- Wr_dat('0'+(time[2]&0x0f));
- Wr_dat(0x3a); //:
- Wr_dat('0'+time[1]/16); //?
- Wr_dat('0'+(time[1]&0x0f));
- Wr_dat(0x3a); //:
- Wr_dat('0'+time[0]/16); //?
- Wr_dat('0'+(time[0]&0x0f));
- Wr_com(0xC0+0x0a);
- Wr_dat(talble[num1/10]); //??
- Wr_dat(talble[num1%10]);
- Wr_dat(0x2e); //.
- Wr_dat(talble[0]);
- Wr_dat(0xdf); //
- Wr_dat(0x43); //C
- }
- void main()
- {
- uint a;
- LCD_Init();
- DS1302_Init();
- while(1)
- {
- a++;
- if(a==20)
- {
- a=0;
- dht11();
- }
- Read_time();
- display();
- }
- }
復(fù)制代碼
|
|