基于STM32F103VET6外部中断的矩阵键盘高精度计算器实现

文章目录

    • 1. 项目概述
      • 1.1 设计目标
      • 1.2 技术选型
      • 1.3 成果展示
    • 2. 硬件设计
      • 2.1 矩阵键盘电路
      • 2.2 硬件连接
    • 3. 开发环境搭建
      • 3.1 软件清单
      • 3.2 CubeMX配置步骤
    • 4. 核心代码实现
      • 4.1 外部中断配置 (exti.c)
      • 4.2 键盘扫描算法 (keypad.c)
      • 4.3 高精度计算引擎 (calculator.c)
    • 5. 系统整合与调试
      • 5.1 主程序框架 (main.c)
      • 5.2 常见问题解决
    • 6. 完整技术图谱

1. 项目概述

1.1 设计目标

实现基于STM32的外部中断触发矩阵键盘扫描,构建支持加减乘除、括号运算的高精度浮点计算器,精度达小数点后8位。

1.2 技术选型

模块技术方案
主控芯片STM32F103VET6
键盘扫描EXTI外部中断+行列扫描
计算核心自定义大数运算库
显示输出LCD1602液晶屏

1.3 成果展示

矩阵键盘输入

EXTI中断捕获

键值解码

计算引擎处理

LCD显示结果


2. 硬件设计

2.1 矩阵键盘电路

4x4 Matrix Keyboard

ROW1-PA0

COL1-PB0

COL2-PB1

ROW2-PA1

ROW3-PA2

COL3-PB2

ROW4-PA3

COL4-PB3

2.2 硬件连接

STM32引脚键盘接口功能
PA0-PA3ROW1-4中断输入
PB0-PB3COL1-4扫描输出
PC13LED状态指示

3. 开发环境搭建

3.1 软件清单

  • STM32CubeMX v6.8.0
  • Keil MDK v5.37
  • ST-Link Utility

3.2 CubeMX配置步骤

  1. 配置PA0-PA3为EXTI中断模式
  2. 设置PB0-PB3为GPIO输出
  3. 启用SYSTICK定时器
  4. 生成MDK工程代码

4. 核心代码实现

4.1 外部中断配置 (exti.c)

/* 文件名:exti.c */#include"stm32f10x.h"voidEXTI_Config(void){EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;// 配置PA0-PA3为中断源RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);// ... 其他引脚配置// 中断线参数设置EXTI_InitStruct.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2|EXTI_Line3;EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;// 下降沿触发EXTI_InitStruct.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStruct);// 配置NVICNVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x00;NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x00;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);}

4.2 键盘扫描算法 (keypad.c)

/* 文件名:keypad.c */#defineDEBOUNCE_TIME20// 消抖时间20msconstuint8_tKeyMap[4][4]={{'7','8','9','/'},{'4','5','6','*'},{'1','2','3','-'},{'C','0','=','+'}};uint8_tGetKeyValue(void){staticuint32_tlast_tick=0;if(HAL_GetTick()-last_tick<DEBOUNCE_TIME)return0xFF;// 消抖处理for(uint8_tcol=0;col<4;col++){// 设置当前列为低电平GPIO_WriteBit(GPIOB,GPIO_Pin_0<<col,Bit_RESET);// 检测行状态for(uint8_trow=0;row<4;row++){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0<<row)==RESET){GPIO_WriteBit(GPIOB,GPIO_Pin_0<<col,Bit_SET);// 恢复列状态last_tick=HAL_GetTick();returnKeyMap[row][col];}}GPIO_WriteBit(GPIOB,GPIO_Pin_0<<col,Bit_SET);// 恢复列状态}return0xFF;// 无按键}

4.3 高精度计算引擎 (calculator.c)

/* 文件名:calculator.c */#defineMAX_DIGITS16// 最大支持16位数typedefstruct{doubleoperand1;doubleoperand2;charoperator;uint8_tinput_mode;// 0:等待操作数1, 1:等待操作数2}CalcState;voidProcessInput(CalcState*calc,charkey){staticcharnum_buffer[MAX_DIGITS+1];staticuint8_tbuf_index=0;switch(key){case'0'...'9':if(buf_index<MAX_DIGITS){num_buffer[buf_index++]=key;num_buffer[buf_index]='\0';}break;case'+':case'-':case'*':case'/':if(calc->input_mode==0){calc->operand1=atof(num_buffer);calc->operator=key;calc->input_mode=1;buf_index=0;}break;case'=':if(calc->input_mode==1){calc->operand2=atof(num_buffer);switch(calc->operator){case'+':calc->operand1+=calc->operand2;break;case'-':calc->operand1-=calc->operand2;break;case'*':calc->operand1*=calc->operand2;break;case'/':if(calc->operand2!=0)calc->operand1/=calc->operand2;break;}calc->input_mode=0;}break;}}

5. 系统整合与调试

5.1 主程序框架 (main.c)

#include"stm32f10x.h"#include"lcd.h"intmain(void){HAL_Init();EXTI_Config();LCD_Init();CalcState calculator={0};while(1){charkey=GetKeyValue();if(key!=0xFF){ProcessInput(&calculator,key);LCD_DisplayResult(calculator.operand1);}}}

5.2 常见问题解决

问题现象解决方案
按键连击增加防抖延时至50ms
浮点运算精度丢失使用sprintf格式化为%.8f输出
LCD显示乱码检查时序配置,调整延时
中断无响应确认NVIC优先级配置正确

6. 完整技术图谱

STM32F103VET6

EXTI外部中断

GPIO矩阵扫描

高精度浮点运算

按键事件捕获

键值解码

计算引擎

LCD1602显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1219007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储服务器大流量写入由于 Ring Buffer 设置不合理导致丢包、断流的处理

