利用矩阵按键和LCD1602实现计算器功能(加减除、十进制和二进制转换) 注:除法运算结果显示保留两位小数
时间: 2023-12-03 20:42:37 浏览: 89
网页版科学计算器 二进制计算器 在线十六进制计算器.zip
这是一个比较复杂的项目,需要涉及到矩阵按键、LCD1602显示屏、数值计算等多个方面的知识。这里提供一个简单的实现思路,供参考:
1. 确定需要实现的功能:加减除、十进制和二进制转换。
2. 设计按键矩阵,将不同的数字、运算符等分配到不同的按键上。
3. 通过矩阵按键读取用户输入的数字、运算符等信息。
4. 根据用户输入的信息,进行相应的数值计算或转换。
5. 将计算结果或转换结果显示到LCD1602屏幕上。
下面是一个简单的代码实现,仅供参考:
```c
#include <LiquidCrystal.h>
#define ROWS 4
#define COLS 4
const byte ROW_PINS[ROWS] = { 9, 8, 7, 6 };
const byte COL_PINS[COLS] = { 5, 4, 3, 2 };
char keys[ROWS][COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'.', '0', '=', '/'}
};
LiquidCrystal lcd(12, 11, 10, 1, 0, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
pinMode(ROW_PINS[0], INPUT_PULLUP);
pinMode(ROW_PINS[1], INPUT_PULLUP);
pinMode(ROW_PINS[2], INPUT_PULLUP);
pinMode(ROW_PINS[3], INPUT_PULLUP);
}
void loop() {
char key = get_key();
if (key != '\0') {
lcd.print(key);
if (key == '=') {
evaluate();
}
}
}
char get_key() {
for (byte row = 0; row < ROWS; row++) {
digitalWrite(ROW_PINS[row], LOW);
for (byte col = 0; col < COLS; col++) {
if (digitalRead(COL_PINS[col]) == LOW) {
delay(50);
while (digitalRead(COL_PINS[col]) == LOW);
digitalWrite(ROW_PINS[row], HIGH);
return keys[row][col];
}
}
digitalWrite(ROW_PINS[row], HIGH);
}
return '\0';
}
void evaluate() {
String input = lcd.readString();
double num1, num2, result;
char op;
int pos;
input.trim();
pos = input.indexOf('+');
if (pos >= 0) {
num1 = input.substring(0, pos).toFloat();
num2 = input.substring(pos + 1).toFloat();
result = num1 + num2;
lcd.clear();
lcd.print(result, 2);
return;
}
pos = input.indexOf('-');
if (pos >= 0) {
num1 = input.substring(0, pos).toFloat();
num2 = input.substring(pos + 1).toFloat();
result = num1 - num2;
lcd.clear();
lcd.print(result, 2);
return;
}
pos = input.indexOf('*');
if (pos >= 0) {
num1 = input.substring(0, pos).toFloat();
num2 = input.substring(pos + 1).toFloat();
result = num1 * num2;
lcd.clear();
lcd.print(result, 2);
return;
}
pos = input.indexOf('/');
if (pos >= 0) {
num1 = input.substring(0, pos).toFloat();
num2 = input.substring(pos + 1).toFloat();
result = num1 / num2;
lcd.clear();
lcd.print(result, 2);
return;
}
lcd.clear();
lcd.print("Invalid input");
}
```
这段代码实现了一个简单的四则运算计算器,可以通过矩阵按键输入数字和运算符,然后计算出结果并显示在LCD1602屏幕上。其中,get_key()函数用于读取矩阵按键的输入,evaluate()函数用于进行数值计算。需要注意的是,除法运算结果需要保留两位小数,可以通过print()函数的第二个参数指定保留的小数位数。
阅读全文