1、简介
以下介绍美信开发板实现按键输入检测的方法,基本思路是将按键连接的引脚设置为输入模式,不断轮询引脚的输入电平,如果为低电平表示按键按下。该按键电路没有上拉处理,可以通过软件编程设为内部弱上拉。
评估板的用户按键连接在P0_6引脚上
2、输入引脚初始化
void GPIO_PIN_Init(mxc_gpio_regs_t * gpio_port,uint32_t gpio_pin,mxc_gpio_func_t gpio_pin_mode){ mxc_gpio_cfg_t gpio_cfg; gpio_cfg.port=gpio_port;//port assigned 输出端口 gpio_cfg.mask=gpio_pin; //pin assigned,or pins assigned 引脚 gpio_cfg.pad=MXC_GPIO_PAD_PULL_UP;//pin pull up/down,pull up default 下拉 gpio_cfg.func=gpio_pin_mode; //pin mode 引脚工作模式 gpio_cfg.vssel=MXC_GPIO_VSSEL_VDDIO;/**< Voltage select */ gpio_cfg.drvstr=MXC_GPIO_DRVSTR_0; MXC_GPIO_Config(&gpio_cfg); }
按照前述引脚配置,对按键IO做以下初始化
GPIO_PIN_Init(MXC_GPIO0,MXC_GPIO_PIN_6,MXC_GPIO_FUNC_IN);
以下实现按键检测逻辑,不断轮询按键的输入状态
int main(void) { GPIO_PIN_Init(MXC_GPIO0,MXC_GPIO_PIN_6,MXC_GPIO_FUNC_IN); while(1){ if(!MXC_GPIO_InGet(MXC_GPIO0,MXC_GPIO_PIN_6)){ printf("Key pressed.\n"); while(!MXC_GPIO_InGet(MXC_GPIO0,MXC_GPIO_PIN_6)){} } else{ } } }
3、实验结果
评估板按键按下结果
按键按下一次LED1状态翻转
int main(void) { GPIO_PIN_Init(MXC_GPIO0,MXC_GPIO_PIN_14,MXC_GPIO_FUNC_OUT); GPIO_PIN_Init(MXC_GPIO0,MXC_GPIO_PIN_6,MXC_GPIO_FUNC_IN); while(1){ if(!MXC_GPIO_InGet(MXC_GPIO0,MXC_GPIO_PIN_6)){ printf("Key pressed.\n"); MXC_Delay(500); MXC_GPIO_OutToggle(MXC_GPIO0, MXC_GPIO_PIN_14); while(!MXC_GPIO_InGet(MXC_GPIO0,MXC_GPIO_PIN_6)){} } else{ } } }