【STM32-矩阵键盘】

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

目录

1.矩阵键盘简介

2.原理描述

3.代码编写

4.自我总结

1.矩阵键盘简介

stm32矩阵键盘怎么接,stm32,单片机,矩阵

此处我们采用4*4的矩阵键盘,需要8个端口与单片机连接
4个控制行,4个控制列

2.原理描述

很多人不清楚八个引脚怎么连接,这里我采取PD0-PD7
PD0-PD3控制1-4行PD4-PD7控制1-4列

stm32矩阵键盘怎么接,stm32,单片机,矩阵

如何确定我们按下的是哪个按键呢?
一.确定列值
1.将PD0-PD3作为输出PD4-PD7作为输入
2.输入均配置为上拉,即都为1输出拉低,即为0
3.当按下某个按键后,将该按键所连接的0,例如按下S1

stm32矩阵键盘怎么接,stm32,单片机,矩阵

二.确定行值
1.将PD0-PD3作为输入PD4-PD7作为输出
2.输入均配置为上拉,即都为1输出拉低,即为0
3.当按下某个按键后,将该按键所连接的0,例如按下S1

stm32矩阵键盘怎么接,stm32,单片机,矩阵

第一张图可知:(列值) col=0x1110_0000,即col=0xe0
第二张图可知:(行值) row=0x0000_1110,即row=0x0e
综合起来就得到了按键S1对应的键值:res=col|row=0xee
其余所有按键均按此逻辑推得

3.代码编写

大体思路就是建立一个Key模块,包含Key.c和Key.h,最后在main里调用即可

key.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void Key_Init1(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	//PD0,1,2,3作为输出,PD4,5,6,7作为输入,且上拉,默认为1
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	//0,1,2,3置低电位,即0
	GPIO_ResetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
}

void Key_Init2(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
	//PD0,1,2,3作为输入,且上拉,默认为1;PD4,5,6,7作为输出,且置0
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}

uint16_t Key_Scan(void){
	uint16_t row,col,res;//row为行值,col为列值,res=row|col,用于主函数判断
	Key_Init1();//此时PD7...PD0为0x11110000,即0xf0
	col=GPIO_ReadInputData(GPIOD);	//读取上面的0xf0
	col=col&0xf0;//没有任何按键按下那么col必然与0xf0相等
	if(col!=0xf0)//说明可能有按键按下,需要消除抖动,进一步确定
	{
		Delay_ms(20);//消除抖动
		col=GPIO_ReadInputData(GPIOD);
		col=col&0xf0;
		if(col!=0xf0)//若还是不相等,表示必然有按键按下
		{
			col=GPIO_ReadInputData(GPIOD);
			col=col&0xf0;//如果S1按下,那此处就是0xe0&0xf0=0xe0
		}
		Key_Init2();//此时PD7...PD0为0x00001111,即0x0f
		row=GPIO_ReadInputData(GPIOD);//读取上面的0x0f
		row=row&0x0f;//没有任何按键按下那么row必然与0x0f相等
		if(row!=0x0f)//说明可能有按键按下,需要消除抖动,进一步确定
		{
			Delay_ms(20);//消除抖动
			row=GPIO_ReadInputData(GPIOD);
			row=row&0x0f;
			if(row!=0x0f)//若还是不相等,表示必然有按键按下
			{
				row=GPIO_ReadInputData(GPIOD);
				row=row&0x0f;//若S1按下,那此处就是0x0e&0x0f=0x0e
			}
			res=row|col;//0xe0|0x0e=0xee,表示按键S1对应的键值为0xee
		}
	}		
		return res;
}

key.h

#ifndef __KEY_H
#define __KEY_H
void Key_Init1(void);//获取列值
void Key_Init2(void);//获取行值
uint16_t Key_Scan(void);//获取按键值
#endif

main

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Key.h"


uint16_t keyValue=0;
int main(void)
{
	
	while(1)
	{
		keyValue=Key_Scan();//获取按键的键值
		switch(keyValue)			//根据键值确定按下的按钮
		{
			case 0xee:/**待调用函数**/;break;
			case 0xde:;break;
			case 0xbe:;break;
			case 0x7e:;break;
			
			case 0xed:;break;
			case 0xdd:;break;
			case 0xbd:;break;
			case 0x7d:;break;
			
			case 0xeb:;break;
			case 0xdb:;break;
			case 0xbb:;break;
			case 0x7b:;break;
			
			case 0xe7:;break;
			case 0xd7:;break;
			case 0xb7:;break;
			case 0x77:;break;
			
			default:break;
			
		}
	}
}
4.自我总结

