矩阵按键思路

[复制链接]
 楼主| wlzeagle 发表于 2012-9-28 14:17 | 显示全部楼层 |阅读模式
想写一个矩阵按键,比如说4*4,如果按下了N-1个按键,第N个按键还能响应,大家有没有好的思路?
阿南 发表于 2012-9-28 14:34 | 显示全部楼层
直接读吧,当读到一个不同的健值时不要认为当初的健已经无效就可
dlyt_test001 发表于 2012-9-28 15:12 | 显示全部楼层
并转串的芯片,一次读进来!
hopewise 发表于 2012-9-28 16:15 | 显示全部楼层
;***************************************
;**************按键扫描管理*************
key_scan_man:
        mov    a,keydwn_t
        sub     a,251
        snz     c
        inc      keydwn_t           ;按键扫描计数:1~251        
        clr      out0                   ;先扫描第1行(低电平有效)
        set     out1
        set     out2
        set     out3
        nop                             ;延时(必须要,当8MHZ时)
        nop
        nop
        nop
        nop      
        snz     input0
        jmp     scan_key1         ;数字键1按下
        snz     input1
        jmp     scan_key2         ;数字键2按下
        snz     input2
        jmp     scan_key3         ;数字键3按下
        
        set     out0                  ;再扫描第2行
        set     out1
        set     out2
        clr       out3
        nop
        nop
        nop
        nop
        nop
        snz     input0
        jmp     scan_key4             ;数字键4按下
        snz     input1
        jmp     scan_key5             ;数字键5按下
        snz     input2
        jmp     scan_key6             ;数字键6按下
           
        set     out0                      ;然后扫描第3行
        clr      out1
        set     out2
        set     out3      
        nop
        nop
        nop
        nop
        nop     
        snz     input0
        jmp     scan_key7             ;数字键7按下
        snz     input1
        jmp     scan_key8             ;数字键8按下
        snz     input2
        jmp     scan_key9             ;数字键9按下
               
        set      out0                      ;最后扫描第4行
        set      out1
        clr       out2
        set      out3   
        nop
        nop
        nop
        nop
        nop      
        snz     input0
        jmp     scan_delete           ;delete(reset)键按下
        snz     input1
        jmp     scan_key0             ;数字键0按下
        snz     input2
        jmp     scan_enter            ;enter(lock)键按下
         
       clr        keydwn_t               ;都没有按键按下,则清按键次数变量
       ret
scan_enter:                           
       mov     a,keydwn_t
       sub      a,10                      ;2ms*10=20ms?
       sz        z
       set       enter_key              ;置#键按下标志位为1                                                     
       ret



        clr     sw_bz
 楼主| wlzeagle 发表于 2012-9-29 11:38 | 显示全部楼层
2# 阿南
当按键按下时,我可以置标志位,可是当按下不放手时,按下的这个键已经执行后,这个标志位在什么情况下清除呢?
阿南 发表于 2012-10-6 14:58 | 显示全部楼层
你可以再多设一个标置位,以保存多一种状态。就是说你第一个按下后是一个状态,第二人按下是一个状态,执行完或没按下又是一个状态

评分

参与人数 1威望 +1 收起 理由
wlzeagle + 1 谢谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

266

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部