在之前的学习中就学过了IO口的操作,矩阵键盘就是对IO口的操作,还有一个就是扫描模式。
方法一:
逐行扫描:通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。
方法二:
行列扫描:通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

在这里用到了中断的方法,行输出高电平,列做模拟输入口。当有按键按下所对应的IO口会检测到一个下降沿。所用IO口PA5~PA8做推挽输出口,PB5-PB8模拟输入。以下为中断程序:

void EXTIX_Init(void)
{NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//外部中断,需要使能AFIO时钟//初始化PB5~8中断NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级 2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//子优先级 2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断通道使能NVIC_Init(&NVIC_InitStructure);//初始化中断结构体GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);//中断线5与GPIOB映射起来EXTI_InitStructure.EXTI_Line = EXTI_Line5;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发中断EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);//中断线6与GPIOB映射起来EXTI_InitStructure.EXTI_Line = EXTI_Line6;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发中断EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7);//中断线7与GPIOB映射起来EXTI_InitStructure.EXTI_Line = EXTI_Line7;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发中断EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);//中断线4与GPIOB映射起来EXTI_InitStructure.EXTI_Line = EXTI_Line8;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发中断EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}
//FUNCTION:键盘中断服务函数
//AUTHOR:BiggerPast
void EXTI9_5_IRQHandler(void)
{u8 i;INTX_DISABLE();//关闭总中断delay_ms(10);for(i=5;i<9;i++){GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);//置为高电平PAout(i)=0;if(PBin(5)==0){switch(i){case(5): break;case(6): break;case(7): break;case(8): break; }}else if(PBin(6)==0){switch(i){case(5):;break;case(6): break;case(7): break;case(8): break;}}else if(PBin(7)==0){switch(i){case(5): break;case(6):  break;case(7): break;case(8): break;}}else if(PBin(8)==0){switch(i){case(5): break;case(6): break;case(7): break;case(8): break;}}}GPIO_ResetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);//置为低电平INTX_ENABLE();//开启总中断EXTI_ClearITPendingBit(EXTI_Line5|EXTI_Line6|EXTI_Line7|GPIO_Pin_8);//清除Line上的中断标志位
}

STM32学习——矩阵键盘相关推荐

  1. STM32驱动矩阵键盘串口输出

    原理:矩阵键盘的原理就是分行和列扫描,来获知按键的行数和列数,然后得到按键的键值.(按键按下时) 矩阵原理图 效果视频演示 STM32驱动矩阵键盘串口输出 硬件部分 f103c8t6核心板 4*4矩阵 ...

  2. ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示

    一 矩阵键盘按键控制TM1629ALED显示原理: 1.1 本实验实现矩阵键盘按键控制TM1629ALED显示1.2 实验思路:共阴极数码管,掌握数码管段选位选原理 熟悉TM1629A芯片手册1.3 ...

  3. 51单片机矩阵键盘的控制原理-扫描及使用方式

    矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...

  4. LINUX矩阵键盘简单介绍,stm32矩阵键盘原理图及程序介绍

    描述 STM32F0 系列产品基于超低功耗的 ARM Cortex-M0 处理器内核,整合增强的技术和功能,瞄准超低成本预算的应用.该系列微控制器缩短了采用 8 位和 16 位微控制器的设备与采用 3 ...

  5. 模块学习(五)——矩阵键盘

    矩阵键盘的学习只是为了做一个简单的遥控器,主要目标还是后续的遥控器控制小车实现简单而精准的直行和转弯,加上前面的模块,锻炼自己PID的调试和理解能力.但毕竟矩阵键盘也算个模块嘛,就也记录一下,分享给有 ...

  6. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

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

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

  8. C51单片机学习笔记之矩阵键盘

    简介 矩阵键盘一般为4×4或4×3的.矩阵键盘的判断方式分按行扫描和按列扫描. 简单说就是给全体一个高电平,然后给一个按键的一端附上低电平,再判断另一端是否为低电平. 原理图 代码部分 #includ ...

  9. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)

    这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...

  10. 基于ZYNQ的嵌入式学习笔记四(矩阵键盘实现电子琴)

    本次要实现的是利用ZYNQ-7000板子上自带的16个矩阵键盘来实现每按一次发出一个音符的声音,从而实现电子琴的效果. 一.原理部分: 矩阵键盘:用8位来存储4*4的矩阵键盘的信息,初始化的值为000 ...

最新文章

  1. 【内核】linux内核启动流程详细分析
  2. C++11 std::bind 和 std::placeholder
  3. php取掉字符串第一位支付,php怎样去掉字符串中的第一个字符
  4. 云原生生态周报 Vol. 2
  5. 12-31--MAGENTO---强大的配置功能挖掘!!
  6. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  7. html实现返回上一页的几种方法(javaScript:history.go(-1);)
  8. it'll be much more productive to read pdf files via a touch screen
  9. 【WPF】在MenuItem中下划线“_”显示不正常
  10. SQL Server 复制:事务发布
  11. generatorConfig.xml头文件报红
  12. qt结合arcgis进行开发
  13. 没有被遣返的人生是不完整的
  14. 使用yum下载文件报No module named urlgrabber.grabber错
  15. jQuery——滚动条位置的获取与设置
  16. 制作linux包 u盘安装
  17. MarkDown编辑器 - MarkText使用文档
  18. 互联网个人空间即将出现重大变化
  19. XP下安装Sql2000出现“安装程序配置服务器失败”时的解决办法
  20. POE受电设备(PD)电路工作原理

热门文章

  1. python移动文件,将一个文件夹里面的文件移动到另一个文件夹
  2. 从《目标》、《凤凰项目》到《持续交付》:DevOps 的过去、现在及未来 | Chat · 预告
  3. linux 查看网卡单双工,Linux 查看网卡全双工 还是半双工 以及设置网卡为半双工...
  4. 最小二乘法与极大似然估计
  5. JDK9的32位版本下载
  6. 安装Axure RP Extension for Chrome插件的简单方法
  7. springboot校园二手交易平台的设计与实现毕业设计源码260839
  8. Navicat Premium 11.0.19中文破解版 安装
  9. 计算机三级考试 信息安全,计算机三级考试《信息安全技术》练习题及答案
  10. 微信小程序开发的基本流程