学习单片机的外设时,需要了解该外设的结构原理如何驱动该外设
我在学习矩阵键盘的过程中,也是屡次试错,有时候是线接的不对,有时候是代码写的不对,不过我也在一次一次试错中找到了正确的解,希望大家在学习的过程中敢于试错不断练习善于总结,我们下期见!文章来源地址https://www.toymoban.com/news/detail-568816.html

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

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

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

相关文章

  • K_A35_017 基于STM32等单片机驱动TTP229矩阵触摸传感器 串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M TTP229矩阵触摸模块 STC89C52RC驱动TTP229矩阵触摸模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M TTP229矩阵触摸模块 STM32F103C8T6驱动TTP229矩阵触摸模块 串口与OLED0.96双显示 TTP229矩阵触摸传

    2024年02月02日
    浏览(43)
  • STM32单片机(二)STM32环境搭建

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

    2024年02月10日
    浏览(59)
  • STM32单片机开发-01 STM32介绍

    通过野火开发板学习单片机 从内核上分有Cortex-M0、M3、M4 和M7 F1 代表了基础型,基于Cortex-M3 内核,主频为72MHZ F4 代表了高性能,基于Cortex-M4 内核,主频180M。 数据手册:用于芯片选型和设计原理图 参考手册:用于编程时查阅 Icode总线 – 该总线讲M3内核的指令总线与闪存指令

    2024年01月21日
    浏览(57)
  • 【STM32】STM32单片机结构及部件原理

    STM32是目前比较常见并且多功能的单片机,要想学习STM32,首先要去了解它的基本构成部分以及各部分的原理。 单片机型号:正点原子STM32F103ZET6 目录 STM32内部结构总览图: 2.内部结构解析         1.内核 :STM32F103ZET6采用的是 ARM Cortex-M3 处理器,内核可以理解为单片机 处

    2023年04月08日
    浏览(46)
  • GD32单片机和STM32单片机的对比分析

    GD32单片机和STM32单片机都是基于Arm Cortex-M3/M4内核的32位通用微控制器,广泛应用于各种嵌入式系统和物联网领域。两者之间有很多相似之处,但也有一些不同之处,本文将从以下几个方面对比分析两者的特点、优势和开发成本。 GD32单片机采用的是二代的M3/M4内核,而STM32单片

    2024年02月16日
    浏览(57)
  • STM32单片机学习4--STM32控制八段码

    数码管:实际上是多个LED按照一定顺序排列,并加上遮罩所构成的元件。 八段码一般会引出9个引脚,其中7个引脚显示数字(或某些字母),1个显示小数点,1个作为片选端。 根据连接方式的不同,数码管分为 共阳 和 共阴 。 共阳在这端输出低电平时点亮,高电平时会熄灭

    2024年01月23日
    浏览(46)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月07日
    浏览(55)
  • 【单片机】STM32单片机,定时器的输入捕获,基于捕获的频率计,STM32F103

    下面的定时器都具有输入捕获能力: 查看另一篇文章:https://qq742971636.blog.csdn.net/article/details/131471539 外部计数频率计的缺点:需要两个定时器配合,最高能测量的频率是否有限制我没具体尝试。 基于捕获的频率计的缺点:最高能测量的频率有限制。 TIM3_CH1 PWM PA6 10KHZ。 输入

    2024年02月14日
    浏览(52)
  • STM32-01-认识单片机

    单片机是什么? 单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片。 下面是电脑与单片机的对应关系: 单片机的特点? 体积小:5mmx5mm 功耗低:mA级 集成度高:IO、TIM、AD、DA 使用方便:C、Debug 拓展灵活:IIC、SPI、FSMC 单片机有什么用? 仪器仪表:电源、

    2024年02月03日
    浏览(46)
  • 单片机stm32智能鱼缸

    随着我国经济的快速发展而给人们带来了富足的生活,也有越来越多的人们开始养鱼,通过养各种鱼类来美化居住环境和缓解压力。但是在鱼类饲养过程中,常常由于鱼类对水质、水位及光照强度有着很高的要求,而人们也由于工作的方面而无法贴心的照料,因此经常因为水

    2024年02月22日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包