蓝桥杯嵌入式CT117E硬件开发平台 | 按键读取操作
关于按键,估计大家基本上都用过,简单的方法就是配置好GPIO后,读取对应的GPIO是高电平还是低电平,由于按键按下时相当于GPIO连接到了地,为低电平,故而可以认为当检测到低电平时则是有按键按下,给按下按下做20MS的延时消抖,再次判断即可。不多说,直接上手程序:
- CT117E硬件开发平台上的按键分别接到了这几个GPIO口:
按键 | 对应的GPIO |
---|
B1 | PA0 |
B2 | PA8 |
B3 | PB1 |
B4 | PB2 |
- GPIO配置代码如下:
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
- 按键设计,扫描+延时,注意的是延时函数,自行添加(参考下一章节:蓝桥杯嵌入式CT117E硬件开发平台 | 滴答定时器)
uint8_t Key_Scan(void)
{
uint8_t key_value = 0xff;
if(RB1 == 0){
DelaySisTick_Time(DELAY_SISTICKTIMESET_MS(20));
if(RB1 == 0){
key_value = 1;
while(!RB1);
}
}
if(RB2 == 0){
DelaySisTick_Time(DELAY_SISTICKTIMESET_MS(20));
if(RB2 == 0){
key_value = 2;
while(!RB2);
}
}
if(RB3 == 0){
DelaySisTick_Time(DELAY_SISTICKTIMESET_MS(20));
if(RB3 == 0){
key_value = 3;
while(!RB3);
}
}
if(RB4 == 0){
DelaySisTick_Time(DELAY_SISTICKTIMESET_MS(20));
if(RB4 == 0){
key_value = 4;
while(!RB4);
}
}
return key_value;
}