当前位置: 首页 > article >正文

STM32矩阵键盘驱动实战解析

矩阵键盘驱动程序实现以下是一个基于STM32标准库的4x4矩阵键盘驱动程序实现使用PA4-PA7作为行线PC0-PC3作为列线。硬件连接行线(输出): PA4-PA7列线(输入): PC0-PC3上拉电阻: 列线需要外部上拉电阻(4.7kΩ-10kΩ)初始化函数void KeyPad_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); // 配置行线(PA4-PA7)为推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 配置列线(PC0-PC3)为上拉输入 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_Init(GPIOC, GPIO_InitStructure); // 初始化所有行线为高电平(无按键扫描) GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); }按键扫描函数int KeyPad_Get(void) { uint8_t row, col; uint16_t rowPins[] {GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7}; uint16_t colPins[] {GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3}; // 扫描每一行 for(row 0; row 4; row) { // 设置当前行为低电平其他行为高电平 GPIO_WriteBit(GPIOA, rowPins[0], (row ! 0) ? Bit_SET : Bit_RESET); GPIO_WriteBit(GPIOA, rowPins[1], (row ! 1) ? Bit_SET : Bit_RESET); GPIO_WriteBit(GPIOA, rowPins[2], (row ! 2) ? Bit_SET : Bit_RESET); GPIO_WriteBit(GPIOA, rowPins[3], (row ! 3) ? Bit_SET : Bit_RESET); // 延时消抖 Delay_ms(1); // 读取列线状态 for(col 0; col 4; col) { if(GPIO_ReadInputDataBit(GPIOC, colPins[col]) Bit_RESET) { // 等待按键释放 while(GPIO_ReadInputDataBit(GPIOC, colPins[col]) Bit_RESET); return (row * 4) col; } } } return 0xFF; // 无按键按下 }辅助延时函数void Delay_ms(uint32_t ms) { uint32_t i; for(i 0; i ms; i) { uint32_t j; for(j 0; j 7200; j); // 根据系统时钟调整 } }使用示例int main(void) { KeyPad_Init(); while(1) { int key KeyPad_Get(); if(key ! 0xFF) { // 处理按键 // key值为0-15对应键盘上的按键 } Delay_ms(100); // 适当延时防止过于频繁扫描 } }注意事项按键消抖时间可根据实际需求调整系统时钟不同时需要调整Delay_ms函数实际应用中可添加按键长按、连按等功能如需更精确的延时可使用定时器实现该实现采用逐行扫描方式检测按键通过将每行依次置低并检测列线状态来确定按键位置。返回值为0-15对应4x4矩阵的按键编号无按键时返回0xFF。

相关文章:

STM32矩阵键盘驱动实战解析

