2024-09-01
售卖作品
00

目录

实验报告:利用键盘及数码管实现基本计算器功能
一、实验背景
二、实验器件
三、硬件连接
四、设计原理
1. 矩阵键盘扫描
2. 基本运算功能
3. 数码管显示
4. 记忆功能
五、实验总结
资料

1 利用键盘及数码管作为计算机的输入及显示模块

2 能进行10以内的减减乘除的基本运算,按键有0~9+-*/=

3 有清零“CR”按键

4 有记忆功能键 M+ RM M-,可以保存、显示并运用存储数据进行计算

  1. M+:记忆当前数字,「加入」累加数字当中。

  2. M-:记忆当前数字,以负数的形式「加入」累加数字当中。换句话说,就是把总数扣除当前数字的意思。

  3. MR:Memory Recall的意思,将当前计算出来的数字呈现出来。

在这里插入图片描述

在这里插入图片描述

实验报告:利用键盘及数码管实现基本计算器功能

一、实验背景

本实验旨在设计并实现一个简易计算器,能够通过键盘输入进行基本的加、减、乘、除运算,并通过数码管显示计算结果。计算器还应具备清零功能以及存储和调用中间计算结果的记忆功能。

二、实验器件

  1. 单片机:STC89C52RC

  2. 键盘:4x4矩阵键盘

  3. 数码管:共阴极七段数码管

  4. 其他器件:电阻、电容、跳线等

三、硬件连接

  1. 矩阵键盘:将键盘的行连接到P1.0至P1.3,列连接到P1.4至P1.7。

  2. 数码管:数码管的段选端连接到P0口,位选端连接到P2口。

  3. 独立按键:三个独立按键分别连接到P3.0、P3.1和P3.2,用于实现M+、M-、MR功能。

四、设计原理

1. 矩阵键盘扫描

通过P1口控制矩阵键盘,逐行扫描键盘,判断按键按下情况。通过行列信号组合,确定具体按键值。

c
void KeyScan() { keyboPORT = 0xf0; if (keyboPORT != 0xf0) { delay(5); if (keyboPORT != 0xf0) { switch (keyboPORT) { case 0xe0: KeyValue = 0; break; case 0xd0: KeyValue = 1; break; case 0xb0: KeyValue = 2; break; case 0x70: KeyValue = 3; break; } keyboPORT = 0x0f; switch (keyboPORT) { case 0x0e: KeyValue = KeyValue; break; case 0x0d: KeyValue += 4; break; case 0x0b: KeyValue += 8; break; case 0x07: KeyValue += 12; break; } while (keyboPORT != 0x0f); } } }

2. 基本运算功能

通过捕获键盘输入,存储表达式,然后进行加、减、乘、除运算,并显示结果。

c
float CalculateSeries(char *exprs_str) { float Series_result = 0.0; switch (exprs_str[1]) { case '+': Series_result = (exprs_str[0] - '0') + (exprs_str[2] - '0'); break; case '-': Series_result = (exprs_str[0] - '0') - (exprs_str[2] - '0'); break; case '*': Series_result = (exprs_str[0] - '0') * (exprs_str[2] - '0'); break; case '/': Series_result = (exprs_str[0] - '0') / (exprs_str[2] - '0'); break; } return Series_result; }

3. 数码管显示

通过数码管显示结果,使用四位数码管分别显示千位、百位、十位和个位的数值。

c
void Display_Result(float d) { long temp = (long) (d * 10); // 显示个位 P0 = 0xff; P2 = ~0x8; P0 = ~LEDData[temp % 10]; delay(1); // 显示十位 P0 = 0xff; P2 = ~0x4; P0 = ~(LEDData[temp % 100 / 10] | 0x80); delay(1); // 显示百位 P0 = 0xff; P2 = ~0x2; P0 = ~LEDData[temp % 1000 / 100]; delay(1); // 显示千位 P0 = 0xff; P2 = ~0x1; P0 = ~LEDData[temp % 10000 / 1000]; delay(1); }

4. 记忆功能

实现M+、M-、MR功能,通过独立按键输入控制,分别执行累加、累减和显示存储结果。

c
void main() { float result = 0.0, display_value = 0, temp = 0.0; char expression[5], inputChar; unsigned char key; while (1) { KeyScan(); if (KeyValue != 0xff) { inputChar = MAP[KeyValue]; KeyValue = 0xff; if ((inputChar >= '0') && (inputChar <= '9')) { expression[count++] = inputChar; display_value = inputChar - '0'; } else if (strchr("+-*/=", inputChar)) { expression[count++] = inputChar; if (inputChar == '=') { result = CalculateSeries(expression); display_value = result; temp = result; count = 0; } } else if (inputChar == 'R') { result = 0; display_value = result; temp = 0; count = 0; } } key = KeySscanSI(); if (key != 0xff) { switch (key) { case 1: temp += CalculateSeries(expression); display_value = temp; count = 0; break; case 2: temp -= CalculateSeries(expression); display_value = temp; count = 0; break; case 3: display_value = temp; break; } } Display_Result(display_value); } }

五、实验总结

通过本次实验,成功实现了一个简易计算器的设计,能够进行基本的算术运算,并通过数码管显示结果。键盘输入和数码管显示配合良好,记忆功能有效。进一步的优化可以考虑增强运算功能,支持更复杂的表达式计算。

资料

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!