鍵盤掃描函數(shù),顯示函數(shù)都沒問題,都測(cè)試過了,就主函數(shù)那一塊,一直調(diào)試不出來,要實(shí)現(xiàn)的功能就是由鍵盤輸入,比如說輸入2345,就在鍵盤上分別按2345鍵,然后由數(shù)碼管顯示出來 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit wela=P2^7; sbit dula=P2^6; uchar temp,num,num1,bitnum=0,i,flag; uint value,temp1=1; uchar keybuffer[4]; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
void delay(x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); }
void display(uint num) { uchar ge,shi,bai,qian; ge=num%10; shi=num%100/10; bai=num%1000/100; qian=num/1000;
wela=1; P0=0xf7; wela=0; dula=1; P0=table[ge]; dula=0; delay(5);
wela=1; P0=0xfb; wela=0; dula=1; P0=table[shi]; dula=0; delay(5);
wela=1; P0=0xfd; wela=0; dula=1; P0=table[bai]; dula=0; delay(5);
wela=1; P0=0xfe; wela=0; dula=1; P0=table[qian]; dula=0; delay(5);
}
uchar keyscan() {
P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xee:num=1;flag=1; break; case 0xde:num=2;flag=1; break; case 0xbe:num=3;flag=1; break; case 0x7e:num=4;flag=1; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }
P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xed:num=5;flag=1; break; case 0xdd:num=6;flag=1; break; case 0xbd:num=7;flag=1; break; case 0x7d:num=8;flag=1; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }
P1=0xfb; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb:num=9;flag=1; break; case 0xdb:num=10;flag=1; break; case 0xbb:num=11;flag=1; break; case 0x7b:num=12;flag=1; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }
P1=0xf7; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7:num=13;flag=1; break; case 0xd7:num=14;flag=1; break; case 0xb7:num=15;flag=1; break; case 0x77:num=16;flag=1; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } return num; }
void main() { while(1) {
while(num1<10&bitnum<4) { num1=keyscan(); keybuffer[bitnum]=num1; if(flag==1) { bitnum++; flag=0; } } for(i=0;i<bitnum;i++) { value=keybuffer[bitnum-i]*temp1+value; temp1=temp1*10; } display(value); } }
|