|
使用Arduino开发板、LCD和键盘可以轻松实现一个简单的基于Arduino的计算器,使用键盘和LCD来解决数学计算。使用此项目可以轻松完成简单的数学计算,例如加法、减法、乘法和除法。
1602 LCD能够解决16位之内的数学计算,而无需延迟和快速处理。Arduino程序也很简单,几乎就像简单的C程序,仅基于加、减、乘和除的简单公式。那么,让我们实现这个简单的小项目。
电路图和要求 电路图非常简单,既可以直接在Arduino开发板上组装电路,也可以通过制作pcb组装电路。电路组件列表如下。 ● Arduino Uno开发板 ● 1602液晶屏 ● 4 * 4薄膜矩阵键盘 ● 复位开关 ● 电位器 ● 9伏电池 ● 面包板和连接导线
源代码 程序基于Arduino UNO开发板,使用Arduino语言完成。您需要为键盘添加一个额外的Arduino库文件,如#include <Keypad.h>。因此,请从adafruit库下载此文件。组装后,只需将源代码上传到Arduino Uno开发板中,就可以享受基于Arduino的计算器。 - #include <Keypad.h>
- #include <LiquidCrystal.h>
- // 1. LCD Pins
- LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
- // 2. Keypad Pins
- const byte Rows = 4;
- const byte Cols = 4;
- char keys[Rows][Cols] =
- {
- {'1', '2', '3', '+'},
- {'4', '5', '6', '-'},
- {'7', '8', '9', '*'},
- {'C', '0', '=', '/'}
- };
- byte rowPins[Rows] = {A2, A3, A4, A5};
- byte colPins[Cols] = {2, 3, 4, 5};
- Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, Rows, Cols);
- // 3. Dot Button
- int dot = A0;
- int dotFlag = 0;
- int dotButton = 0;
- // 4. Calculator Operators
- float num1, num2, fraction;
- float total;
- char operation, button;
- // 5. Loading Setup
- char input[16];
- int n = 1750;
- void setup()
- {
- // Initialize dot button as input to Arduino
- pinMode(dot, INPUT);
- // Initialize LCD Size
- lcd.begin(16, 2);
- // LCD Loading Setup Begin
- lcd.clear();
- lcd.setCursor(3, 0);
- lcd.print("LOADING...");
- for (int i = 0; i < 16; i++)
- {
- lcd.setCursor(i, 1);
- lcd.write(255);
- delay(50);
- }
- lcd.clear();
- lcd.setCursor(1, 0);
- lcd.print("Simple Arduino");
- lcd.setCursor(3, 1);
- lcd.print("Calculator");
- delay(n);
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Designed By");
- lcd.setCursor(2, 1);
- lcd.print("Alex Newton");
- delay(n);
- lcd.clear();
- lcd.setCursor(1, 0);
- lcd.print("Alex Newton");
- lcd.setCursor(2, 1);
- lcd.print("how2electronics.com");
- delay(n);
- lcd.clear();
- lcd.setCursor(1, 0);
- lcd.print("Alex Newton");
- lcd.setCursor(2, 1);
- lcd.print("how2electronics.com");
- delay(n);
- lcd.clear();
- // LCD Loading Setup End
- }
- void loop()
- {
- // First while loop for num1.
- while (1)
- {
- dotButton = digitalRead(dot);
- button = customKeypad.getKey();
- if (button == 'C')
- {
- dotFlag = 0;
- num1 = 0;
- num2 = 0;
- fraction = 0;
- total = 0;
- operation = 0;
- lcd.clear();
- }
- else if (dotButton == LOW)
- {
- dotFlag = 1;
- }
- else if (button >= '0' && button <= '9')
- {
- if (dotFlag == 0)
- {
- num1 = num1 * 10 + (button - '0');
- lcd.setCursor(0, 0);
- lcd.print(num1);
- }
- else if (dotFlag == 1)
- {
- fraction = (button - '0');
- num1 = num1 + (fraction / 10);
- lcd.setCursor(0, 0);
- lcd.print(num1);
- dotFlag++;
- }
- else if (dotFlag == 2)
- {
- fraction = (button - '0');
- num1 = num1 + (fraction / 100);
- lcd.setCursor(0, 0);
- lcd.print(num1);
- dotFlag++;
- }
- }
- else if (button == '-' || button == '+' || button == '*' || button == '/')
- {
- operation = button;
- dotFlag = 0;
- lcd.setCursor(0, 1);
- lcd.print(operation);
- break;
- }
- }
- // Second while loop for num2.
- while (1)
- {
- dotButton = digitalRead(dot);
- button = customKeypad.getKey();
- if (button == 'C')
- {
- dotFlag = 0;
- num1 = 0;
- num2 = 0;
- fraction = 0;
- total = 0;
- operation = 0;
- lcd.clear();
- break;
- }
- else if (dotButton == LOW)
- {
- dotFlag = 1;
- }
- else if (button >= '0' && button <= '9')
- {
- if (dotFlag == 0)
- {
- num2 = num2 * 10 + (button - '0');
- lcd.setCursor(1, 1);
- lcd.print(num2);
- }
- else if (dotFlag == 1)
- {
- fraction = (button - '0');
- num2 = num2 + (fraction / 10);
- lcd.setCursor(1, 1);
- lcd.print(num2);
- dotFlag++;
- }
- else if (dotFlag == 2)
- {
- fraction = (button - '0');
- num2 = num2 + (fraction / 100);
- lcd.setCursor(1, 1);
- lcd.print(num2);
- dotFlag++;
- }
- }
- if (button == '=')
- {
- domath();
- break;
- }
- }
- // Third while loop for ensuring C button is executed after while loop 2.
- while (1)
- {
- button = customKeypad.getKey();
- if (button == 'C')
- {
- dotFlag = 0;
- num1 = 0;
- num2 = 0;
- fraction = 0;
- total = 0;
- operation = 0;
- lcd.clear();
- break;
- }
- }
- }
- void domath()
- {
- switch (operation)
- {
- case '+':
- total = num1 + num2;
- break;
- case '-':
- total = num1 - num2;
- break;
- case '/':
- total = num1 / num2;
- break;
- case '*':
- total = num1 * num2;
- break;
- }
- lcd.print('=');
- if (operation == '/' && num2 == 0)
- {
- lcd.print("ERROR 0 DIV");
- }
- else
- {
- lcd.print(total);
- }
- }
复制代码
|