stm32 4*4矩阵键盘代码
时间: 2023-11-03 11:06:03 浏览: 165
记录学习之旅。该案例采用STM32F013zet6,以中断形式控制3×4和4×4矩阵键盘输出,以下为完整代码。
以下是一个简单的STM32 4x4矩阵键盘代码:
```c
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
#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
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = ROW1 | ROW2 | ROW3 | ROW4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = COL1 | COL2 | COL3 | COL4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
uint8_t Key_Scan(void)
{
uint8_t key_value = 0xff;
GPIO_ResetBits(GPIOB, COL1);
if (!GPIO_ReadInputDataBit(GPIOA, ROW1))
key_value = 0;
if (!GPIO_ReadInputDataBit(GPIOA, ROW2))
key_value = 4;
if (!GPIO_ReadInputDataBit(GPIOA, ROW3))
key_value = 8;
if (!GPIO_ReadInputDataBit(GPIOA, ROW4))
key_value = 12;
GPIO_SetBits(GPIOB, COL1);
GPIO_ResetBits(GPIOB, COL2);
if (!GPIO_ReadInputDataBit(GPIOA, ROW1))
key_value = 1;
if (!GPIO_ReadInputDataBit(GPIOA, ROW2))
key_value = 5;
if (!GPIO_ReadInputDataBit(GPIOA, ROW3))
key_value = 9;
if (!GPIO_ReadInputDataBit(GPIOA, ROW4))
key_value = 13;
GPIO_SetBits(GPIOB, COL2);
GPIO_ResetBits(GPIOB, COL3);
if (!GPIO_ReadInputDataBit(GPIOA, ROW1))
key_value = 2;
if (!GPIO_ReadInputDataBit(GPIOA, ROW2))
key_value = 6;
if (!GPIO_ReadInputDataBit(GPIOA, ROW3))
key_value = 10;
if (!GPIO_ReadInputDataBit(GPIOA, ROW4))
key_value = 14;
GPIO_SetBits(GPIOB, COL3);
GPIO_ResetBits(GPIOB, COL4);
if (!GPIO_ReadInputDataBit(GPIOA, ROW1))
key_value = 3;
if (!GPIO_ReadInputDataBit(GPIOA, ROW2))
key_value = 7;
if (!GPIO_ReadInputDataBit(GPIOA, ROW3))
key_value = 11;
if (!GPIO_ReadInputDataBit(GPIOA, ROW4))
key_value = 15;
GPIO_SetBits(GPIOB, COL4);
return key_value;
}
int main(void)
{
GPIO_Configuration();
while (1)
{
uint8_t key_value = Key_Scan();
if (key_value != 0xff)
{
// 执行相应的操作
}
}
}
```
在这个代码中,首先通过`GPIO_Configuration`函数配置了矩阵键盘的行和列。然后在`Key_Scan`函数中进行扫描,并根据按下的按键返回相应的键值。在`main`函数中,不断进行键值扫描,并执行相应的操作。
阅读全文