STM32矩阵键盘实现方法收集
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32用矩阵键盘,不带外部中断,可以多个按键同时按下
C代码: STM32用矩阵键盘,不带外部中断,可以多个按键同时按下
/**************矩阵键盘.h文件*********************************/
#ifndef __COMMON_H
#define __COMMON_H
#include ""
/* 4*4矩阵键盘 */
void keyboard_init(void);
void update_key(void);
extern unsigned char key[4][4];
#endif
/**************矩阵键盘.c文件*****************************/
#include ""
struct io_port {
GPIO_TypeDef *GPIO_x;
unsigned short GPIO_pin;
};
static struct io_port key_output[4] = {
{GPIOD, GPIO_Pin_0}, {GPIOD, GPIO_Pin_1},
{GPIOD, GPIO_Pin_2}, {GPIOD, GPIO_Pin_3}
static struct io_port key_input[4] = {
{GPIOD, GPIO_Pin_4}, {GPIOD, GPIO_Pin_5},
{GPIOD, GPIO_Pin_6}, {GPIOD, GPIO_Pin_7}
};
unsigned char key[4][4];
void keyboard_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
unsigned char i;
/* 键盘行扫描输出线输出高电平 */
/* PA0 PA1 PA2 PA3 输出*/
= GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
= GPIO_Mode_Out_PP;
= GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* 键盘列扫描输入线键被按时输入高电平放开输入低电平 */
/* PA4 PA5 PA6 PA7 输入*/
= GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
= GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
for(i = 0; i < 4; i++)
{
GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);
}
void update_key(void)
{
unsigned char i, j;
for(i = 0; i < 4; i++) PIO_x, key_output[i].GPIO_pin);
for(j = 0; j < 4; j++) PIO_x, key_input[j].GPIO_pin) == 0)
{
key[i][j] = 1;
}
else
{
key[i][j] = 0;
}
}
GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);
}
}
stm32 矩阵键盘
这是硬件上的键盘规划
// | 1 | 2 | 3 | 4 | ---line 1 PE6 //
// --------------------------- //
// | 5 | 6 | 7 | 8 | ---line 2 PE5 //
// --------------------------- //
// | 9 | 10| 11| 12| ---line 3 PE4 //
// --------------------------- //
// | 13| 14| 15| 16| ---line 4 PE3 //
// --------------------------- //
// | 17| 18| 19| 20| ---line 5 PE2 //
// --------------------------- //
// | | | | //
// col1 col2 col3 col4 //
// PE0 PB5 PB8 PB9 //
//_________________________________________________//
参考了下基于avr的矩阵键盘程序,耐着性子移植到符合上面硬件规划的stm32板子上。volatile uint8_t key_flag = 0;
void key_init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
//key output
= GPIO_Mode_Out_PP;
= GPIO_Speed_50MHz;
= GPIO_Pin_0;
GPIO_Init(GPIOE,&GPIO_InitStructure);