void keyscan() // 键盘扫描程序函数
{
uchar temp;//P2端口中转变量
uint num=20;//键值
P2=0xfe;
if(P2!=0xfe)//第一行
{
Delay(20);// 延迟20ms
if(P2!=0xfe)
{
temp=P2&0xf0;
switch(temp) //判断哪一列
{
case 0xe0:num=0; break; //7
case 0xd0:num=1; break; //8
case 0xb0:num=2; break; //9
case 0x70:num=3; break; //÷
}
}
while(P2!=0xfe);//按键放开
}
P2=0xfd;
if(P2!=0xfd) //第二行
{
Delay(20);//延时
if(P2!=0xfd)
{
temp=P2&0xf0;
switch(temp)//判断哪一列
{
case 0xe0:num=4; break; //4
case 0xd0:num=5; break; //5
case 0xb0:num=6; break; //6
case 0x70:num=7; break; //×
}
}
while(P2!=0xfd);//等待按键释放
}
P2=0xfb;
if(P2!=0xfb)//第三行
{
Delay(20);//延时
if(P2!=0xfb)
{
temp=P2&0xf0;
switch(temp)//检测哪列按下
{
case 0xe0:num=8; break; //1
case 0xd0:num=9; break; //2
case 0xb0:num=10; break; //3
case 0x70:num=11; break; //-
}
}
while(P2!=0xfb);//按键释放
}
P2=0xf7;
if(P2!=0xf7)//第四行
{
Delay(20);//延时
if(P2!=0xf7)
{
temp=P2&0xf0;
switch(temp)//检测哪列按下
{
case 0xe0:num=12; break; //清0键
case 0xd0:num=13; break; //数字0
case 0xb0:num=14; break; //等于键
case 0x70:num=15; break; //加
}
}
while(P2!=0xf7);//按下释放
}
}//P2!=0xf7
}