使用stm32f103ret6hal库编写矩阵键盘(pc0到pc7)并按下按键显示出来
时间: 2024-01-14 09:02:44 浏览: 34
好的,下面给出具体的步骤:
1. 首先需要在代码中引入stm32f103ret6hal库的头文件:
```c
#include "stm32f1xx_hal.h"
```
2. 然后需要定义PC0到PC7这8个引脚的IO口:
```c
#define ROW1 GPIO_PIN_0
#define ROW2 GPIO_PIN_1
#define ROW3 GPIO_PIN_2
#define ROW4 GPIO_PIN_3
#define COL1 GPIO_PIN_4
#define COL2 GPIO_PIN_5
#define COL3 GPIO_PIN_6
#define COL4 GPIO_PIN_7
#define ROW_PORT GPIOC
#define COL_PORT GPIOC
```
3. 接下来需要初始化这些IO口,将行引脚设置为上拉输入模式,列引脚设置为推挽输出模式:
```c
GPIO_InitTypeDef GPIO_InitStruct = {0};
/*Configure GPIO pins : ROW1 ROW2 ROW3 ROW4 */
GPIO_InitStruct.Pin = ROW1|ROW2|ROW3|ROW4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(ROW_PORT, &GPIO_InitStruct);
/*Configure GPIO pins : COL1 COL2 COL3 COL4 */
GPIO_InitStruct.Pin = COL1|COL2|COL3|COL4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(COL_PORT, &GPIO_InitStruct);
```
4. 然后在主函数中编写矩阵键盘的扫描程序,当检测到有按键按下时,就将对应的按键编号显示出来:
```c
int main(void)
{
/* 硬件初始化 */
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* 矩阵键盘扫描程序 */
while (1)
{
if (HAL_GPIO_ReadPin(ROW_PORT, ROW1) == GPIO_PIN_RESET) // 检测第一行
{
HAL_GPIO_WritePin(COL_PORT, COL1, GPIO_PIN_RESET);
HAL_Delay(10);
if (HAL_GPIO_ReadPin(ROW_PORT, ROW1) == GPIO_PIN_RESET)
{
printf("按下了1号键\n"); // 显示按键编号
while (HAL_GPIO_ReadPin(ROW_PORT, ROW1) == GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(COL_PORT, COL1, GPIO_PIN_SET);
}
// 依照上述方法扫描其他行列
}
}
```
注意:由于矩阵键盘的扫描需要比较频繁地读取IO口的状态,因此需要在主函数中加入适当的延时,否则可能会出现误检的情况。