单片机89C51——扫描键盘
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如用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;//设定键值
}
}
}
程序可能不是很严紧,但其本原理就是这样了