0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用4X4键盘和ArduinoUno制作Arduino计算器

454398 来源:工程师吴畏 2019-08-05 09:51 次阅读

电路图和说明

4X4键盘有8个引脚需要连接到从D2到D9的Arduino引脚,如下所示:

怎样用4X4键盘和ArduinoUno制作Arduino计算器

然后,将LCD连接到Arduino,如下所示:

除了数字按钮之外的按钮将执行以下任务:

‘A’用于添加

‘B’用于减法

‘C’用于清除

‘D’用于划分

‘*’用于乘法

完整的电路图如下所示。

Arduino计算器图。

代码细分和演练

我们来看看查看该项目所需的代码以及每个代码段的作用。

首先,您需要为键盘和I2C LCD显示添加库。使用的LCD显示器通过I2C通信与UNO配合使用,因此使用允许在Arduino上进行I2C通信的线程库。

然后,按照4X4键盘的引脚连接和键盘的说明进行操作按钮执行操作。

#include

#include

#include

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] = {9, 8, 7, 6};

byte colPins[COLS] = {5, 4, 3, 2};

在设置功能中,显示屏将显示“MakerPro的Arduino计算器”。

lcd.begin();

lcd.setCursor(0, 0);

lcd.print(“Arduino Calculator”);

lcd.setCursor(0, 1);

lcd.print(“by MakerPro”);

delay(1000);

scrollDisplay();

clr();

在循环功能中,我们先来得到按下的键然后我们需要检查按下的键是否是数字键。如果是数字,则它将存储在firstNum字符串中。

char newKey = myKeypad.getKey();

if (newKey != NO_KEY && (newKey == ‘1’ || newKey == ‘2’ || newKey == ‘3’ || newKey == ‘4’ || newKey == ‘5’ || newKey == ‘6’ || newKey == ‘7’ || newKey == ‘8’ || newKey == ‘9’ || newKey == ‘0’)) {

if (firstNumState == true) {

firstNum = firstNum + newKey;

lcd.print(newKey);

}

else {

secondNum = secondNum + newKey;

lcd.print(newKey);

}

如果按下的键不是数字,请检查是否为‘+’,‘ - ’,‘/’,‘*’(在thekeypad上,这些键是‘A’,‘B’,‘D’,‘*’)。如果它来自这些键,我们将存储稍后将使用的值。它还会将firstNum设置为false,这意味着我们现在将得到第二个数字。

现在,其他数值将存储在secondNum字符串中。

if (newKey != NO_KEY && (newKey == ‘+’ || newKey == ‘-’ || newKey == ‘*’ || newKey == ‘/’)) {

if (firstNumState == true) {

operatr = newKey;

firstNumState = false;

lcd.setCursor(15, 0);

lcd.print(operatr);

lcd.setCursor(5, 1);

}

}

最后,我们设置它,所以如果按下的键不是来自操作键,它将检查它是否是‘=’。如果是这个键,那么它将对第一个和第二个数字执行存储操作并输出结果。

设置完代码后,计算器将能够执行方程式。

if (newKey != NO_KEY && newKey == ‘=’) {

if (operatr == ‘+’) {

result = firstNum.toFloat() + secondNum.toFloat();

}

if (operatr == ‘-’) {

result = firstNum.toFloat() - secondNum.toFloat();

}

if (operatr == ‘*’) {

result = firstNum.toFloat() * secondNum.toFloat();

}

if (operatr == ‘/’) {

result = firstNum.toFloat() / secondNum.toFloat();

}

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(firstNum);

lcd.print(operatr);

lcd.print(secondNum);

lcd.setCursor(0, 1);

lcd.print(“=”);

lcd.print(result);

firstNumState = true;

}

And if the key will be ‘C’, then it will clear the display screen.

if (newKey != NO_KEY && newKey == ‘C’) {

clr();

}

完整计算器项目代码

#include

#include

#include

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] = {9, 8, 7, 6};

byte colPins[COLS] = {5, 4, 3, 2};

// Created instances

Keypad myKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

LiquidCrystal_I2C lcd(0x27, 16, 2);

boolean firstNumState = true;

String firstNum = “”;

