| 1,优化后的程序: #include"reg51.h" #define U16 unsigned int #define U8 unsigned char U16 temp=550,temp1; U8 nn; bit flag; unsigned char dd0[]=" machine ON"; unsigned char dd1[]="machine OFF"; sbit rs=P1^1; sbit en=P1^0; //Use really P5.4,test P2.4 sbit D0=ACC^0; sbit D1=ACC^1; sbit D2=ACC^2; sbit D3=ACC^3; sbit D4=ACC^4; sbit D5=ACC^5; sbit D6=ACC^6; sbit D7=ACC^7; void delay(U16 us) { U8 m; while(us--) for(m=0;m<30;m++); } void w1602c(U8 dat) { rs=0; en=0; ACC=dat; P30=D0; P31=D1; P32=D2; P33=D3; P14=D4; P15=D5; P36=D6; P37=D7; delay(3); en=1; delay(3); en=0; } void w1602d(U8 dat) { ACC=dat; P30=D0; P31=D1; P32=D2; P33=D3; P14=D4; P15=D5; P36=D6; P37=D7; rs=1; en=0; delay(3); en=1; delay(3); en=0; } void init1602() { w1602c(0x38); w1602c(0x06); w1602c(0x0c); w1602c(0x01); } void InitADC() { P1ASF =0x04; //P1.2 ADC_IN - + ADC_RES=0; ADC_RESL=0; ADC_CONTR =0xe2;//ON_POWER delay(2); } void disp(U16 dd) { w1602d(dd/1000+0x30); w1602d((dd%1000)/100+0x30); w1602d(((dd%1000)%100)/10+0x30); w1602d(dd%10+0x30); } U16 ADC10() { // bit r; //test use InitADC(); ADC_CONTR |=0x0a; delay(2); ////*******Use really************// while(!(ADC_CONTR & 0x10)); // ADC_CONTR &=~0x10; // temp=ADC_RES; // temp=temp<<2; // temp |=ADC_RESL; // ////*********end Use really******// ////////**test**************// // if(r==0) // // { // // temp++; // // if(temp>620)r=1; // // } // // if(r==1) // // { // // temp--; // // if(temp<490)r=0; // // } // //////*****test end ******// return temp; } void main() { U8 k; init1602(); P1M1=0x40; //P1.2 DAC_in P1M0=0x00; CLK_DIV &=~0x20; while(1) { temp1=ADC10(); if(temp<500)flag=1; while(flag) { temp1=ADC10(); if(temp1>602)flag=0; P13=1; w1602c(0x80); for(k=0;k<11;k++) w1602d(dd0[k]); w1602c(0xc0); disp(temp1); delay(2000); } ////////////////// while(!flag) { temp1=ADC10(); if(temp1<500)flag=1; P13=0; w1602c(0x80); for(k=0;k<11;k++) w1602d(dd1[k]); w1602c(0xc0); disp(temp1); delay(2000); } } } #include"reg51.h" #define U16 unsigned int #define U8 unsigned char U16 temp=600,temp1; U8 nn; bit flag; unsigned char dd0[]=" SHANXI Dianzi"; unsigned char dd1[]=" VOIT_H:"; sbit rs=P3^7; sbit en=P5^4; sbit D0=ACC^0; sbit D1=ACC^1; sbit D2=ACC^2; sbit D3=ACC^3; sbit D4=ACC^4; sbit D5=ACC^5; sbit D6=ACC^6; sbit D7=ACC^7; void delay(U16 ms) { U8 m; while(ms--) for(m=0;m<30;m++); } void w1602c(unsigned char dat) { ACC=dat; P11=D0; P12=D1; P13=D2; P14=D3; P15=D4; P32=D5; P33=D6; P36=D7; rs=0; en=0; delay(2); en=1; delay(2); en=0; } void w1602d(unsigned char dat) { ACC=dat; P11=D0; P12=D1; P13=D2; P14=D3; P15=D4; P32=D5; P33=D6; P36=D7; rs=1; en=0; delay(2); en=1; delay(2); en=0; } void init1602() { w1602c(0x38); w1602c(0x06); w1602c(0x0c); w1602c(0x01); } void InitADC() { P1ASF =0x01; //P1.2 ADC_IN ADC_RES=0; ADC_RESL=0; ADC_CONTR =0xE2;//ON_POWER delay(2); } void disp(unsigned int dd) { char i; for(i=0;i<8;i++) w1602d(dd1); w1602d(dd/1000+0x30); w1602d((dd%1000)/100+0x30); w1602d(((dd%1000)%100)/10+0x30); w1602d(dd%10+0x30); } unsigned int ADC10() { char nn; InitADC(); ADC_CONTR=0xea; nn=10; while(nn--); while(!(ADC_CONTR & 0x10)); ADC_CONTR &=~0x10; temp=ADC_RES; temp=temp<<2; temp |=ADC_RESL; return temp; } void main() { unsigned char k; init1602(); P1M1=0x01; P1M0=0x00; CLK_DIV &=~0x20; while(1) { temp1=ADC10(); if(temp1<503) //for water { delay(30); temp1=ADC10(); if(temp1<503) //yes or no flag=1; // yes! start up water else // no! { flag=0; P30=0; //close water } } else //no water { flag=0; P30=0; //close water } while(flag) //up water { P30=1; //start machine delay(30); temp1=ADC10(); w1602c(0x80); for(nn=0;nn<14;nn++) w1602d(dd0[nn]); delay(100); w1602c(0xc0); disp(temp1); if(temp1>550) //full? No go on! { P30=0; //Yes close machine flag=0; //end } delay(10); } w1602c(0x80); for(k=0;k<14;k++) w1602d(dd0[k]); delay(20); w1602c(0xc0); disp(temp1); delay(10); } } //////==================================== #include"reg51.h" #define U16 unsigned int #define U8 unsigned char U16 temp=450,temp1,temp2; U8 nn; bit flag; unsigned char dd0[]=" SHANXI Dianzi"; unsigned char dd1[]=" VOIT_H:"; sbit rs=P3^7; sbit en=P5^4; //Use really P5.4,test P2.4 sbit D0=ACC^0; sbit D1=ACC^1; sbit D2=ACC^2; sbit D3=ACC^3; sbit D4=ACC^4; sbit D5=ACC^5; sbit D6=ACC^6; sbit D7=ACC^7; void delay(U16 ms) { U8 m; while(ms--) for(m=0;m<20;m++); } void w1602c(U8 dat) { ACC=dat; P11=D0; P12=D1; P13=D2; P14=D3; P15=D4; P32=D5; P33=D6; P36=D7; rs=0; en=0; delay(2); en=1; delay(2); en=0; } void w1602d(U8 dat) { ACC=dat; P11=D0; P12=D1; P13=D2; P14=D3; P15=D4; P32=D5; P33=D6; P36=D7; rs=1; en=0; delay(2); en=1; delay(2); en=0; } void init1602() { w1602c(0x38); w1602c(0x06); w1602c(0x0c); w1602c(0x01); } void InitADC() { P1ASF =0x01; //P1.0 ADC_IN - + ADC_RES=0; ADC_RESL=0; ADC_CONTR =0xe0;//ON_POWER delay(2); } void disp(U16 dd) { char i; for(i=0;i<8;i++) w1602d(dd1); w1602d(dd/1000+0x30); w1602d((dd%1000)/100+0x30); w1602d(((dd%1000)%100)/10+0x30); w1602d(dd%10+0x30); } unsigned int ADC10() { //bit r; //test use InitADC(); ADC_CONTR |=0x08; delay(2); ////*******Use really************// while(!(ADC_CONTR & 0x10)); ADC_CONTR &=~0x10; temp=ADC_RES; temp=temp<<2; temp |=ADC_RESL; ////*********end Use really********// ////////**test**************// //if(r==0) // //{ // //temp++; // //if(temp>551)r=1; // //} // //if(r==1) // //{ // //temp--; // //if(temp<500)r=0; // //} // ////////*****test end ******// return temp; } void main() { unsigned char k; init1602(); P1M1=0x01; P1M0=0x00; CLK_DIV &=~0x20; while(1) { temp1=ADC10(); if(temp1<503) //for water { delay(30); temp1=ADC10(); if(temp1<503) //yes or no flag=1; // yes! start up water else // no! { flag=0; P30=0; //close water } } else //no water { flag=0; P30=0; //close water } while(flag) //up water { P30=1; //start machine delay(30); temp2=ADC10(); temp1=temp2; w1602c(0x80); for(nn=0;nn<14;nn++) w1602d(dd0[nn]); delay(100); w1602c(0xc0); disp(temp1); delay(1000); if(temp1>550) //full? No go on! { P30=0; //Yes close machine flag=0; //end } delay(10); } w1602c(0x80); for(k=0;k<14;k++) w1602d(dd0[k]); delay(20); w1602c(0xc0); disp(temp1); delay(1000); } } |
| 欢迎光临 迅维网 (https://www.chinafix.com/) | Powered by Discuz! X3.4 |