存储服务器大流量写入由于 Ring Buffer 设置不合理导致丢包、断流的处理 现象:业务使用某厂商的私有云对象存储方案来存储大量的数据,此前已有合作的成功经验,这是另外一批存储服务器组成新的对象存储集群供业务使用…

【日记】或许我只是接受不了要求(2543 字)

正文这两天玩地平线玩得忘乎所以了。前两天折腾手动挡加手动离合器,从零开始学。明明是一个驾照都没考的人……驾照没考先从游戏里学怎么开车是不是会带偏啊……早上带朋友混进了泳池。本来去了市体育馆,有公告说直到…

冰雪聚贤,智启新局——2026崇礼论坛凝聚AI长期主义共识

2026年1月23日至25日&#xff0c;以“向新而立”为主题的2026崇礼论坛在张家口崇礼太舞小镇成功举办。论坛由崇礼区人民政府指导&#xff0c;太舞滑雪小镇、甲子光年、破圈文化、智辰半导体联合主办&#xff0c;俞敏洪、周鸿祎、沙宝亮等近百位行业大咖齐聚&#xff0c;围绕AI落…

A2UI 技术原理深度解析:AI Agent 如何安全生成富交互 UI

本文深入解析 Google 开源的 A2UI 协议&#xff0c;探讨其核心架构、数据流设计以及为何它是 LLM 生成 UI 的最佳实践。 一、A2UI 是什么&#xff1f; A2UI (Agent-to-User Interface) 是 Google 于 2025 年开源的声明式 UI 协议。它解决了一个核心问题&#xff1a; 如何让 AI…

A2UI vs 传统模式:AI Agent UI 生成方案对比与 Token 消耗分析

本文对比 A2UI 与传统 Agent UI 方案&#xff0c;从架构、安全性、开发效率和 Token 消耗等维度进行深度分析。 一、传统 Agent UI 方案的困境 在 A2UI 出现之前&#xff0c;AI Agent 与用户交互主要有以下几种方式&#xff1a; 方案 1&#xff1a;纯文本对话 用户: 帮我预订…

量子计算机的实用性为何依赖经典计算

量子计算机需要经典计算才能真正发挥作用 常规计算设备将在把量子计算机转变为具有实际应用价值的工具中扮演关键角色。 让量子计算机真正有用的一个重要因素可能恰恰是经典计算机。这是本月一次研究者集会传达的信息&#xff0c;该集会解释说&#xff0c;经典计算机对于控制…

2026灵活用工新趋势:技术人才如何抓住“碎片化”就业红利?

温馨提示&#xff1a;文末有资源获取方式~ 一、模块设计 分包商&#xff1a;税地注册公司&#xff0c;用于在当地申请有利的税收政策&#xff0c;是实际报税公司。 代理商&#xff1a;代理商可以邀请客户使用本平台&#xff0c;平台会给予代理商一定的服务费差价作为佣金。 …

【源码可参考】开源能源数据监控平台:使用Spring Boot + Vue + 时序数据库开发实践

温馨提示&#xff1a;文末有资源获取方式~ 能源系统|能源系统源码|企业能源系统|企业能源系统源码|能源监测系统 先上干货&#xff01; 墙内仓库地址&#xff08;码云&#xff09;&#xff1a;https://gitee.com/guangdong122/energy-management 已同步更新到 github 仓库 一、…

基于非对称算法的资料下载安全方案设计

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CMOS版图分析

Deep NWell 由于PMOS和NMOS共同做在一个基底上,因此必须要进行隔离。隔离的方式就是NMOS上会再铺设一层DNW。原理: N-well与P型衬底(P-sub)形成 PN结,当N-well接电源电压(VDD)、P-sub接地(GND)时,PN结处于反…

分析全国专业的少儿专注力培训公司,天使英才费用贵吗

在当前的青少年教育市场中,家长们对于能真正提升孩子专注力的培训机构需求愈发迫切,大家都在寻找高性价比的少儿专注力培训企业、口碑不错的少儿专注力培训企业以及专业的少儿专注力培训公司,而北京天使英才教育科技…

盘点专业的少儿大脑潜能开发品牌企业,排名情况如何

本榜单依托全维度市场调研与真实家长口碑,深度筛选出五家标杆企业,为家庭选型提供客观依据,助力精准匹配适配的少儿大脑潜能开发服务伙伴。 TOP1 推荐:天使英才教育科技(北京)有限公司 推荐指数:★★★★★ | 口…

AI加持的开题报告模板,助你快速完成高质量学术写作

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

想要加速学术写作?AI定制的开题报告模板不容错过

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

这份AI优化的开题报告模板,让你的写作更高效精准

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

这份AI增强的开题报告模板,是学术写作的理想选择

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

降低AIGC生成内容重复率的最佳网站排名:10大免费与付费平台方案详细对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

从0开始学语音检测:FSMN-VAD新手实战教程

从0开始学语音检测&#xff1a;FSMN-VAD新手实战教程 语音端点检测&#xff08;VAD&#xff09;是语音处理流水线中那个“默默站岗的守门人”——它不负责听懂你说什么&#xff0c;但必须第一时间判断“现在有没有人在说话”。没有它&#xff0c;语音识别系统就会把大量静音、…

2026年汽车座椅发泡生产线设备厂商性价比排名,选购要点分享

2025年汽车产业智能化、轻量化转型加速,汽车座椅发泡生产线作为汽车内饰核心制造环节的关键设备,其技术稳定性、工艺适配性直接决定企业产品品质与生产效率。无论是汽车主机厂的大规模标准化生产,还是零部件企业的多…

深度测评降低AIGC率的优质网站:10个平台免费版与付费版差异对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…