#i nclude<reg51f.h> #i nclude<intrins.h>
bit FLAG=0; char m,ptr=0; static const char tab[16]={0x01,0x02,0x03,0x0c, 0x04,0x05,0x06,0x0d, 0x07,0x08,0x09,0x0e, 0x0a,0x00,0x0b,0x0f}; char number[4]={0x00,0x00,0x00,0x00}; void delay(void) { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<120;j++) ; } void scan(void) { char a1=0xf7 ,i; FLAG=0; ptr=0; for(i=0;i<4;i++) {   1=a1; m=P1; switch(m & 0xf0) { case 0x70: ptr=i*4; FLAG=1; break; case 0xB0: ptr=i*4+1; FLAG=1; break; case 0xD0: ptr=i*4+2; FLAG=1; break; case 0xE0: ptr=i*4+3; FLAG=1; break; default: break; } if(FLAG==1)break; a1=a1>>1|0x80; } return; } void frequency(void) { unsigned char i=0x00; delay(); while(m==P1) ; while(i<4) { scan(); if(FLAG==1) { if(tab[ptr]==0x0b) { P0=0xff; return;} else { if(tab[ptr]<0x0a) { number=tab[ptr]; switch(tab[ptr]) { case 0x00 0=0x00; break; case 0x01 0=0x01; break; case 0x02 0=0x02; break; case 0x03 0=0x03; break; case 0x04 0=0x04; break; case 0x05 0=0x05; break; case 0x06 0=0x06; break; case 0x07 0=0x07; break; case 0x08 0=0x08; break; case 0x09 0=0x09; break; default: break; } i++; } } delay(); while(m==P1) ; delay(); } delay(); } do { scan(); }while(FLAG==0); if(tab[ptr]==0x0a) { P0=0x0a; } else {   0=0xff; return; } delay(); while(m==P1) ; delay(); return; }
void temp(void) { if(tab[ptr]==0x0c) frequency(); //if(tab[ptr]==0x0d) //zhengfu(); delay(); while(m==P1) ; delay(); return; } void main() { while(1) { scan(); if(FLAG==1) temp(); delay();
} }
|