stm32f103c8t6 4×4矩阵键盘实现代码
时间: 2023-04-05 10:00:28 浏览: 110
以下是一个简单的 stm32f103c8t6 4×4矩阵键盘实现代码:
#include "stm32f10x.h"
#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 delay_ms(uint32_t ms)
{
uint32_t i;
for(i=0;i<ms*1000;i++);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = ROW1 | ROW2 | ROW3 | ROW4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = COL1 | COL2 | COL3 | COL4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
uint8_t Key_Scan(void)
{
uint8_t key_value = 0;
GPIO_ResetBits(GPIOA, ROW1);
GPIO_SetBits(GPIOA, ROW2 | ROW3 | ROW4);
if(GPIO_ReadInputDataBit(GPIOA, COL1) == 0) key_value = 1;
if(GPIO_ReadInputDataBit(GPIOA, COL2) == 0) key_value = 2;
if(GPIO_ReadInputDataBit(GPIOA, COL3) == 0) key_value = 3;
if(GPIO_ReadInputDataBit(GPIOA, COL4) == 0) key_value = 4;
GPIO_SetBits(GPIOA, ROW1);
GPIO_ResetBits(GPIOA, ROW2);
GPIO_SetBits(GPIOA, ROW1 | ROW3 | ROW4);
if(GPIO_ReadInputDataBit(GPIOA, COL1) == 0) key_value = 5;
if(GPIO_ReadInputDataBit(GPIOA, COL2) == 0) key_value = 6;
if(GPIO_ReadInputDataBit(GPIOA, COL3) == 0) key_value = 7;
if(GPIO_ReadInputDataBit(GPIOA, COL4) == 0) key_value = 8;
GPIO_SetBits(GPIOA, ROW2);
GPIO_ResetBits(GPIOA, ROW3);
GPIO_SetBits(GPIOA, ROW1 | ROW2 | ROW4);
if(GPIO_ReadInputDataBit(GPIOA, COL1) == 0) key_value = 9;
if(GPIO_ReadInputDataBit(GPIOA, COL2) == 0) key_value = 10;
if(GPIO_ReadInputDataBit(GPIOA, COL3) == 0) key_value = 11;
if(GPIO_ReadInputDataBit(GPIOA, COL4) == 0) key_value = 12;
GPIO_SetBits(GPIOA, ROW3);
GPIO_ResetBits(GPIOA, ROW4);
GPIO_SetBits(GPIOA, ROW1 | ROW2 | ROW3);
if(GPIO_ReadInputDataBit(GPIOA, COL1) == 0) key_value = 13;
if(GPIO_ReadInputDataBit(GPIOA, COL2) == 0) key_value = 14;
if(GPIO_ReadInputDataBit(GPIOA, COL3) == 0) key_value = 15;
if(GPIO_ReadInputDataBit(GPIOA, COL4) == 0) key_value = 16;
GPIO_SetBits(GPIOA, ROW4);
return key_value;
}
int main(void)
{
uint8_t key_value = 0;
GPIO_Configuration();
while(1)
{
key_value = Key_Scan();
if(key_value != 0)
{
// do something with the key value
}
delay_ms(10);
}
}
阅读全文