键盘扫描是最 为常用的工作方式,扫描方式又可分为程序程扫描、定时扫描和中断扫描。程序扫描是指在 特定的程序位置段上安排键盘扫描程序读取键盘状态。定时扫描是指利用单片机内部或扩展 的定时器产生定时中断,在中断中进行键盘扫描的工作方式。中断扫描指有按键按下时,键
盘电路发出中断申请,中断程序负责扫描键盘的工作方式。程序扫描和定时扫描电路结构完 同,只是在程序设计实际上有差别。不论哪一种扫描方式,键盘程序都应当完成,判断 键是否被按下、按键削抖处理、按键定位等操作键盘。
扫描法实际上是先使列(行)线全输出低电平,然后判断行(列)线状态 ,若行线全为
高电平,表示无键被按下;若行线不全为高电平表示有键被按下,然后依次使列线为低电平,
再判断行线状态,当行线全为高电平时,表示被按下的键不在本列;当行线不全为高电平时,
表示被按下的键在本列,把此时的行线状态与列线状态和在一起即为被按下的键的位置
( 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 比较大时键盘工作速度较慢,而线反转法则不论键盘有
多少行和多少列只需经过两步即可获得键的位置,下面详细说一下反转法扫描键盘的算法
线反转法的第一步是把列线置低电平,行置高电平然后
读行状态;第二步与第一步相反把行线置低电平,列线置高电平然后读列线状态,若有键按
下则两次所读状态的结果即为键所在的位置。这样通过两次输出和两次读入可完成键的识别,
比扫描法要简单