String secondNum = “”;

float result = 0.0;

char operatr = ‘ ’;

void setup() {

lcd.begin();

lcd.setCursor(0, 0);

lcd.print(“Arduino Calculator”);

lcd.setCursor(0, 1);

lcd.print(“by MakerPro”);

delay(1000);

scrollDisplay();

clr();

}

void loop() {

char newKey = myKeypad.getKey();

if (newKey != NO_KEY && (newKey == ‘1’ || newKey == ‘2’ || newKey == ‘3’ || newKey == ‘4’ || newKey == ‘5’ || newKey == ‘6’ || newKey == ‘7’ || newKey == ‘8’ || newKey == ‘9’ || newKey == ‘0’)) {

if (firstNumState == true) {

firstNum = firstNum + newKey;

lcd.print(newKey);

}

else {

secondNum = secondNum + newKey;

lcd.print(newKey);

}

}

if (newKey != NO_KEY && (newKey == ‘+’ || newKey == ‘-’ || newKey == ‘*’ || newKey == ‘/’)) {

if (firstNumState == true) {

operatr = newKey;

firstNumState = false;

lcd.setCursor(15, 0);

lcd.print(operatr);

lcd.setCursor(5, 1);

}

}

if (newKey != NO_KEY && newKey == ‘=’) {

if (operatr == ‘+’) {

result = firstNum.toFloat() + secondNum.toFloat();

}

if (operatr == ‘-’) {

result = firstNum.toFloat() - secondNum.toFloat();

}

if (operatr == ‘*’) {

result = firstNum.toFloat() * secondNum.toFloat();

}

if (operatr == ‘/’) {

result = firstNum.toFloat() / secondNum.toFloat();

}

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(firstNum);

lcd.print(operatr);

lcd.print(secondNum);

lcd.setCursor(0, 1);

lcd.print(“=”);

lcd.print(result);

firstNumState = true;

}

if (newKey != NO_KEY && newKey == ‘C’) {

clr();

}

}

void scrollDisplay() {

// scroll 13 positions (string length) to the left

// to move it offscreen left:

for (int positionCounter = 0; positionCounter 《 3; positionCounter++) {

// scroll one position left:

lcd.scrollDisplayLeft();

// wait a bit:

delay(300);

}

delay(1000);

// scroll 29 positions (string length + display length) to the right

// to move it offscreen right:

for (int positionCounter = 0; positionCounter 《 3; positionCounter++) {

// scroll one position right:

lcd.scrollDisplayRight();

// wait a bit:

delay(300);

}

delay(2000);

}

void clr() {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“1st: ”);

lcd.setCursor(12, 0);

lcd.print(“op ”);

lcd.setCursor(0, 1);

lcd.print(“2nd: ”);

lcd.setCursor(5, 0);

firstNum = “”;

secondNum = “”;

result = 0;

operatr = ‘ ’;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算器
    +关注

    关注

    16

    文章

    437

    浏览量

    37342
  • Arduino
    +关注

    关注

    188

    文章

    6469

    浏览量

    187027
