如用51系列P1口做键盘扫描:(当然有的单片机要考虑IO口的输入输出设置,51单片机为准双向IO口所以不需要考虑IO方向的问题)
P1=0XF0;//先设置P1口为四个高电平,四个低电平;
if(P1!=0XF0)//如果P1口的电平发生变化说明有按键键
{
//这里要根据晶振延时,一般延时15MS左右,以消除键下时电平抖动
if((P1&0X80)==0)//p1.7引脚出现低电平,就是跟最高位IO连接的按键动作
{
P1=0X0F;//改变下电平,原先低电平改变为高,原先高电平则低,这是为了找到动作按键另一IO
if((P1&0X1)==0)//是不是P1.0与P1.7交叉按键动作
{
KEY=01;//设定键值
}
else if((P1&0X2)==0)//是不是P1.1与P1.7交叉按键动作
{
KEY=2;//设定键值
}
else if((P1&0X4)==0)//是不是P1.2与P1.7交叉按键动作
{
KEY=3//设定键值
}
else if((P1&0X8)==0)//是不是P1.3与P1.7交叉按键动作
{
KEY=4;//设定键值
}
}
else if((P1&0X40)==0)//P1.6引脚上的按键动作
{
P1=0X0F;//
if((P1&0X1)==0)//
{
KEY=5;//设定键值
}
else if((P1&0X2)==0)//
{
KEY=6;//设定键值
}
else if((P1&0X4)==0)//
{
KEY=7//设定键值
}
else if((P1&0X8)==0)//
{
KEY=8;//设定键值
}
}
else if((P1&0X20)==0)
{
P1=0X0F;//
if((P1&0X1)==0)//
{
KEY=9;//设定键值
}
else if((P1&0X2)==0)//
{
KEY=10;//设定键值
}
else if((P1&0X4)==0)//
{
KEY=11//设定键值
}
else if((P1&0X8)==0)//
{
KEY=12;//设定键值
}
}
else if((P1&0X10)==0)
{
P1=0X0F;//
if((P1&0X1)==0)//
{
KEY=13;//设定键值
}
else if((P1&0X2)==0)//
{
KEY=14;//设定键值
}
else if((P1&0X4)==0)//
{
KEY=15//设定键值
}
else if((P1&0X8)==0)//
{
KEY=16;//设定键值
}
}
}