kscan(void)//键盘扫描子程序
{
uchar i,GPIO_KEY,KeyValue=160;
for(i=0;i<4;i++)
{
P1=_crol_(0xfe,i); //逐行扫描
GPIO_KEY=P1; //读取键值
GPIO_KEY=GPIO_KEY & 0xf0;//屏蔽低4位行值
if(GPIO_KEY!=0xf0)//高四位列值不全为1,说明有键按下,延时去抖动
{
Delay10ms(1);
GPIO_KEY=P1;
GPIO_KEY=GPIO_KEY & 0xf0;
if(GPIO_KEY!=0xf0)
{
GPIO_KEY=P1;
switch(GPIO_KEY)//根据按键所在的行与列位置确定键号
{
case 0xee:KeyValue=160;break;
case 0xde:KeyValue=150;break;
case 0xbe:KeyValue=140;break;
case 0x7e:KeyValue=130;break;
case 0xed:KeyValue=120;break;
case 0xdd:KeyValue=110;break;
case 0xbd:KeyValue=100;break;
case 0x7d:KeyValue=90;break;
case 0xeb:KeyValue=80;break;
case 0xdb:KeyValue=70;break;
case 0xbb:KeyValue=60;break;
case 0x7b:KeyValue=50;break;
case 0xe7:KeyValue=40;break;
case 0xd7:KeyValue=30;break;
case 0xb7:KeyValue=20;break;
case 0x77:KeyValue=10;break;
default:break;
}
while((GPIO_KEY & 0xf0)!=0xf0) // 等待按键释放
{
GPIO_KEY=P1;GPIO_KEY=GPIO_KEY & 0xf0;222