三、设计思路分析
经过分析,设计具备上面所述功能的电子密码锁主要需要解决3个问题。
● 键盘输入。
● 数码管显示。
● 单片机电路以及密码比较与处理的有关程序设计。
1、键盘输入
键盘是一组按键的集合,它是最常用的单片机输入设备.键盘可以分为两类:独立连接式和矩阵式。
独立连接式键盘是最简单的键盘电路,每个按键独立地接入一根数据线。平时所有的数据输入线都被连接成高电平,当任何一个键按下时,与之相连的数据输入线将被拉成低电平。要判断是否有键按下,只要用位处理指令即可。这种键盘的优点是结构简单,使用方便,但随着键数的增多占用I/O口线也增加。
矩阵式键盘,也即通常所讲的行列式键盘,由行线和列线组成,按键位于行、列的交叉点上,行列分别连接到按键开关的两端,行线通过上拉电阻接到高电平。无按键按动作时行线处于高电平状态;有按键按下时,交点的行线和列线相通,行线电平状态将由与此行线项链的列线电平决定。列线电平如果低,则行线电平为低;列线电平如果为高,则行线电平也为高。这是识别矩阵式键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量比较多的场合。本设计的4*4键盘即采用矩阵式键盘,如图1-3。
图1-3 4*4键盘矩阵式键盘
通过行列键盘扫描的方法可获取键盘输入的键值,从而得知按下的哪个键,具体过程如下。
(1)查询是否有键按下。单片机向行扫描口输出全为“0”的扫描码,然后从列检测口检测信号,只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即对应为按下的按键所在的列。
(2)查询按下按键所在的行、列位置。前面已经取得了按下键的号,接下来要确定按键所在的行,这需要进行逐行扫描,单片机首先使第1行为“0”,其余各行为“1”,接着进行行列检测,若为全 “1”,表示不在第1行,否则即在第1行;然后使第2行为全 “0”,其余各行为“1”,再进行列检测,若为全“1”,表示不在第2行;这样逐行检测,直到找到按键所在的行。当各行都扫描以后仍没有找到,则放弃扫描,认为是键的错误动作。
(3)对得到的行号和列号译码,得到键值。对于4*4的行列式键盘,因为按键的位置由行号和列号唯一确定,且行列各4位,所以用一个字节(8位)来对键值编码是很合适的。本设计中,将字节的高4位(D7、D6、D5、D4)表示列号(4、3、2、1),低4位(D3、D2、D1、D0)表示行号(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列,24H(00100100)表示第3行第2列。在扫描键盘过程中,应该注意以下问题。
(1)当按下或松开按键时,按键会产生机械抖动。这种抖动经常发生在按下或松开瞬间,一般持续几到十几秒,抖动时间随按键的结构不同而不同,。在扫描键盘过程中,必须想办法消除按键,否则会引起错误。
消除按键抖动可以用硬件电路来实现,例如,利用R-S触发器来锁定按键状态。以消除抖动的影响。也可以用现成的专用消抖电路,如MC14490就是优路消抖电路。较为简单的方法就是用软件延时方法来消除按键的抖动,也就是说,一旦发现有键按下,就延时20ms以后再测按键的状态。这样就避开按键发生抖动的那一段时间,使CPU能可靠地读按键状态。在编制键盘扫描程序时,只要发现按键状态有变化,即无论是按下还是松开,程序都延时20ms以后再进行其他操作。
(2)在键盘扫描中,应防止按一次键而有多个对应键值输入的情况。这种情况的发生是由于键扫描速度和键处理速度较快,当某一个键按下还未松开时键扫描程序和键处理程序已执行了多遍。这样,由于程序执行和按键动作不同步而造成按一个键有多个键值输入的错误状态。为避免发生这种情况,必须保证按一次键,CPU只对该键做一次处理。为此,在键扫描程序中不仅要检测是否有键按下,在有键按下的情况,做一次处理,而且在键处理完毕后,还应检测按下的键否松开,只有当按下的键松开以后,程序才往下执行。这样每按一个键,只做一个键处理,使二者达到同步,消除按一次键有多个键值输入的错误情况。
根据需要,本设计的4*4键盘设定10个数字键(0-9)和2个功能键(ENTER和CANCEL),键盘布局如图1-4。
图1-4 键盘布局方框图
图中第4行暂时不用,可以作以后扩充所用。因此根据上面提到的4*4键盘的键值编码方法,各按键及其编码对应关系如表1-1。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页