您当前的位置:五五电子网电子知识单片机-工控设备51单片机矩阵式键盘 正文
矩阵式键盘

矩阵式键盘

点击数:7287 次   录入时间:03-04 11:42:13   整理:http://www.55dianzi.com   51单片机

确定矩阵式键盘上何键被按下,介绍一种 “行扫描法”。

行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法 .

      判断键盘中有无键按下: 将全部行线置低 电平 ,然后检测列线的状态。只要有一列的 电平 为低,则表示键盘中有键被按下,而且闭合的键位于低 电平 线与 4根行线相交叉的4个按键之中。若所有列线均为高 电平 ,则键盘中无键按下。

      判断闭合键所在的位置: 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低 电平 ,即在置某根行线为低 电平 时,其它线为高 电平 。在确定某根行线位置为低 电平 后,再逐行检测各列线的 电平 状态。若某列为低,则该列线与置为低 电平 的行线交叉处的按键就是闭合的按键。

org   0000h

ajmp main

org   0030h

main:

     mov   dptr,#tab      ;将表头放入dptr

     lcall     key        ;调用键盘扫描程序

     movc a,@a+dptr     ;查表后将键值送入aCC

     mov   p0,a             ;将acc值送入p0口

     clr p2.1             ;开显示

     ljmp main          ;返回反复循环显示

key: lcall ks         ;调用检测按键子程序

     jnz k1                  ;有键按下继续

     lcall delay2       ;无键按调用延时去抖

     ajmp key           ;返回继续检测按键

k1:   lcall delay2

     lcall delay2      ;有键按下延时去抖动

     lcall ks           ;再调用检测按键程序

     jnz k2           ;确认有按下进行下一步

     ajmp key          ;无键按下返回继续检测

k2:   mov r2,#0efh       ;将扫描值送入 r2暂存

mov r4,#00h    ;将第一列值送入r4暂存

k3: mov p1,r2      ;将r2的值送入p1口

l6:   jb p1.0,l1         ;p1.0等于1跳转到l1

     mov a,#00h         ;将第一行值送入acc

     ajmp lk          ;跳转到键值处理程序

l1:   jb p1.1,l2        ;p1.1等于1跳转到l2

     mov a,#04h    ;将第二行的行值送入acc

     ajmp lk   ;跳转到键值理程序进行键值处理

l2: jb p1.2,l3       ;p1.2等于1跳转到l3

     mov a,#08h      ;将第三行的行值送入acc

     ajmp lk           ;跳转到键值处理程序

l3:   jb p1.3,next    ;p1.3等于1跳转到next处

     mov a,#0ch        ;将第四行的行值送入acc

lk:   add a,r4      ;行值与列值相加后的键值送入a

     push acc          ;将a中的值送入堆栈暂存

k4:   lcall delay2         ;调用延时去抖动程序

     lcall ks           ;调用按键检测程序

     jnz k4         ;按键没有松开继续返回检测

     pop acc       ;将堆栈的值送入acc

     ret

next:

    inc   r4            ;将列值加一

[1] [2]  下一页


本文关键字:键盘  51单片机单片机-工控设备 - 51单片机

上一篇:定时计数2