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矩阵键盘实现原理(附程序)相关推荐

  1. 【STM32扫描4x4矩阵键盘模块】 4x4 matrix keypad interface

    [STM32扫描4x4矩阵键盘模块] 4x4 matrix keypad interface 4x4矩阵键盘模块 矩阵键盘是将多个按键排布成类似矩阵形式的键盘组.为了减少IO资源的占用,将键盘组的每一 ...

  2. 4x4矩阵键盘工作原理及扫描程序_4X4矩形键盘

    介绍 什么是矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和 ...

  3. 矩阵键盘扫描原理详解——单片机

    矩阵键盘扫描原理详解 根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线.一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键 ...

  4. 蓝桥杯CT107D:关于矩阵键盘工作原理及其应用

    目录 简介 原理图及工作原理 程序实现 简介 矩阵键盘是CT107D上左下角由16个按键组成的.排列顺序类似矩阵的按键组. 原理图及工作原理 工作原理: 在矩阵键盘中,在每条水平线和垂直线交叉处不直接 ...

  5. 【STM32】 4X4矩阵键盘电路

    目录 一:矩阵键盘介绍 二:矩阵电路原理图设计 三:矩阵键盘模块特点 四:4X4矩阵键盘模块实物图 五:4X4矩阵键盘模块电路原理图设计 六:4X4矩阵键盘模块电路PCB图设计 一:矩阵键盘介绍 轻触 ...

  6. 玩转Luat 基础篇④——矩阵键盘的原理及应用

    文章目录 一.前言 二.工作原理 2.1 行扫描和列扫描 2.2 扫描的方式 三.快速应用 四.参考 一.前言 使用矩阵键盘的好处,在于节省IO口 使用矩阵键盘的坏处,在于需要行列扫描,增加CPU负担 ...

  7. 两种方式实现矩阵键盘扫描(含程序)

    1 矩阵键盘的结构 下图是一个4*3的矩阵键盘示意图,三条列线连接P1.4-P1.6引脚.四条行线连接P1.0-P1.3引脚 2 逐行逐列扫描法 首先使三条列线所连接的I/O引脚P14-P16输出低电 ...

  8. 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...

    ;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...

  9. 4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键

    按键是一种常开型按钮开关,与单片机的常见接法如图所示.按键未按下时两个触点断开,单片机I/O口输入高电平:当按键闭合时,I/O口输入低电平. 一.按键讲解 当I/O口为P0口时,由于没有内部上拉电阻, ...

  10. 4x4矩阵键盘工作原理及扫描程序_AVR单片机扫描4X4矩阵键盘并数码管显示程序

    /* program name :   keyboard ; 功能描述 :  扫描16个按键(4X4),并把键值显示在数码管上(两位); 要点 :  在扫描按键时运用了比较复杂的两个for()循环嵌套 ...

最新文章

  1. 几何视角看线性方程组解的情况
  2. MySQl笔记8:把good表中商品名为‘诺基亚xxxx‘的商品,改为‘HTCxxxx‘
  3. PAT (Basic Level) 1091 N-自守数(模拟+stl)
  4. html双翼布局,第19题 CSS如何实现双飞翼布局?
  5. c语言多线程转python多线程,一个Socket能否被多线程写入(转)
  6. Python学习之使用Python发送邮件
  7. HTTP Header 详解【转】
  8. Cython 的学习
  9. python下载哪个版本好-究竟哪个版本的Python是最快的?
  10. 优秀!26岁任985大学博导!
  11. [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(上)
  12. lenovo 笔记本ideapad 320c-15改装win7问题
  13. Pr零基础入门指南笔记四
  14. C#中datagridview实现单元格输入框加按键,下拉框功能
  15. HTB_Secret
  16. python学习-day18、文件处理、
  17. Spring Boot 学习[一] 介绍与入门
  18. html ppt播放音乐,PPT怎么控制音乐暂停后继续播放?
  19. 致程序员之家论坛的所有会员
  20. 计算机绘图cad期末考试试题,2017大学cad期末考试练习题「附答案」

热门文章

  1. maven项目打包命令
  2. IDM插件安装、使用方法教程
  3. 使用OBS录屏神器,完美录制第二块屏幕。
  4. python人脸识别门禁系统_一种基于python的人脸识别开源系统
  5. nodejs 安装教程
  6. 三维空间里点到直线的距离
  7. 第2章-计算机组成原理之概述篇
  8. monkey入门研究
  9. laravel手册链接
  10. n1进入recovery模式_N1盒子系列 篇一:N1简明降级刷机教程