amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
123
返回列表 发新帖
楼主: raosibin

4*4按键,状态机思想:定时扫描+多键组合+连_发功能(具有实际应用意义)

  [复制链接]
发表于 2013-1-4 00:06:44 | 显示全部楼层
谢谢楼主!
发表于 2013-1-4 00:56:26 来自手机 | 显示全部楼层
mark一下
发表于 2013-2-3 22:38:00 | 显示全部楼层
mark
发表于 2013-2-20 20:27:49 | 显示全部楼层
keep it for referance
发表于 2013-2-28 19:06:39 | 显示全部楼层
个人更改的简单版矩阵键盘读键程序static BYTE key_state = 0,key_press;
        BYTE key_return = key_no,Key_Read_Data = 0;

   // 读按键I/O电平
        sw5 = 1;
        sw6 = 0;
        Nop();
        Nop();
        set_keyport();      //读IO口 矩阵排1
        Key_Read_Data = key_port.portbits;
        Key_Read_Data = Key_Read_Data<<4;
        key_press = Key_Read_Data&key_mask;
        //-------------------------------------       
        sw5 = 0;
        sw6 = 1;
        Nop();
        Nop();
        set_keyport();    //读IO口 矩阵排2
        Key_Read_Data  += key_port.portbits;
        key_press = Key_Read_Data&key_mask;       
        //********************************************
    switch (key_state)  
    {  
        case key_state_0:                    // 按键初始态  
            if (key_press != key_mask)  key_state = key_state_1;    // 键被按下,状态转换到键确认态   
            break;  

        case key_state_1:                    // 按键确认态
            if (key_press == (Key_Read_Data&key_mask))        // 与原电平比较(消抖处理)
            {
                                        if(key_press == 0b11111110)   key_return = key_1;   
                                        if(key_press == 0b11111101)   key_return = key_2;
                                        if(key_press == 0b11111011)   key_return = key_3;
                                        if(key_press == 0b11110111)   key_return = key_4;
   
                                        if(key_press == 0b11101111)   key_return = key_5;
                                        if(key_press == 0b11011111)   key_return = key_6;
                                        if(key_press == 0b10111111)   key_return = key_7;
                                        if(key_press == 0b01111111)   key_return = key_8;
                key_state = key_state_2;        // 状态转换到判键释放态  
            }  
            else  
                key_state = key_state_0;        // 按键已抬起,转换到按键初始态(消抖)  

            break;

        case key_state_2:  
            if (key_press == key_mask)  
                                key_state = key_state_3;
            break;

                case key_state_3:  
                        if(key_press == key_mask)  
                                key_state = key_state_0;
                        break;
    }  
    return key_return;
发表于 2013-3-6 15:27:54 | 显示全部楼层
收下看看,谢谢楼主
发表于 2013-4-11 16:24:14 | 显示全部楼层
mark!
发表于 2013-4-13 10:43:28 | 显示全部楼层
挺不错的,刚接触状态机思想
发表于 2013-4-13 11:11:50 来自手机 | 显示全部楼层
留名马可…
发表于 2013-7-12 14:48:50 | 显示全部楼层
有用,记下
发表于 2013-8-12 11:03:59 | 显示全部楼层
好东西   mark!
发表于 2013-8-12 11:34:19 | 显示全部楼层
标记一下
发表于 2013-9-3 13:15:41 | 显示全部楼层
学习了……
发表于 2013-9-3 13:21:32 | 显示全部楼层
来学习的!
发表于 2013-9-5 16:24:54 | 显示全部楼层
标记一下
发表于 2013-9-10 10:11:11 | 显示全部楼层
先记号~,谢谢
发表于 2013-9-10 13:46:51 | 显示全部楼层
好复杂,好强大啊~
发表于 2013-9-25 16:50:19 | 显示全部楼层
老帖了  学习 一下                              
发表于 2013-11-9 23:35:17 | 显示全部楼层
记号
发表于 2013-11-10 14:07:55 | 显示全部楼层
mark mark mark
发表于 2013-11-12 13:16:53 | 显示全部楼层
支持支持
发表于 2014-3-20 16:06:26 | 显示全部楼层
标记学习一下
发表于 2014-3-20 16:19:36 | 显示全部楼层
mark.....
发表于 2014-7-31 15:41:08 | 显示全部楼层
mark!!!
发表于 2014-8-27 21:38:58 | 显示全部楼层
mark,学习!
发表于 2014-9-25 13:50:10 | 显示全部楼层
mark   ddddddd
发表于 2014-9-25 13:54:56 | 显示全部楼层
学习~~~~~
发表于 2014-11-10 16:45:01 | 显示全部楼层
发表于 2014-11-11 10:38:57 | 显示全部楼层
mark~~~~~~
发表于 2014-12-11 16:25:12 | 显示全部楼层
有没有在工程中应用过啊,实际效果咋样?
发表于 2014-12-11 16:59:22 | 显示全部楼层
看来需要仔细研读下
发表于 2018-11-3 10:10:17 | 显示全部楼层
马克,感谢分享!!!
发表于 2018-11-3 11:18:02 | 显示全部楼层
这个有用!!!!!
发表于 2019-1-6 11:00:49 | 显示全部楼层
学习了,谢谢!~
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-15 18:49

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表