xiongxie007 发表于 2013-1-4 00:06:44

谢谢楼主!

chenhua1991 发表于 2013-1-4 00:56:26

mark一下

asong14437546 发表于 2013-2-3 22:38:00

mark{:handshake:}

John_123 发表于 2013-2-20 20:27:49

keep it for referance

SCS_Super 发表于 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;

khuohuo 发表于 2013-3-6 15:27:54

收下看看,谢谢楼主

SevenWans 发表于 2013-4-11 16:24:14

mark!{:sad:}{:sad:}{:sad:}{:sad:}

jimmyfan 发表于 2013-4-13 10:43:28

挺不错的,刚接触状态机思想

monkerman 发表于 2013-4-13 11:11:50

留名马可…

韦斯克拉 发表于 2013-7-12 14:48:50

有用,记下

Rainfieldwood 发表于 2013-8-12 11:03:59

好东西   mark!

pisgah 发表于 2013-8-12 11:34:19

标记一下

滴答滴答下雨啦 发表于 2013-9-3 13:15:41

学习了……

不进则退 发表于 2013-9-3 13:21:32

来学习的!

dangeranimal 发表于 2013-9-5 16:24:54

标记一下

dangeranimal 发表于 2013-9-10 10:11:11

先记号~,谢谢

6091820503 发表于 2013-9-10 13:46:51

好复杂,好强大啊~

二进制 发表于 2013-9-25 16:50:19

老帖了学习 一下                              

_Funnnn 发表于 2013-11-9 23:35:17

记号{:lol:}

osesemi 发表于 2013-11-10 14:07:55

mark mark mark

soniclidi 发表于 2013-11-12 13:16:53

支持支持

baifern 发表于 2014-3-20 16:06:26

标记学习一下

机器人天空 发表于 2014-3-20 16:19:36

mark.....{:lol:}

yytyu 发表于 2014-7-31 15:41:08

mark!!!

ZYBing 发表于 2014-8-27 21:38:58

mark,学习!

DepravedLucien 发表于 2014-9-25 13:50:10

mark   ddddddd

ZXF_CUG 发表于 2014-9-25 13:54:56

学习~~~~~

yfgww 发表于 2014-11-10 16:45:01

{:smile:}{:smile:}{:smile:}{:smile:}

mk_avatar 发表于 2014-11-11 10:38:57

mark~~~~~~

DF状元宏 发表于 2014-12-11 16:25:12

有没有在工程中应用过啊,实际效果咋样?

374533905 发表于 2014-12-11 16:59:22

看来需要仔细研读下

a673261839 发表于 2018-11-3 10:10:17

马克,感谢分享!!!

wowangru 发表于 2018-11-3 11:18:02

这个有用!!!!!

changshs 发表于 2019-1-6 11:00:49

学习了,谢谢!~
页: 1 2 [3]
查看完整版本: 4*4按键,状态机思想:定时扫描+多键组合+连_发功能(具有实际应用意义)