vjack 发表于 2022-12-7 21:02 喔喔我知道了 谢谢大哥!新手不太懂不好意思~~ |
glinfei 发表于 2022-12-7 20:01 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; 我LCD数据线和图核对后,LCD还是没有显示 |
仔细看看,你把LCD数据线接到哪里了 |
vjack 发表于 2022-12-7 18:58 求大佬帮忙看看是什么问题!! |
#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=P1^2; sbit DSIO=P1^4; sbit SCL=P1^3; 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(1); Dat=0; //????? delayms(20); //????18ms Dat=1; //????,????DHT11???? delayus(3); //?????????,??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(); } } |
代码在下面 |