打印

按键

[复制链接]
2359|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
肖恩till|  楼主 | 2013-3-28 13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2013-3-28 13:37 | 只看该作者
#define GPIO_KEY P1

typedef unsigned char U8;

typedef struct{
        U8 number;
        U8 delay;
}t_KEY;

t_KEY key;


void key_scan(void)
{
        U8 x,k;

        key.number = 0;

        GPIO_KEY = 0x0f;
        x = ~GPIO_KEY & 0x0f;

        GPIO_KEY = 0xf0;
        k = ~GPIO_KEY & 0xf0;

        if(!k || !k){
                key.delay = 0;
                return;
        }

        if(key.delay < 100){
                key.delay++;
        }
        if(key.delay == 3){                // 去抖
                key.number = x+k;
        }

}

间隔调用key_scan即可

演示程序

void main(void)
{
        mcu_init();

        while(1)
        {
//----------------------------
// 按键扫描
                key_scan();

//----------------------------
// 按键处理
                if(key.number == 0x11){
                        ...
                }else
                if(key.number == 0x12){
                        ...
                }else

//----------------------------
// 时间间隔处理,实际用定时器完成
                delay_10ms();
        }

}

使用特权

评论回复
板凳
肖恩till|  楼主 | 2013-3-28 18:22 | 只看该作者
ayb_ice 发表于 2013-3-28 13:37
#define GPIO_KEY P1

typedef unsigned char U8;

O(∩_∩)O谢谢

使用特权

评论回复
地板
y651503148| | 2013-3-29 11:58 | 只看该作者
矩阵按键也是一样的,把哪行拉低哪行就有效,再检测列就行了。XY轴一样

使用特权

评论回复
5
yhhsky| | 2013-3-29 19:23 | 只看该作者

使用特权

评论回复
6
肖恩till|  楼主 | 2013-3-29 19:29 | 只看该作者
y651503148 发表于 2013-3-29 11:58
矩阵按键也是一样的,把哪行拉低哪行就有效,再检测列就行了。XY轴一样

嗯 是

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一步一步,踩到顶点O(∩_∩)O~

3

主题

21

帖子

0

粉丝