HC32L136矩阵键盘4x5实现
时间: 2024-05-01 09:22:55 浏览: 18
HC32L136是一款32位ARM Cortex-M3内核的单片机,它可以通过GPIO实现矩阵键盘的输入功能。以下是一个4x5矩阵键盘输入的示例代码:
```c
#include "hc32_gpio.h"
#define KEY_PORT GpioPortB
#define KEY_ROW GpioPin0 | GpioPin1 | GpioPin2 | GpioPin3
#define KEY_COL GpioPin4 | GpioPin5 | GpioPin6 | GpioPin7 | GpioPin8
/* 矩阵键盘按键值 */
const uint8_t key_value[4][5] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 0},
{'A', 'B', 'C', 'D', 'E'},
{'F', 'G', 'H', 'I', 'J'}
};
/* 初始化GPIO */
void Key_Init(void)
{
stc_gpio_config_t key_cfg;
DDL_ZERO_STRUCT(key_cfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); // 使能GPIO时钟
key_cfg.enDir = GpioDirIn;
key_cfg.enDrv = GpioDrvL; // 设置为下拉模式
key_cfg.enPu = GpioPuEnable; // 使能上拉
key_cfg.enPd = GpioPdDisable; // 禁止下拉
key_cfg.enOD = GpioOdDisable; // 禁止开漏输出
key_cfg.enCtrlMode = GpioAHB; // GPIO控制模式
Gpio_Init(KEY_PORT, KEY_ROW | KEY_COL, &key_cfg);
}
/* 读取键值 */
uint8_t Key_Scan(void)
{
uint8_t i, j;
uint8_t key_value = 0xFF;
/* 检测行 */
for(i=0; i<4; i++) {
Gpio_SetIO(KEY_PORT, KEY_ROW, (1<<i));
/* 检测列 */
for(j=0; j<5; j++) {
if(!Gpio_GetIO(KEY_PORT, KEY_COL, (1<<j))) {
key_value = key_value[i][j];
}
}
}
return key_value;
}
int main(void)
{
Key_Init(); // 初始化GPIO
while(1) {
uint8_t key = Key_Scan(); // 读取键值
if(key != 0xFF) {
// 处理按键事件
}
}
return 0;
}
```
上述代码中,首先我们定义了矩阵键盘的行列GPIO引脚,然后在初始化GPIO时将行设置为输入模式,列设置为下拉模式,并且使能上拉。在读取键值时,我们先依次检测每一行,然后检测该行的每一列,如果有按键按下,则返回该按键的键值。最后我们可以在主函数中不断读取键值,处理按键事件。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)