STM32单片机4*4矩阵键盘相关代码

这篇具有很好参考价值的文章主要介绍了STM32单片机4*4矩阵键盘相关代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       矩阵键盘是我们学习32单片机中十分常见的模块。对于我们掌握32单片机的基本要求有很大的帮助。其核心原理是利用键盘按键按下时产生的电位变化来判断是否按下以及利用行列电平变化来得到按键在矩阵键盘位置的思路。本文简述其使用的相关代码。

        硬件结构

 stm32矩阵键盘,32单片机,stm32,计算机外设,单片机

         要使用矩阵键盘,需要先了解矩阵键盘的硬件结构。其共有16个按键和8个引脚,每个引脚控制一行或一列,8个引脚,4个控制行,4个控制列。对于电线的排布,每个引脚分别连接一行的4个按键的一端,而按键的另一端则连接控制列的引脚。当某个按键被按下时,会连接两个引脚,引起电平变化,从而得到按键的具体位置。

软件思路

        根据4*4矩阵键盘的结构,每个按键两端分别连接一个行引脚和列引脚,而当按键按下的瞬间,按键会接通按键的两端,因此一个按键按下时会将两个行列引脚连接起来,而每个引脚控制不同的行或列,因此根据对应引脚的变化即可得出按下了哪个按键。而我们可以进行两次判断,第一次将4个行对应的引脚设置为上拉输入模式,列的4个引脚设置为低电平推挽输出,这样当按键按下时,行列相接,行对应的引脚在与列对应的低电平相连时会变为低电平,从而返回0,由此我们可以根据哪一行对应的引脚状态变为0来判断按下的按键处于哪一行。这时我们再将列对引脚应的4个引脚设置为上拉输入,行对应的4个引脚设置为低电平推挽输出,这样我们便可以得到是哪一列的按键按下,根据两次判断出按键所在的行和列便可以得到按键按下的具体位置。

        具体实现的步骤为:

1、配置行列控制引脚

        即选择8个引脚来控制4个行和列,这里注意需要选择能够作为IO口的引脚,STM32上有许多引脚的默认功能并不是作为IO口,因此需要先查阅STM32的接口配置表,来选择这8个引脚。这里选用的是PB8~PB15,这8个引脚在默认状态下均为IO口状态,并且为连续的引脚,在配置时更加方便。

        配置代码如下:

    GPIOB->CRH&=0X00000000;
	GPIOB->CRH|=0X88883333;
	
	PBout(8)=0;
	PBout(9)=0;
	PBout(10)=0;
	PBout(11)=0;
	//GPIOB->ODR=0;
	GPIOB->ODR|=1<<12;
	GPIOB->ODR|=1<<13;
	GPIOB->ODR|=1<<14;
	GPIOB->ODR|=1<<15;

         首先对PB口的寄存器进行初始化配置,将低4位配置为推挽输出并置为低电平输出,高4位配置为上拉输入。这种配置状态下当按键按下时,高 4 位会有以为变为低电平,从而判断按键处于哪一行。

2、行判断函数

    if(PBin(12)==0){delay_ms(20);a=1;flag=1;/*printf("1");*/}
    if(PBin(13)==0){delay_ms(20);a=2;flag=1;/*printf("2");*/}
	if(PBin(14)==0){delay_ms(20);a=3;flag=1;/*printf("3");*/}
	if(PBin(15)==0){delay_ms(20);a=4;flag=1;/*printf("4");*/}

        根据哪一行对应的引脚变为0来记录按键处在的对应行,这里利用一个无符号8位变量a来保存所的行的位置,同时利用一个初始值为0的变量置为1来标志按键已经按下。

3、配置列引脚的初始状态

	if(flag){
	GPIOB->CRH&=0X00000000;
	GPIOB->CRH|=0X33338888;
		
	PBout(12)=0;
	PBout(13)=0;
	PBout(14)=0;
	PBout(15)=0;
	//GPIOB->ODR=0;
	GPIOB->ODR|=1<<8;
	GPIOB->ODR|=1<<9;
	GPIOB->ODR|=1<<10;
	GPIOB->ODR|=1<<11;
	
	output(a);
	}

         将列对引脚应的4个引脚设置为上拉输入,行对应的4个引脚设置为低电平推挽输出然后进入列判断函数。

4、列判断函数并输出

