【STM32】4x4矩阵键盘

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

key.c

#include "key.h"
#include "delay.h"

void key_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//行:推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_13;//行连接的引脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//列:上拉输入,检测高低电频来判断按键是否按下,有按键按下为0,没有按键按下为1
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6;//列连接的引脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);

}

//通过一行行扫描,检测到0即为按下,返回按钮,方法比较简单,感觉比寄存器好理解
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按	mode:0,不支持连续按;1,支持连续按;
	
	//检测第一行
	key_row1_low;key_row2_high;key_row3_high;key_row4_high;
	if(key_up&&(S1==0||S2==0||S3==0||S4==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(S1==0)return S1_PRES;
		else if(S2==0)return S2_PRES;
		else if(S3==0)return S3_PRES;
		else if(S4==0)return S4_PRES;
		
	}else if(S1==1&&S2==1&&S3==1&&S4==1)key_up=1; 

	//检测第二行
    key_row1_high;key_row2_low;key_row3_high;key_row4_high;
	if(key_up&&(S5==0||S6==0||S7==0||S8==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(S5==0)return S5_PRES;
		else if(S6==0)return S6_PRES;
		else if(S7==0)return S7_PRES;
		else if(S8==0)return S8_PRES;
		
	}else if(S5==1&&S6==1&&S7==1&&S8==1)key_up=1; 
	
	//检测第三行
	key_row1_high;key_row2_high;key_row3_low;key_row4_high;
	if(key_up&&(S9==0||S10==0||S11==0||S12==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(S9==0)return S9_PRES;
		else if(S10==0)return S10_PRES;
		else if(S11==0)return S11_PRES;
		else if(S12==0)return S12_PRES;
		
	}else if(S9==1&&S10==1&&S11==1&&S12==1)key_up=1; 

	//检测第四行
  key_row1_high;key_row2_high;key_row3_high;key_row4_low;
	if(key_up&&(S13==0||S14==0||S15==0||S16==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(S13==0)return S13_PRES;
		else if(S14==0)return S14_PRES;
		else if(S15==0)return S15_PRES;
		else if(S16==0)return S16_PRES;
		
	}else if(S13==1&&S14==1&&S15==1&&S16==1)key_up=1; 
	
	return 0;// 无按键按下
}

 

key.h文章来源地址https://www.toymoban.com/news/detail-655772.html

#ifndef __KEY_H
#define __KEY_H	
#include "sys.h"
#include"stm32f10x.h"

#define S1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)//读取按键S1,PC9
#define S2  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)//读取按键S2,PC8
#define S3  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)//读取按键S3,PC7
#define S4  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)//读取按键S4,PC6
#define S5  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)//读取按键S5,PC9
#define S6  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)//读取按键S6,PC8
#define S7  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)//读取按键S7,PC7
#define S8  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)//读取按键S8,PC6
#define S9  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)//读取按键S9,PC9
#define S10 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)//读取按键S10,PC8
#define S11 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)//读取按键S11,PC7
#define S12 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)//读取按键S12,PC6
#define S13 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)//读取按键S13,PC9
#define S14 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)//读取按键S14,PC8
#define S15 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)//读取按键S15,PC7
#define S16 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)//读取按键S16,PC6
#define S1_PRES  1
#define S2_PRES  2
#define S3_PRES  3
#define S4_PRES  4
#define S5_PRES  5
#define S6_PRES  6
#define S7_PRES  7
#define S8_PRES  8
#define S9_PRES  9
#define S10_PRES 10
#define S11_PRES 11
#define S12_PRES 12
#define S13_PRES 13
#define S14_PRES 14
#define S15_PRES 15
#define S16_PRES 16

#define key_row1_low   GPIO_WriteBit(GPIOC,GPIO_Pin_3,Bit_RESET) //第一行
#define key_row1_high  GPIO_WriteBit(GPIOC,GPIO_Pin_3,Bit_SET) 
#define key_row2_low   GPIO_WriteBit(GPIOC,GPIO_Pin_2,Bit_RESET) //第二行
#define key_row2_high  GPIO_WriteBit(GPIOC,GPIO_Pin_2,Bit_SET) 
#define key_row3_low   GPIO_WriteBit(GPIOC,GPIO_Pin_0,Bit_RESET) //第三行
#define key_row3_high  GPIO_WriteBit(GPIOC,GPIO_Pin_0,Bit_SET) 
#define key_row4_low   GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET) //第四行
#define key_row4_high  GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET) 

void key_Init(void);
u8 KEY_Scan(u8 mode);

#endif

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

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

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

相关文章

  • STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039

    STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039 Proteus 仿真小实验: STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039 功能: 硬件组成:STM32F103R6单片机 +TM1637驱动4位数码管+4x4矩阵键盘+蜂鸣器 1.有一个开启键,点击后蜂鸣器短响一声,开始抢答。此后4位数码管倒计

    2024年02月08日
    浏览(42)
  • Arduino UNO 4X4矩阵键盘

    目录 一,硬件 二,原理 三,电路图 四,代码  五,实物图 Arduino UNO 4X4矩阵键盘         连接矩阵键盘的8个IO全部上拉,先使行线变为输入,列线变为输出并为低电平,若有按键按下,则对应的行线接地,判断哪个行线为低电平,则可读出第几行有按键被按下;然后使列

    2024年02月16日
    浏览(47)
  • STM32单片机4*4矩阵键盘相关代码

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

    2024年02月07日
    浏览(43)
  • 基于FPGA的4x4矩阵键盘控制器verilog开发实现

    欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果        基于FPGA的4x4矩阵键盘控制器是一种使用FPGA(现场可编程门阵列)来实现对4x4矩阵键盘进行控制的设备。该控制器能够有效地降低硬件资源的使用,提高系

    2024年02月11日
    浏览(51)
  • word 如何编写4x4矩阵

    百度上给的教程,打印出来没有对齐 https://jingyan.baidu.com/article/6b182309995f8dba58e159fc.html 百度上的方式试了一下,不会对齐。导致公式看起来很奇怪。 下面方式会自动对齐 摸索了一下发现可以用下面这种方式编写 4x4 矩阵。先创建一个 3x3矩阵,然后选择其中一个矩阵,右键插入

    2024年02月04日
    浏览(51)
  • 矩阵乘法优化:4x4矩阵块优化方法

    MMult_4x4_3.h 一次计算C中的4x4小块 0.24gflops 2.1% 1 MMult_4x4_4.h 一次计算C中的4x4小块 0.24gflops 2.1% 1 MMult_4x4_5.h 一次计算C中的4x4小块,将16个循环合并一个 0.25gflops 2.2% 1 MMult_4x4_6.h 一次计算C中的4x4小块(我们在寄存器中累加C的元素,并对a的元素使用寄存器) 1.75gflops 16.0% 1 MMult_4x4_7.h 在

    2024年02月15日
    浏览(50)
  • STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4

    STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 Proteus 仿真小实验: STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 功能: 硬件组成:STC15W4K32S4单片机 +LCD12864显示器+4x4矩阵键盘+HX711电子秤 1.单片机通过HX711读取称重传感器数据计算出重量,重量乘于单价可以

    2024年02月12日
    浏览(46)
  • UG\NX二次开发 获取部件的4x4矩阵

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan 输入部件occ,获取矩阵。用函数UF_ASSEM_ask_transform_of_occ(),比较直接。 输入部件的实例或事例,获取矩阵。用函数UF_ASSEM_ask_component_data()。 通过部件事例获取实例的方法

    2024年02月14日
    浏览(50)
  • UG\NX二次开发 获取部件的4x4矩阵的方法

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan 方法1: 输入部件occ,获取矩阵。用函数UF_ASSEM_ask_transform_of_occ(),比较直接。 方法2: 输入部件的实例或事例,获取矩阵。用函数UF_ASSEM_ask_component_data()。 通过部件事例获取实例的方法 相关函数:    

    2024年02月12日
    浏览(54)
  • STM32单片机学习3--STM32控制键盘

    单片机型号:STM32F103C8T6 开发环境:Keil5 4种输入模式 上拉输入模式:在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为1,高电平(与Vdd相连的为上拉电阻); 下拉输入模式:在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为0,低电平(与Vss相连的为下拉电

    2024年02月10日
    浏览(59)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包