K60学习笔记四:按键的多种操作

按键有好几种操作:
ADC按键扫描–用的是电阻
GPIO按键扫描:
独立式
矩阵式
循环查询
定时查询
中断响应

//初始化KEY对应的管脚
PTXn_e KEY_PTxn[KEY_MAX] = {PTC7, PTC8, PTA4, PTC6, PTE26, PTC9, PTC16, PTC17}; 

//KEY初始化:
void    key_init(KEY_e key)
{
    if(key < KEY_MAX)
    {
        gpio_init(KEY_PTxn[key], GPI, 0);//按键为输入模式
        port_init_NoALT(KEY_PTxn[key], PULLUP);
//如果设计为按键未按下时的IO输入为高电平,按键按下后的输入为低电平,那么需要上拉电阻,确保按键未按下时保持输入高电平;
 // 因此如果设计为按键未按下时输入为低电平,按下时为高电平,那么就不需要上拉电阻,但需要一个下拉电阻,保证按键未按下时//输入一直为低电平。 
    }
    else
    {
        key = KEY_MAX;

        //初始化全部 按键
        while(key--)
        {
            gpio_init(KEY_PTxn[key], GPI, 0);
            port_init_NoALT(KEY_PTxn[key], PULLUP);         
        }

    }
}

//获取按键状态:未带延时
用的GPIO的读取引脚状态函数
KEY_STATUS_e key_get(KEY_e key)
{
    if(gpio_get(KEY_PTxn[key]) == KEY_DOWN) 
    {
        return KEY_DOWN; //如果按下
    }
    return KEY_UP;//如果没按下
}

//检测按键状态:带延时
KEY_STATUS_e key_check(KEY_e key)
{
    if(key_get(key) == KEY_DOWN)
    {
        DELAY_MS(10);  //这是一个宏定义,用的是滴答定时器
        if( key_get(key) == KEY_DOWN)
        {
            return KEY_DOWN;
        }
    }
    return KEY_UP;
}

剩下的东西有空在加

你可能感兴趣的:(K60学习笔记四:按键的多种操作)