news 2026/6/10 1:46:43

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于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显示

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 14:50:07

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

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

作者头像 李华
网站建设 2026/6/7 2:19:38

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

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

作者头像 李华
网站建设 2026/6/7 2:08:50

[特殊字符]_容器化部署的性能优化实战[20260126042315]

作为一名经历过多次容器化部署的工程师&#xff0c;我深知容器化环境下的性能优化有其独特之处。容器化虽然提供了良好的隔离性和可移植性&#xff0c;但也带来了新的性能挑战。今天我要分享的是在容器化环境下进行Web应用性能优化的实战经验。 &#x1f4a1; 容器化环境的性能…

作者头像 李华
网站建设 2026/6/6 21:41:29

从上传到修复完成,全流程演示科哥镜像

从上传到修复完成&#xff0c;全流程演示科哥镜像 1. 这不是普通修图工具&#xff0c;而是一套能“读懂画面”的智能修复系统 你有没有遇到过这样的情况&#xff1a;一张精心拍摄的照片&#xff0c;却被路人、电线杆、水印或文字破坏了整体美感&#xff1b;又或者老照片上出现…

作者头像 李华
网站建设 2026/6/9 19:34:22

如何降低AIGC率?全球10大最佳平台排名及免费付费方案对比

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

作者头像 李华