news 2026/4/11 10:19: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/4/5 11:18:42

AI辅助的开题报告模板,助你轻松搞定学术写作任务

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

作者头像 李华
网站建设 2026/4/7 16:37:04

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

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

作者头像 李华
网站建设 2026/4/9 23:41:22

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

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

作者头像 李华
网站建设 2026/3/27 3:34:30

图像分层新玩法:Qwen-Image-Layered让每个图层都可编辑

图像分层新玩法&#xff1a;Qwen-Image-Layered让每个图层都可编辑 1. 什么是图像分层&#xff1f;为什么它改变了编辑游戏规则 你有没有试过想把一张照片里的人像单独抠出来换背景&#xff0c;结果边缘毛躁、发丝粘连、阴影错位&#xff1f;或者想给海报里的文字换个颜色&am…

作者头像 李华
网站建设 2026/3/26 17:28:09

降低AIGC重复率的10大最佳网站排名:免费与付费方案深度分析

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

作者头像 李华