键盘扫描是最 为常用的工作方式,扫描方式又可分为程序程扫描、定时扫描和中断扫描。程序扫描是指在 特定的程序位置段上安排键盘扫描程序读取键盘状态。定时扫描是指利用单片机内部或扩展 的定时器产生定时中断,在中断中进行键盘扫描的工作方式。中断扫描指有按键按下时,键
盘电路发出中断申请,中断程序负责扫描键盘的工作方式。程序扫描和定时扫描电路结构完 同,只是在程序设计实际上有差别。不论哪一种扫描方式,键盘程序都应当完成,判断 键是否被按下、按键削抖处理、按键定位等操作键盘。

扫描法实际上是先使列(行)线全输出低电平,然后判断行(列)线状态 ,若行线全为
高电平,表示无键被按下;若行线不全为高电平表示有键被按下,然后依次使列线为低电平,
再判断行线状态,当行线全为高电平时,表示被按下的键不在本列;当行线不全为高电平时,
表示被按下的键在本列,把此时的行线状态与列线状态和在一起即为被按下的键的位置
(
1
)检测出是否有键铵下。方法是
P1.4
~
P1.7
输出全
1
,然后读
P1.0
~
P1.3
的状态,若
为全
1
则无键闭合,否则表示有键闭合。
(
2
)有键闭合后,调用
10
~
20ms
延时子程序消除按键抖动的影响。
(
3
)确认键已稳定闭合后,接着判断为哪一个键闭合。方法是对键盘进行扫描,即依次
给每一条列线送
0
,其余各列都为
1
,并检测每次扫描的行状态。每当扫描输出某一列为
0
时,相继读入行线状态。若为全
1
,表示为
0
的这列上没有键闭合。若不为全
1
,表示为
0
的这列上有键闭合。确定了闭合键的位置后,就可计算出键值,即产生键码
为了避免cpu无效运行,可引入中断。利用中断方式,无键按下时,CPU 处理其他工作而不必进行键的扫描;有键被按下时,
通过硬件电路向
CPU
申请键盘中断,在键盘中断服务程序中完成键盘处理。这样可提高
CPU
的工作效率
扫描法对键的识别采用逐行(列)扫描的方法获得键的位置,当被按下的键在最后一行
时需要扫描
N
次(
N
为行数),当
N
比较大时键盘工作速度较慢,而线反转法则不论键盘有
多少行和多少列只需经过两步即可获得键的位置,下面详细说一下反转法扫描键盘的算法
线反转法的第一步是把列线置低电平,行置高电平然后
读行状态;第二步与第一步相反把行线置低电平,列线置高电平然后读列线状态,若有键按
下则两次所读状态的结果即为键所在的位置。这样通过两次输出和两次读入可完成键的识别,
比扫描法要简单