stm32f103 5*4键盘代码
时间: 2023-11-04 09:04:41 浏览: 80
以下是一个简单的STM32F103 5×4键盘代码,使用4x4矩阵键盘扩展器:
```
#include "stm32f10x.h"
#define ROW GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
#define COLUMN GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency / 10000) * ms;
for (; nCount != 0; nCount--);
}
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = ROW;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = COLUMN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1) {
for (int i = 0; i < 4; i++) {
GPIO_ResetBits(GPIOB, COLUMN);
GPIO_SetBits(GPIOB, COLUMN | 1 << (i + 12));
for (int j = 0; j < 4; j++) {
if (!GPIO_ReadInputDataBit(GPIOA, ROW | 1 << (j + 8))) {
// 执行对应按键的操作
}
}
delay_ms(50);
}
}
}
```
该代码通过轮询每个列,检测每个行上的按键是否被按下。如果某个按键被按下,则执行对应的操作。你可以在“执行对应按键的操作”处添加你想要的代码。
阅读全文