STM32 4*4矩阵键盘实现原理(附程序)
STM32 4*4矩阵键盘实现原理(附程序)
: 理解矩阵键盘之前,先要了解一下独立按键的触发原理。下图是普通独立 按键的接线图。
: 按键的一端接地,一端接MCU的GPIO。当按键没有被按下的时候,这条路其实是一个断路,我们通常会将单片机该引脚设置成输入上拉状态。所以当按键没有按下的时候,这个引脚读到的电平一直是高电平。当按下按键的时候,那么此时的引脚会被地强行拉低,此时这个引脚读到的电平为低电平,那说明按键已经被按下。独立按键到这里已经说完了,很简单。矩阵按键是由多个独立按键组成的,所以它的触发原理和独立按键相同,只是在电路和程序扫描上不同,略微复杂一点。
通常用的最多的矩阵键盘是4*4的。如下图:
程序设计上通常采用逐行逐列进行扫描,4*4的矩阵键盘一共需要8个单片机的GPIO引脚,将控制行的引脚设置成输出,控制列的引脚设置成输入上拉。
先扫描第一行,那么就将PD0~PD2输出高电平,将PD3输出低电平,记为0xF7,行确定好后,开始扫描列,控制列的引脚为输入引脚,将其和0XF7相与,如果哪一位为0,那么就证明哪一个被按下。按键没有被按下的时候,IO口的状态为 **1111 0000 ,**扫描第一行将PD3输出低电平,其他行输出高电平,即为1111 0111,假设第一个按键被按下,那么此时PD4引脚读到低电平,那么读到的引脚变化
GPIOD->IDR & 1111 0111=1110 0111。//这样就证明了第一个按键被按下。以此类推。
程序如下:
key_board.c
#include "stm32f10x.h"
#include "delay.h"
#include "key_board.h"//uint8_t Send_F=0;void Keyboard_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;KEYBOARD_GPIO_CLK_FUN(KEYBOARD_GPIO_CLK,ENABLE);//LINE GPIO_InitStruct.GPIO_Pin=KEYBOARD_GPIO_PIN0|KEYBOARD_GPIO_PIN1|KEYBOARD_GPIO_PIN2|KEYBOARD_GPIO_PIN3;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(KEYBOARD_GPIO_PORT,&GPIO_InitStruct);//ROWGPIO_InitStruct.GPIO_Pin=KEYBOARD_GPIO_PIN4|KEYBOARD_GPIO_PIN5|KEYBOARD_GPIO_PIN6|KEYBOARD_GPIO_PIN7;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(KEYBOARD_GPIO_PORT,&GPIO_InitStruct);
}uint16_t keyboard_scan(void)
{uint16_t key_val=0;uint16_t temp=0;/*************Scan 1st Line************************/GPIOD->ODR=0X00;GPIOD->ODR=0XF7;if((GPIOD->IDR&0XF0)!=0XF0){delay_ms(50);if((GPIOD->IDR & 0XF0)!=0XF0){temp=(GPIOD->IDR&0XF7);switch(temp){case 0xE7: key_val=1; break;case 0xD7: key_val=2; break;case 0xB7: key_val=3; break;case 0x77: key_val=4; break;default: key_val=0; break;}}}/*************Scan 2st Line************************/GPIOD->ODR=0X00;GPIOD->ODR=0XFB;if((GPIOD->IDR&0XF0)!=0XF0){delay_ms(50);if((GPIOD->IDR & 0XF0)!=0XF0){temp=(GPIOD->IDR&0XFB);switch(temp){case 0xEB: key_val=5; break;case 0xDB: key_val=6; break;case 0xBB: key_val=7; break;case 0x7B: key_val=8; break;default: key_val=0; break;}}}/*************Scan 3st Line************************/GPIOD->ODR=0X00;GPIOD->ODR=0XFD;if((GPIOD->IDR&0XF0)!=0XF0){delay_ms(50);if((GPIOD->IDR & 0XF0)!=0XF0){temp=(GPIOD->IDR&0XFD);switch(temp){case 0xED: key_val=9; break;case 0xDD: key_val=10; break;case 0xBD: key_val=11; break;case 0x7D: key_val=12; break;default: key_val=0; break;}}}/*************Scan 4st Line************************/GPIOD->ODR=0X00;GPIOD->ODR=0XFE;if((GPIOD->IDR&0XF0)!=0XF0){delay_ms(50);if((GPIOD->IDR & 0XF0)!=0XF0){temp=(GPIOD->IDR&0XFE);switch(temp){case 0xEE: key_val=13; break;case 0xDE: key_val=14; break;case 0xBE: key_val=15; break;case 0x7E: key_val=16; break;default: key_val=0; break;}}}return key_val;}
key_board.h
#include "stm32f10x.h"#ifndef _KEY_BOARD_H_
#define _KEY_BOARD_H_#define KEYBOARD_GPIO_PORT GPIOD
#define KEYBOARD_GPIO_CLK_FUN RCC_APB2PeriphClockCmd
#define KEYBOARD_GPIO_CLK RCC_APB2Periph_GPIOD//line 行
#define KEYBOARD_GPIO_PIN0 GPIO_Pin_0
#define KEYBOARD_GPIO_PIN1 GPIO_Pin_1
#define KEYBOARD_GPIO_PIN2 GPIO_Pin_2
#define KEYBOARD_GPIO_PIN3 GPIO_Pin_3//row 列
#define KEYBOARD_GPIO_PIN4 GPIO_Pin_4
#define KEYBOARD_GPIO_PIN5 GPIO_Pin_5
#define KEYBOARD_GPIO_PIN6 GPIO_Pin_6
#define KEYBOARD_GPIO_PIN7 GPIO_Pin_7//extern uint8_t Send_F;extern void Keyboard_GPIO_Config(void);
extern uint16_t keyboard_scan(void);#endif
程序运行结果如下:
STM32 4*4矩阵键盘实现原理(附程序)相关推荐
- 【STM32扫描4x4矩阵键盘模块】 4x4 matrix keypad interface
[STM32扫描4x4矩阵键盘模块] 4x4 matrix keypad interface 4x4矩阵键盘模块 矩阵键盘是将多个按键排布成类似矩阵形式的键盘组.为了减少IO资源的占用,将键盘组的每一 ...
- 4x4矩阵键盘工作原理及扫描程序_4X4矩形键盘
介绍 什么是矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和 ...
- 矩阵键盘扫描原理详解——单片机
矩阵键盘扫描原理详解 根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线.一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键 ...
- 蓝桥杯CT107D:关于矩阵键盘工作原理及其应用
目录 简介 原理图及工作原理 程序实现 简介 矩阵键盘是CT107D上左下角由16个按键组成的.排列顺序类似矩阵的按键组. 原理图及工作原理 工作原理: 在矩阵键盘中,在每条水平线和垂直线交叉处不直接 ...
- 【STM32】 4X4矩阵键盘电路
目录 一:矩阵键盘介绍 二:矩阵电路原理图设计 三:矩阵键盘模块特点 四:4X4矩阵键盘模块实物图 五:4X4矩阵键盘模块电路原理图设计 六:4X4矩阵键盘模块电路PCB图设计 一:矩阵键盘介绍 轻触 ...
- 玩转Luat 基础篇④——矩阵键盘的原理及应用
文章目录 一.前言 二.工作原理 2.1 行扫描和列扫描 2.2 扫描的方式 三.快速应用 四.参考 一.前言 使用矩阵键盘的好处,在于节省IO口 使用矩阵键盘的坏处,在于需要行列扫描,增加CPU负担 ...
- 两种方式实现矩阵键盘扫描(含程序)
1 矩阵键盘的结构 下图是一个4*3的矩阵键盘示意图,三条列线连接P1.4-P1.6引脚.四条行线连接P1.0-P1.3引脚 2 逐行逐列扫描法 首先使三条列线所连接的I/O引脚P14-P16输出低电 ...
- 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- 4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键
按键是一种常开型按钮开关,与单片机的常见接法如图所示.按键未按下时两个触点断开,单片机I/O口输入高电平:当按键闭合时,I/O口输入低电平. 一.按键讲解 当I/O口为P0口时,由于没有内部上拉电阻, ...
- 4x4矩阵键盘工作原理及扫描程序_AVR单片机扫描4X4矩阵键盘并数码管显示程序
/* program name : keyboard ; 功能描述 : 扫描16个按键(4X4),并把键值显示在数码管上(两位); 要点 : 在扫描按键时运用了比较复杂的两个for()循环嵌套 ...
最新文章
- 几何视角看线性方程组解的情况
- MySQl笔记8:把good表中商品名为‘诺基亚xxxx‘的商品,改为‘HTCxxxx‘
- PAT (Basic Level) 1091 N-自守数(模拟+stl)
- html双翼布局,第19题 CSS如何实现双飞翼布局?
- c语言多线程转python多线程,一个Socket能否被多线程写入(转)
- Python学习之使用Python发送邮件
- HTTP Header 详解【转】
- Cython 的学习
- python下载哪个版本好-究竟哪个版本的Python是最快的?
- 优秀!26岁任985大学博导!
- [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(上)
- lenovo 笔记本ideapad 320c-15改装win7问题
- Pr零基础入门指南笔记四
- C#中datagridview实现单元格输入框加按键,下拉框功能
- HTB_Secret
- python学习-day18、文件处理、
- Spring Boot 学习[一] 介绍与入门
- html ppt播放音乐,PPT怎么控制音乐暂停后继续播放?
- 致程序员之家论坛的所有会员
- 计算机绘图cad期末考试试题,2017大学cad期末考试练习题「附答案」