STM32矩阵键盘实现方法收集

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档