矩阵键盘驱动程序实现以下是一个基于STM32标准库的4x4矩阵键盘驱动程序实现,使用PA4-PA7作为行线,PC0-PC3作为列线。硬件连接行线(输出): PA4-PA7列线(输入): PC0-PC3上拉电阻: 列线需要外部上拉电阻(4.7kΩ-10kΩ)初始化函数void KeyPad_Init(void) {GP…...

褪去故事滤镜:重建精品可可的“结构语言”

卷首语:在这个充满营销话术的时代,我们似乎越来越习惯用“动人的故事”去消费一个产品。但作为一个对真实风味保持怀疑与严谨态度的品鉴者,我们深知:故事,永远无法替代判断。今天,让我们褪去滤镜。从亚洲产…...

《低电压设计必看!轨到轨运放选型、电路搭建与常见坑避坑手册》

前言在模拟电路设计中,运算放大器(简称运放)的输出摆幅是关键性能指标之一。随着低电源电压设计的普及(如 3.3V、2.5V 甚至 1.8V 供电),传统运放 “输出摆幅远离电源轨” 的缺陷愈发明显,而轨到…...

从零开发微信小程序+若依后端项目:本地全流程开发,从环境搭建到前后端联调跑通

想一个人做一套类似淘宝的电商小程序,前端用微信小程序,后端用成熟的若依管理系统,电脑上用VSCode、IDEA、Docker搭配开发,第一步纯本地开发到底该怎么做?有没有隐藏的坑?其实,本地开发→服务器…...

TTTTT

TTTTTT...

深扒GEO优化行业潜规则:全网首次深度拆解底层逻辑

随着生成式AI成为新的信息入口,GEO(生成引擎优化)被炒成“AI时代SEO”,一时间各类培训课程、高价服务层出不穷,声称“4800元解锁大模型优先推荐”“10天保前三”,让不少创业者、中小企业主陷入焦虑&#xf…...

评判方法:你现在正使用的服装ERP软件该升级吗?

做服装行业的老板,大概都有过这样的困扰:手里的ERP软件用了两三年,一开始挺顺手,可随着企业规模扩大、款式增多、渠道变杂,越来越感觉“力不从心”——查库存要翻半天,对账容易出错,新的业务需求…...

【数据集】省级建成区绿化覆盖率数据(2006-2023年)

数据简介:建成区绿化覆盖率是指城市建成区的绿化覆盖面积占建成区的百分比。它反映了城市绿化水平的高低,是衡量城市生态环境质量的重要指标之一。建成区绿化覆盖率是一个反映城市生态环境质量的重要指标,各地政府正在通过加强园林绿化建设等…...

高效查重工具评测:9大方案助力论文质量提升

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…...

大数据领域Spark的数据存储与读取方式

大数据领域Spark的数据存储与读取方式 关键词:Spark数据存储、Spark数据读取、分布式文件系统、列式存储格式、数据湖仓架构 摘要:本文深入解析Apache Spark在大数据场景下的数据存储与读取技术体系,系统阐述从基础数据抽象到复杂存储引擎的核…...

论文查重全攻略:9款工具深度评测与优化建议

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…...

关于4G低功耗机器排查离线工作问题总结一

机器离线,其原理大致为超时没有收到心跳为由判定离线,其中原因可能有如下,需要逐步排查: 1、确认机器是否开机,或者处于低功耗休眠状态,如果彻底关机,那就会因为没有心跳发送而进入离线状态。 2…...

彩色声调法有哪些实际教学案例?

彩色声调法在实际教学中不仅应用于数字化资源,也衍生出许多生动有趣的线下互动游戏。以下是几个具体的教学案例: “四声四色球”课堂游戏 这是一个将抽象声调转化为具体实物操作的互动教学案例。 教具准备:教师准备红、黄、绿、蓝四种颜色的…...

【Python入门实战】一周吃透基础语法!

趣味数字小游戏合集(含循环/分支/迭代器)大家好!本周我集中学习了Python基础语法、分支循环、循环控制语句以及迭代器等核心知识点,与其死记硬背语法规则,不如用几个趣味小游戏把这些知识点串起来实战——既练手又好玩…...

批量字符替换工具技术解析:原理、特性与应用实践

在软件技术领域,文本处理是一项基础而又至关重要的技术环节。 无论是编译器对源代码的词法分析,还是搜索引擎对网页内容的索引建立,亦或是数据清洗过程中对原始数据的格式化整理,都离不开对文本内容的读取、分析和修改。 而在众…...

写作神器,又是小说下载神器,牛逼的 51mazi

写作神器,又是小说下载神器,牛逼的 51mazi 想写小说时,它帮你把人物、地图、禁词、进度全管好;想看书时,它又能搜书名、选书源、一键下载到本地或导出 TXT。一个软件,既能写,又能下——说的就是…...

第6章 线性相关性、秩与维度:系统的独立程度

底层数学四部曲第四部 线性代数:入门与全领域展开 第6章 线性相关性、秩与维度:系统的独立程度 线性相关性、秩与维度的本质,是刻画系统中“有效信息”的数量与独立程度,是贯穿线性代数所有核心内容的“主线逻辑”。 前面五章&…...

软考高项:第22章:组织通用治理(占分分析/考点/题)

本章节属于《信息系统项目管理师》(第4版)的补充管理知识。在考试中,通常在上午的客观选择题中占2分左右,且有上升趋势。考查的重点通常偏向概念的识记,如组织战略的类型、绩效考核评估的方法、绩效计划的原则以及数字…...

模板编译期计算

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

品质铸就品牌——山西永鑫生重工股份有限公司的锻件优势

在山西定襄这个锻造产业聚集地,山西永鑫生重工股份有限公司以其卓越的品质、及时的工期和综合实力,成为众多客户的首选合作伙伴。作为一家专业的锻件生产厂家,公司在产品品质、生产效率和客户服务方面展现出了明显的竞争优势。【卓越品质&…...

版本控制进阶Git内部原理与工作流

版本控制进阶:Git内部原理与工作流 在软件开发中,版本控制是团队协作的核心工具,而Git作为分布式版本控制系统的代表,其内部原理与高效工作流是开发者进阶的必修课。理解Git的底层机制不仅能解决日常开发中的疑难问题&#xff0c…...

cmu15445 25fall环境配置

llvm clangd codelldb cmake(ninjia) cmakelist比较难写,考虑到使用clangd,必须要加上参数-DCMAKE_EXPORT_COMPILE_COMMANDS1 或者去cmakelist里加一行set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 1 设置->clangd:argument加一行--compile-commands-…...

Centos7 安装配置MySQL5.7

MySQL 简介 是一个关系型数据库管理系统,由瑞典MySQL AB(创始人Michael Widenius)公司开发,2008被Sun收购(10亿美金),2009年Sun被Oracle收购。是一种关联数据库管理系统,将数据保存…...

C++与自动驾驶系统

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

模板代码安全性增强

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

编译器扩展与C++兼容性

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

C++与Rust交互编程

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

PCL 计算两片点云重叠区域的均值标准差【2026最新版】

本文由CSDN点云侠原创,原文链接,首发于:2021年03月11日。博客长期更新,本文最新更新时间为:2026年3月15日。 一、主要函数 getCorDistMeanStd() void pcl::registration::getCorDistMeanStd (...

PCL 提取两片点云的重叠部分并保存【2026最新版】

目录 一、 原理 二、 代码实现 三、 结果展示 本文由CSDN点云侠原创,博客长期更新,本文最近一次更新时间为:2026年3月15日。 一、 原理 pcl::correspondences类里面有query和match两个成员,分别是source和target点云上对应点对的索引。可以通过source[query]来访问source中…...

SpringCloud通过服务逻辑分组实现灰度功能

声明:内容来自AI,未经验证,仅供参考!1、原理服务注册到注册中心时,我们可以添加额外的信息对服务进行打标/染色,从而实现逻辑分组。当有调用时,我们根据HTTP头信息(约定好头)来决定转…...