标题:
Arduino计算器程序
[打印本页]
作者:
jhlkjlgjklg
时间:
2019-1-18 08:47
标题:
Arduino计算器程序
225356nueewwx2eww52eec.jpg
(90.73 KB, 下载次数: 96)
下载附件
vch
2019-1-18 08:46 上传
#include <Keypad.h>
#include <LiquidCrystal.h>
//d7--d4,12 11 10 9 e-8 rs-7 1234--A2--A5 5678--2354
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("Done By Students");
lcd.setCursor(2, 1);
lcd.print("Meznan Bahri");
delay(n);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Dareen Zamzami");
lcd.setCursor(2, 1);
lcd.print("Joud Mannaa");
delay(n);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Samira Laihabi");
lcd.setCursor(2, 1);
lcd.print("& Rana Johar");
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);
}
}
复制代码
作者:
admin
时间:
2019-1-19 02:00
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
浅笑安然
时间:
2019-12-21 00:55
你好,我想问一下用Proteus仿真arduino328开发版实现6计算器功能的源码有吗,或者是你会做吗?
作者:
MocianWu
时间:
2022-4-23 18:11
作者使用的keypad库是下载的哪一个,我用的是proteus 8仿真工具
作者:
ziba108
时间:
2023-7-29 18:25
作者使用的keypad库是下载的哪一个
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1