#includereg51.h#includeintrins.hvoiddelay(void){unsignedchara,b;for(a=0;a200;a++)for(b=0;b200;b++);}unsignedcharKey_Scan();voidmain(void){unsignedcharledValue,keyNum;ledValue=0x01;while(1){keyNum=Key_Scan();switch(keyNum){case(0xFE):ledValue=0x01;break;case(0xFD)://返回按键K2的数据ledValue=0x02;break;case(0xFB)://返回按键K3的数据ledValue=0x04;break;case(0xF7)://返回按键K4的数据ledValue=0x08;break;case(0xEF)://返回按键K5的数据ledValue=0x10;break;case(0xDF)://返回按键K6的数据ledValue=0x20;break;case(0xBF)://返回按键K7的数据ledValue=0x40;break;case(0x7F)://返回按键K8的数据ledValue=0x80;break;default:break;}P0=ledValue;//点亮LED灯}}/********************************************************************************函数名:Key_Scan()*函数功能:扫描键盘*输入:无*输出:读取到的键值*******************************************************************************/unsignedcharKey_Scan(){unsignedcharkeyValue=0,i;//保存键值//--检测按键1--//if(P1!=0xFF)//检测按键K1是否按下{voiddelay(void){unsignedchara,b;for(a=0;a200;a++)for(b=0;b200;b++);}if(P1!=0xFF)//再次检测按键是否按下{keyValue=P1;i=0;while((i50)&&(P1!=0xFF))//检测按键是否松开{Delay10ms(1);i++;}}}returnkeyValue;//将读取到键值的值返回}