收藏 人收藏

    评论

    相关推荐

    热敏电阻系数计算器工具指南-BQ769x2

    电子发烧友网站提供《热敏电阻系数计算器工具指南-BQ769x2.pdf》资料免费下载
    发表于 11-22 15:47 0次下载
    热敏电阻系数<b class='flag-5'>计算器</b>工具指南-BQ769<b class='flag-5'>x</b>2

    基于FPGA的计算器设计

    本文通过FPGA实现8位十进制数的加、减、乘、除运算,通过矩阵键盘输入数据和运算符,矩阵键盘的布局图如下所示。该计算器可以进行连续运算,当按下等号后,可以直接按数字进行下次运算,或者按运算符,把上次运算结果作为本次运算的第一个操
    的头像 发表于 10-24 14:28 573次阅读
    基于FPGA的<b class='flag-5'>计算器</b>设计

    开源项目!基于 Arduino DIY 漂亮的宏机械键盘

    。 我利用黑色 PLA 材料,通过 3D 打印威廉希尔官方网站 精心制作键盘的外壳及其盖子。外壳上巧妙设置了一个网格,用于安装按键。内部空间则用于放置 Arduino 主板及连接线。此外,我特意在外壳背面预留了一个孔
    发表于 08-19 17:02

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码。
    的头像 发表于 07-30 09:14 888次阅读
    <b class='flag-5'>怎样用</b><b class='flag-5'>Arduino</b>测试锂电池容量

    OC5865X资料(参数计算器&amp;原理图)

    电子发烧友网站提供《OC5865X资料(参数计算器&原理图).zip》资料免费下载
    发表于 07-17 12:03 0次下载

    SN65LVCP404千兆位4x4交叉点开关数据表

    电子发烧友网站提供《SN65LVCP404千兆位4x4交叉点开关数据表.pdf》资料免费下载
    发表于 07-08 11:12 0次下载
    SN65LVCP404千兆位<b class='flag-5'>4x4</b>交叉点开关数据表

    DS25CP104A/CP114 3.125 Gbps 4x4 LVDS交叉点开关数据表

    电子发烧友网站提供《DS25CP104A/CP114 3.125 Gbps 4x4 LVDS交叉点开关数据表.pdf》资料免费下载
    发表于 07-04 09:55 0次下载
    DS25CP104A/CP114 3.125 Gbps <b class='flag-5'>4x4</b> LVDS交叉点开关数据表

    DS10CP154A 1.5Gbps 4x4 LVDS交叉点开关数据表

    电子发烧友网站提供《DS10CP154A 1.5Gbps 4x4 LVDS交叉点开关数据表.pdf》资料免费下载
    发表于 07-04 09:24 0次下载
    DS10CP154A 1.5Gbps <b class='flag-5'>4x4</b> LVDS交叉点开关数据表

    LVDS 4x4交叉点开关SN65LVDS250数据表

    电子发烧友网站提供《LVDS 4x4交叉点开关SN65LVDS250数据表.pdf》资料免费下载
    发表于 06-26 11:12 0次下载
    LVDS <b class='flag-5'>4x4</b>交叉点开关SN65LVDS250数据表

    RUCKUS R760资料:室内 Wi-Fi 6E 4x4:4 接入点,8.35 Gbps数据速率

    电子发烧友网站提供《RUCKUS R760资料:室内 Wi-Fi 6E 4x4:4 接入点,8.35 Gbps数据速率.pdf》资料免费下载
    发表于 05-28 16:32 0次下载

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,stm32f100
    发表于 05-07 06:06

    OpenHarmony开发案例:【分布式计算器

    使用分布式能力实现了一个简单的计算器应用,可以进行简单的数值计算,支持远程拉起另一个设备的计算器应用,两个计算器应用进行协同计算
    的头像 发表于 04-11 15:24 1038次阅读
    OpenHarmony开发案例:【分布式<b class='flag-5'>计算器</b>】

    AWTK 开源串口屏开发(13) - 计算器应用

    就需要这样一个应用。在计算器中会用到一些有意思的知识点,比如嵌入键盘,在数字输入或密码输入也会用到。这里我们实现一个简单的计算器,不需要编写代码,设计好界面,添加绑定
    的头像 发表于 03-16 08:23 5324次阅读
    AWTK 开源串口屏开发(13) - <b class='flag-5'>计算器</b>应用

    使用Arduino Nano制作一个4×4×4 LED立方体

    在这个项目中,我们将使用 Arduino Nano 制作一个很酷的 4×4×4 LED立方体。LED 立方体,也称为 LED矩阵,可以照亮您
    的头像 发表于 02-11 12:07 3201次阅读
    使用<b class='flag-5'>Arduino</b> Nano<b class='flag-5'>制作</b>一个<b class='flag-5'>4</b>×<b class='flag-5'>4</b>×<b class='flag-5'>4</b> LED立方体

    根号计算器在线计算怎么

    表示3的立方根。 平方根是指某个数的平方等于给定的数,而立方根是指某个数的立方等于给定的数。以平方根为例,如果一个数x的平方等于给定数a,那么我们说a的平方根为x。数学上可以x=√a
    的头像 发表于 01-25 11:15 3038次阅读