void output(u8 a){
	
	if(PBin(8)==0){delay_ms(20);printf("%u\n",1+(a-1)*4);/*printf("1");*/}
	if(PBin(9)==0){delay_ms(20);printf("%u\n",2+(a-1)*4);/*printf("2");*/}
	if(PBin(10)==0){delay_ms(20);printf("%u\n",3+(a-1)*4);/*printf("3");*/}
	if(PBin(11)==0){delay_ms(20);printf("%u\n",4+(a-1)*4);/*printf("4");*/}
}

        这里编写了一个单独的函数用判断列,其作用为通过输入1,2,3,4来得到对应的列位置。其中1,2,3,4分别代表第一行,第二行,第三行和第四行。根据引脚的电平变化得到按下按键对应的列位置,在结合输入的行位置,从而计算出按键对应的数值,分别为1到16.并输出到屏幕上。

        至此,矩阵键盘就完成了相关配置,现在按下按键串口上就会显示出对应的数字,即输出当前按键所在的位置。以上便为4*4矩阵键盘的使用方法及相关代码。如有问题欢迎一起讨论。文章来源地址https://www.toymoban.com/news/detail-730121.html

到了这里,关于STM32单片机4*4矩阵键盘相关代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

    学习内容:通过proteus实现对51单片机矩阵的掌握 1 、键盘接口设计。键盘——向单片机输入数据、命令等功能,是人机对话的主要手段。由若干按键按照一定规则组成。每一个按键实质上是一个按键开关,按构造可分为有触点开关按键和无触点按键。有触点开关按键常见的有

    2024年02月11日
    浏览(33)
  • 51单片机--矩阵键盘

    一、接线(4×4) 将16个键盘排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,所以共有4行4列8根线,连接到单片机的GPIO口。 二、原理 总体来说检测该键对应IO口是否为低电平。 1、检测时,先将一行设为低电平,其

    2024年02月11日
    浏览(28)
  • 单片机矩阵键盘扫描

    本讲任务:       了解矩阵键盘检测原理及如何获得键盘扫描值。 逐行扫描:       我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。

    2024年02月14日
    浏览(36)
  • 51单片机矩阵键盘

    目录 前言 一、矩阵键盘扫描 二、LCD1602显示矩阵键盘键值 三、趣味小项目——密码锁 总结          矩阵键盘的原理很浅显易懂,不涉及任何寄存器,就是纯线路连接。         矩阵键盘的内部接线图如下:         不难看出其组成就是多个独立按键彼此相连形成,在

    2024年02月08日
    浏览(50)
  • 51单片机(六)矩阵键盘和矩阵键盘密码锁

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月04日
    浏览(39)
  • 单片机实验四 矩阵键盘实验

    1.熟悉实验软件和硬件,进行正确的接线; 2.按下按键,1602显示其键值; 1.Keil uVision4 2.PZISP自动下载软件 3.HC6800S开发板 按键: 矩阵键盘 4X4 的矩阵键盘,一共是16 个按键。我们照习惯称横为“行”,“竖”为列。那么5、6、7、8 我们称之为“行线”,则1、2、3、4 称为“列线

    2024年02月02日
    浏览(27)
  • stm32f1xx单片机拦截中断源代码

    这个是实现后的效果,可以看到已经没有中断的效果了 这个是拦截前的效果可以看到电平是在变化的 实现原理非常简单:一句话搞定: 以下是完整的代码:是用来补充说明和筹字数的 这就表明了,单片机里面是可以植入病毒的,或者不算病毒,里面的代码也是具有修改破坏

    2024年02月10日
    浏览(33)
  • STM32F103ZE单片机呼吸灯源代码

    本实验采用的系统频率SYSTIM为8MHZ,如果频率改变需要修改一个数值

    2024年02月09日
    浏览(41)
  • 51单片机学习笔记-4矩阵键盘

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。采用逐行或逐列的“扫描”,就可以读

    2024年02月06日
    浏览(38)
  • 三、单片机关于矩阵键盘的设计

    目录 前言 一、矩阵键盘 1、矩阵键盘原理: 2、矩阵键盘原理图 二、单片机原理图绘制 1、所需元件名称 2、绘制原理图 三、编写程序 总结 今天我们来学习如何通过AT89C52上的矩阵按键来控制数码管显示对应字母或者数字,期间我们用到的软件有proteus和keil两个软件,欢迎大

    2024年02月04日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包