基于GD32F103C8T6,使用GPIOC13、GPIOC0、GPIOC1、GPIOC2、GPIOC3、GPIOC4、GPIOC5、GPIOC10的4x4矩阵按键
时间: 2023-12-01 07:04:49 浏览: 68
基于GD32F103C8T6,使用GPIOC13、GPIOC0、GPIOC1、GPIOC2、GPIOC3、GPIOC4、GPIOC5、GPIOC10的4x4矩阵按键,可以按照以下步骤进行操作:
1.将GPIOC13、GPIOC0、GPIOC1、GPIOC2设置为输出模式,GPIOC3、GPIOC4、GPIOC5、GPIOC10设置为输入模式。
2.将GPIOC13、GPIOC0、GPIOC1、GPIOC2输出低电平,GPIOC3、GPIOC4、GPIOC5、GPIOC10上拉。
3.循环扫描矩阵按键,具体步骤如下:
1)将GPIOC0输出高电平,读取GPIOC10的输入状态,判断是否有按键按下,如果有,记录按键位置。
2)将GPIOC1输出高电平,读取GPIOC10的输入状态,判断是否有按键按下,如果有,记录按键位置。
3)将GPIOC2输出高电平,读取GPIOC10的输入状态,判断是否有按键按下,如果有,记录按键位置。
4)将GPIOC13输出高电平,读取GPIOC10的输入状态,判断是否有按键按下,如果有,记录按键位置。
4.根据记录的按键位置,判断按下的是哪个按键。
5.重复步骤3和4,实现循环扫描。
下面是GPIO初始化和按键扫描的代码示例:
```c
#include "gd32f1x0.h"
#define KEY_NULL 0
#define KEY_1 1
#define KEY_2 2
#define KEY_3 3
#define KEY_A 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_B 8
#define KEY_7 9
#define KEY_8 10
#define KEY_9 11
#define KEY_C 12
#define KEY_STAR 13
#define KEY_0 14
#define KEY_POUND 15
#define KEY_D 16
void GPIO_Configuration(void)
{
/* Enable GPIOC clock */
rcu_periph_clock_enable(RCU_GPIOC);
/* Configure PC0-PC2, PC13 as output mode */
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_13);
/* Configure PC3, PC4, PC5, PC10 as input mode */
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_10);
}
uint8_t Key_Scan(void)
{
uint8_t key_value = KEY_NULL;
/* Scan row 1 */
gpio_bit_reset(GPIOC, GPIO_PIN_0);
if(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET)
{
key_value = KEY_1;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET)
{
key_value = KEY_2;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET)
{
key_value = KEY_3;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET)
{
key_value = KEY_A;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET);
}
gpio_bit_set(GPIOC, GPIO_PIN_0);
/* Scan row 2 */
gpio_bit_reset(GPIOC, GPIO_PIN_1);
if(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET)
{
key_value = KEY_4;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET)
{
key_value = KEY_5;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET)
{
key_value = KEY_6;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET)
{
key_value = KEY_B;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET);
}
gpio_bit_set(GPIOC, GPIO_PIN_1);
/* Scan row 3 */
gpio_bit_reset(GPIOC, GPIO_PIN_2);
if(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET)
{
key_value = KEY_7;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET)
{
key_value = KEY_8;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET)
{
key_value = KEY_9;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET)
{
key_value = KEY_C;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET);
}
gpio_bit_set(GPIOC, GPIO_PIN_2);
/* Scan row 4 */
gpio_bit_reset(GPIOC, GPIO_PIN_13);
if(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET)
{
key_value = KEY_STAR;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_10) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET)
{
key_value = KEY_0;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_4) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET)
{
key_value = KEY_POUND;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_5) == RESET);
}
else if(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET)
{
key_value = KEY_D;
while(gpio_input_bit_get(GPIOC, GPIO_PIN_3) == RESET);
}
gpio_bit_set(GPIOC, GPIO_PIN_13);
return key_value;
}
int main(void)
{
uint8_t key_value = KEY_NULL;
/* GPIO configuration */
GPIO_Configuration();
while(1)
{
key_value = Key_Scan();
if(key_value != KEY_NULL)
{
/* Do something according to the key value */
}
}
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)