单片机说白了就是一个小的电脑的主机 那么有了主机以后 想让他正常动起来 当然缺不了键盘 好了长话短说 下面进入正题 让我们一起来制作一个键盘 键盘有两类 一个是独立键盘 另一个是矩阵键盘 从名字上就知道 后者复杂 那我们先看看前者 这个不复杂的怎么样
这就是一个独立键盘的电路图 其特点是每个按键单独占用一个IO口,每个按键工作不会影响其他的IO口线的状态。多用于按键不多的场合。可采用JNB(或JB)来查询是哪一个按键按下 并转向相应的功能处理程序,如
JNB P1.0, A0;如果P1.0键按下,就跳到A0程序
当然 我们说了 这是用到不多的键盘的时候 如果多的话这个方法不免过于麻烦 这样 后者就派上用场了 这就是传说中的矩阵键盘 看起来就比独立键盘复杂的多 矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
矩阵键盘的工作原理
最常见的键盘布局如图1所示。一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,4*4矩阵键盘的内部电路如图2所示
图1 这个外观也没什么意思了 大家也经常见到 比如电话键盘了 银行的密码盘都是这个样子的 下面还是让我们看看他的原理吧 我们可是要自己制作一个键盘的哦 图2 4*4矩阵键盘 当无按键闭合时,P10~P13与P14~P17之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17为输入状态,从行线P10~P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14~P17读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。 这个矩阵的工作原理很不好理解哦 要仔细看的 不过也很简单的了 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定, 一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。
这就是抖动产生的原因了 那么如何来解决这个问题呢 其实这也是用键盘需要注意的地方 我们给他取了个名字叫按键消抖说白了就是不叫你激动的抖起来啦 按键消抖的方法有两种 一个是硬件方法 一个是软件的方法 硬件就是要电路自己完成 软件呢就是通过程序解决 我更侧重于后者 因为我这个人很懒的 不想在键盘上在加上一个什么消抖电路 另外加上也不好看了 下面还是说说软件吧 软件消抖 即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序 好啦 大家去焊接吧 等硬件出来了 我们一起把程序写出来 对了给大家一个测试程序吧 哦对了 有了按键没显示 给了程序也没有 还是等到下次吧 下次我们说说显示器的制作 到时候一起测试吧 记得回帖哦 支持一下吧
|