stm32 矩阵键盘实现的代码
时间: 2023-04-03 07:04:04 浏览: 133
你好,以下是 stm32 矩阵键盘实现的代码:
```
#include "stm32f10x.h"
#define ROWS 4
#define COLS 4
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
uint8_t read_row(uint8_t row)
{
uint8_t col_val = 0;
GPIO_ResetBits(GPIOB, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOB, 1 << (row + 4));
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
col_val |= 1 << 0;
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0)
col_val |= 1 << 1;
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 0)
col_val |= 1 << 2;
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) == 0)
col_val |= 1 << 3;
return col_val;
}
int main(void)
{
uint8_t row, col;
uint8_t key_map[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}};
GPIO_Configuration();
while (1)
{
for (row = 0; row < ROWS; row++)
{
col = read_row(row);
if (col != 0)
{
// key pressed
while (read_row(row) == col)
; // wait for key release
// output key value
printf("%c", key_map[row][col - 1]);
}
}
}
}
```
希望对你有所帮助。
阅读全文