单片机89C51——扫描键盘

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;//设定键值

}

}

}

程序可能不是很严紧,但其本原理就是这样了

相关文档
最新文档