#include<reg51.h>char scan_key(void);void delay(unsigned int i);sbit P30=P3^0;void main(){unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char led1[]={0xbf,0x8c,0x86};unsigned char i;P1=led1[0];P30=1;P0=0xff;while(1){i=scan_key();if(i==-1)continue;else if(i!=8){P1=led[i];delay(1000);P1=led1[2];delay(2000);P1=led1[0];}else{P1=led[i];delay(1000);P1=led1[1];P30=0;delay(2000);P1=led1[0];P30=1;}}}char scan_key(){char i,temp,m,n;bit find=0;P0=0xf0;i=P2;i&=0x0f;if(i!=0x0f){delay(4);i=P2;i&=0x0f;if(i!=0x0f){for(i=0;i<4;i++){P0=0xfe<<i;temp=~P2;temp=temp&0x0f;if(temp!=0x00){n=i;find=1;switch(temp){case 0x01:m=0;break; case 0x02:m=1;break;case 0x04:m=2;break;case 0x08:m=3;break;default:break;}break;}}}}if(find==0)return-1;else return(n*4+m);}void delay(unsigned int i){unsigned int k,j;for(j=0;j<i;j++)for(k=0;k<120;k++);}
P1=led1[0];
P30=1;
P0=0xff;
while(1)
{
i=scan_key();
if(i==-1)continue;//iæ¯æ 符å·æ°ï¼æä¹å¯è½çäº-1ï¼
é®çæ«æä¹æäºé®é¢ï¼æä¹ä½åä½åæ«æç ï¼æ£æµçè¿æ¯ä½åä½çå¼ï¼èä¸
P0=0xfe<<i;è¿æ ·ç§»ä½çç»ææ¯ä½ä½å¡«0ï¼ä¸æ¯å¾ªç¯ç§»ä½ï¼è¾¾ä¸å°æ³è¦çææã