1、下述为程序:#inclu蟠校盯昂de <reg51.h>#define Keyvalue P1 //按下的键的代号#define Digvalue P0 //用宏定义来定义一下数码管的发送数据端口typedef unsigned int ut;typedef unsigned char uc;ut k;sbit LSA=P2^2; //定义三八译码器的三个输入端口sbit LSB=P2^3;sbit LSC=P2^4;ut smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//从0~15的十六进制编码void delay(ut i) //延时函数{while(i)i--;}void anjian() //检测按键是否按下,若按键按下则给k附上按下的键的序号{ut a;Keyvalue=0x0f;if(Keyvalue!=0x0f){delay(1000);if(Keyvalue!=0x0f){Keyvalue=0x0f;switch(Keyvalue){case(0x07):k=0;break;case(0x0b):k=1;break;case(0x0d):k=2;break;case(0x0e):k=3;break;}Keyvalue=0xf0;switch(Keyvalue){case(0x70):k=k;break;case(0xb0):k=k+4;break;case(0xd0):k=k+8;break;case(0xe0):k=k+12;break;}}}while((a<50)&&(Keyvalue!=0x0f)){delay(1000);a++;}}void main(){LSA=0; //让第一个数码管显示数字LSB=0;LSC=0;while(1){anjian();Digvalue=smgduan[k];//显示数字}}