【STM32】矩阵计算器

【STM32】矩阵计算器

资料链接请在文章末尾获取~

1.说明

使用元器件:stm32f103c8t6最小系统板x1,0.96寸OLED显示屏四角x1,4x4矩阵按键x1;
参考:正点原子有关4脚OLED驱动float型数据的驱动文件,优快云有关矩阵横向扫描的原理文件。
功能:可以用1999的操作数完成+,-,x,/,%的运算。
问题:操作数与被操作数都只能是3位,并且不能更改,只能复位。
引脚对应:A0
3对应r14(行),A47对应c1~c4(列)
键位对应图:
1, 2, 3, 4------------- 1 2 3 +
5, 6, 7, 8------------- 4 5 6 -
9, 10, 11, 12------------ 7 8 9 *
13, 14, 15, 16------------ / 0 % =

image

二.资料内容

  1. 程序源码
  2. 原理图
  3. 演示视频

三.链接

【STM32】矩阵计算器 (qq.com)

### STM32矩阵键盘计算器实现代码与项目教程 基于STM32矩阵键盘计算器项目是一个典型的嵌入式系统设计案例,它结合了硬件和软件开发。以下是一个完整的实现方案,包括硬件连接、软件设计以及代码示例。 #### 硬件设计 硬件部分主要包括STM32微控制器、矩阵键盘、显示器(如LCD或LED)、以及其他外围电路。矩阵键盘的设计参考[^2]中提到的方法:通过行和列的方式减少IO口的使用数量。例如,一个4x4矩阵键盘只需要8个IO口即可实现16个按键的功能。 #### 软件设计 软件部分主要负责处理用户输入、计算逻辑以及结果显示。以下是实现的基本流程: 1. 初始化GPIO引脚:将矩阵键盘的行设置为输入模式(上拉),列设置为输出模式(推挽输出低电平)。 2. 扫描矩阵键盘:通过逐行扫描法检测按键状态。 3. 处理按键输入:根据用户输入的数字和运算符进行计算。 4. 显示结果:将计算结果显示在显示器上。 #### 代码实现 以下是一个简单的代码示例,展示如何在STM32上实现矩阵键盘扫描和基本计算功能。 ```c #include "stm32f10x.h" #define ROW_PINS {GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3} #define COL_PINS {GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7} // 键盘映射表 const char key_map[4][4] = { {'1', '2', '3', '+'}, {'4', '5', '6', '-'}, {'7', '8', '9', '*'}, {'C', '0', '=', '/'} }; void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置列引脚为输出模式 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; for (int i = 0; i < 4; i++) { GPIO_InitStruct.GPIO_Pin = COL_PINS[i]; GPIO_Init(GPIOA, &GPIO_InitStruct); } // 配置行引脚为输入模式 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; for (int i = 0; i < 4; i++) { GPIO_InitStruct.GPIO_Pin = ROW_PINS[i]; GPIO_Init(GPIOA, &GPIO_InitStruct); } } char Scan_Keyboard(void) { for (int col = 0; col < 4; col++) { // 将当前列设置为低电平,其余列为高电平 for (int i = 0; i < 4; i++) { if (i == col) { GPIO_ResetBits(GPIOA, COL_PINS[i]); } else { GPIO_SetBits(GPIOA, COL_PINS[i]); } } // 检测行引脚是否有低电平 for (int row = 0; row < 4; row++) { if (!(GPIO_ReadInputDataBit(GPIOA, ROW_PINS[row]))) { return key_map[row][col]; } } } return '\0'; } int main(void) { GPIO_Config(); while (1) { char key = Scan_Keyboard(); if (key != '\0') { // 在这里处理按键输入 // 例如,显示按键值或执行计算 } } } ``` 上述代码实现了矩阵键盘的基本扫描功能,并返回按键对应的字符。可以根据需求进一步扩展,例如添加计算逻辑和结果显示功能。 #### 注意事项 - 确保GPIO引脚配置正确,避免短路或损坏硬件。 - 根据实际使用的显示器类型(如LCD或LED),编写相应的显示驱动程序。 - 对于复杂的数学运算,可以考虑使用浮点数库或第三方库支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

おもいね

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值