在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣用4X4鍵盤和ArduinoUno制作Arduino計(jì)算器

454398 ? 來源:工程師吳畏 ? 2019-08-05 09:51 ? 次閱讀

電路圖和說明

4X4鍵盤有8個(gè)引腳需要連接到從D2到D9的Arduino引腳,如下所示:

怎樣用4X4鍵盤和ArduinoUno制作Arduino計(jì)算器

然后,將LCD連接到Arduino,如下所示:

除了數(shù)字按鈕之外的按鈕將執(zhí)行以下任務(wù):

‘A’用于添加

‘B’用于減法

‘C’用于清除

‘D’用于劃分

‘*’用于乘法

完整的電路圖如下所示。

Arduino計(jì)算器圖。

代碼細(xì)分和演練

我們來看看查看該項(xiàng)目所需的代碼以及每個(gè)代碼段的作用。

首先,您需要為鍵盤和I2C LCD顯示添加庫(kù)。使用的LCD顯示器通過I2C通信與UNO配合使用,因此使用允許在Arduino上進(jìn)行I2C通信的線程庫(kù)。

然后,按照4X4鍵盤的引腳連接和鍵盤的說明進(jìn)行操作按鈕執(zhí)行操作。

#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};

在設(shè)置功能中,顯示屏將顯示“MakerPro的Arduino計(jì)算器”。

lcd.begin();

lcd.setCursor(0, 0);

lcd.print(“Arduino Calculator”);

lcd.setCursor(0, 1);

lcd.print(“by MakerPro”);

delay(1000);

scrollDisplay();

clr();

在循環(huán)功能中,我們先來得到按下的鍵然后我們需要檢查按下的鍵是否是數(shù)字鍵。如果是數(shù)字,則它將存儲(chǔ)在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);

}

如果按下的鍵不是數(shù)字,請(qǐng)檢查是否為‘+’,‘ - ’,‘/’,‘*’(在thekeypad上,這些鍵是‘A’,‘B’,‘D’,‘*’)。如果它來自這些鍵,我們將存儲(chǔ)稍后將使用的值。它還會(huì)將firstNum設(shè)置為false,這意味著我們現(xiàn)在將得到第二個(gè)數(shù)字。

現(xiàn)在,其他數(shù)值將存儲(chǔ)在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);

}

}

最后,我們?cè)O(shè)置它,所以如果按下的鍵不是來自操作鍵,它將檢查它是否是‘=’。如果是這個(gè)鍵,那么它將對(duì)第一個(gè)和第二個(gè)數(shù)字執(zhí)行存儲(chǔ)操作并輸出結(jié)果。

設(shè)置完代碼后,計(jì)算器將能夠執(zhí)行方程式。

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();

}

完整計(jì)算器項(xiàng)目代碼

#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 = ‘ ’;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算器
    +關(guān)注

    關(guān)注

    16

    文章

    438

    瀏覽量

    37499
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    188050
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LP光纖模式計(jì)算器

    的 Bessel 和用于漸變折射率光纖的 Laguerre。 此例展示了如何使用計(jì)算器以及如何配置模式的采樣參數(shù)。 配置光纖結(jié)構(gòu):Step-Index Fiber(階躍折射率光纖) 光纖模式計(jì)算器允許定義
    發(fā)表于 12-18 13:36

    熱敏電阻系數(shù)計(jì)算器工具指南-BQ769x2

    電子發(fā)燒友網(wǎng)站提供《熱敏電阻系數(shù)計(jì)算器工具指南-BQ769x2.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 15:47 ?0次下載
    熱敏電阻系數(shù)<b class='flag-5'>計(jì)算器</b>工具指南-BQ769<b class='flag-5'>x</b>2

    基于FPGA的計(jì)算器設(shè)計(jì)

    本文通過FPGA實(shí)現(xiàn)8位十進(jìn)制數(shù)的加、減、乘、除運(yùn)算,通過矩陣鍵盤輸入數(shù)據(jù)和運(yùn)算符,矩陣鍵盤的布局圖如下所示。該計(jì)算器可以進(jìn)行連續(xù)運(yùn)算,當(dāng)按下等號(hào)后,可以直接按數(shù)字進(jìn)行下次運(yùn)算,或者按運(yùn)算符,把上次運(yùn)算結(jié)果作為本次運(yùn)算的第一個(gè)操
    的頭像 發(fā)表于 10-24 14:28 ?750次閱讀
    基于FPGA的<b class='flag-5'>計(jì)算器</b>設(shè)計(jì)

    開源項(xiàng)目!基于 Arduino DIY 漂亮的宏機(jī)械鍵盤

    。 我利用黑色 PLA 材料,通過 3D 打印技術(shù)精心制作鍵盤的外殼及其蓋子。外殼上巧妙設(shè)置了一個(gè)網(wǎng)格,用于安裝按鍵。內(nèi)部空間則用于放置 Arduino 主板及連接線。此外,我特意在外殼背面預(yù)留了一個(gè)孔
    發(fā)表于 08-19 17:02

    怎樣用Arduino測(cè)試鋰電池容量

    本文詳細(xì)介紹了如何用Arduino測(cè)量鋰電池的容量。并附有電路圖和Arduino的程序代碼。
    的頭像 發(fā)表于 07-30 09:14 ?1079次閱讀
    <b class='flag-5'>怎樣用</b><b class='flag-5'>Arduino</b>測(cè)試鋰電池容量

    OC5865X資料(參數(shù)計(jì)算器&amp;原理圖)

    電子發(fā)燒友網(wǎng)站提供《OC5865X資料(參數(shù)計(jì)算器&原理圖).zip》資料免費(fèi)下載
    發(fā)表于 07-17 12:03 ?0次下載

    SN65LVCP404千兆位4x4交叉點(diǎn)開關(guān)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《SN65LVCP404千兆位4x4交叉點(diǎn)開關(guān)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-08 11:12 ?0次下載
    SN65LVCP404千兆位<b class='flag-5'>4x4</b>交叉點(diǎn)開關(guān)數(shù)據(jù)表

    DS25CP104A/CP114 3.125 Gbps 4x4 LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DS25CP104A/CP114 3.125 Gbps 4x4 LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-04 09:55 ?0次下載
    DS25CP104A/CP114 3.125 Gbps <b class='flag-5'>4x4</b> LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表

    DS10CP154A 1.5Gbps 4x4 LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DS10CP154A 1.5Gbps 4x4 LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-04 09:24 ?0次下載
    DS10CP154A 1.5Gbps <b class='flag-5'>4x4</b> LVDS交叉點(diǎn)開關(guān)數(shù)據(jù)表

    LVDS 4x4交叉點(diǎn)開關(guān)SN65LVDS250數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《LVDS 4x4交叉點(diǎn)開關(guān)SN65LVDS250數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-26 11:12 ?0次下載
    LVDS <b class='flag-5'>4x4</b>交叉點(diǎn)開關(guān)SN65LVDS250數(shù)據(jù)表

    RUCKUS R760資料:室內(nèi) Wi-Fi 6E 4x4:4 接入點(diǎn),8.35 Gbps數(shù)據(jù)速率

    電子發(fā)燒友網(wǎng)站提供《RUCKUS R760資料:室內(nèi) Wi-Fi 6E 4x4:4 接入點(diǎn),8.35 Gbps數(shù)據(jù)速率.pdf》資料免費(fèi)下載
    發(fā)表于 05-28 16:32 ?0次下載

    HarmonyOS開發(fā)案例:【計(jì)算器

    基于基礎(chǔ)組件、容器組件,實(shí)現(xiàn)一個(gè)支持加減乘除混合運(yùn)算的計(jì)算器
    的頭像 發(fā)表于 05-07 15:31 ?1478次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>計(jì)算器</b>】

    stm32f100怎樣用重映射功能?

    的是stm32f100c8t6b芯片,現(xiàn)在想用將PB1映射為TIM1_CH3N,在調(diào)用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)時(shí), GPIO_PinAFConfig和GPIO_AF_TIM1都沒定義,stm32f100
    發(fā)表于 05-07 06:06

    OpenHarmony開發(fā)案例:【分布式計(jì)算器

    使用分布式能力實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的計(jì)算器應(yīng)用,可以進(jìn)行簡(jiǎn)單的數(shù)值計(jì)算,支持遠(yuǎn)程拉起另一個(gè)設(shè)備的計(jì)算器應(yīng)用,兩個(gè)計(jì)算器應(yīng)用進(jìn)行協(xié)同計(jì)算
    的頭像 發(fā)表于 04-11 15:24 ?1137次閱讀
    OpenHarmony開發(fā)案例:【分布式<b class='flag-5'>計(jì)算器</b>】

    AWTK 開源串口屏開發(fā)(13) - 計(jì)算器應(yīng)用

    就需要這樣一個(gè)應(yīng)用。在計(jì)算器中會(huì)用到一些有意思的知識(shí)點(diǎn),比如嵌入鍵盤,在數(shù)字輸入或密碼輸入也會(huì)用到。這里我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,不需要編寫代碼,設(shè)計(jì)好界面,添加綁定
    的頭像 發(fā)表于 03-16 08:23 ?6932次閱讀
    AWTK 開源串口屏開發(fā)(13) - <b class='flag-5'>計(jì)算器</b>應(yīng)用
    主站蜘蛛池模板: 性欧美巨大 | 亚洲日本中文字幕天天更新 | 国产高清在线精品 | 丁香六月在线观看 | 欧美成人免费草草影院 | 亚洲精品美女久久久久网站 | 最新理论三级中文在线观看 | 8050午夜一级二级全黄 | 色视频免费 | 天天摸天天舔天天操 | 8050午夜一级| 天堂在线观看视频观看www | 久操操| 好爽毛片一区二区三区四区 | 在线视频黄 | 奇米视频在线观看 | 国产美女一区二区三区 | 亚洲欧美综合一区二区三区四区 | 黄色毛片播放 | 日本一区二区不卡视频 | 美女天天干 | 亚洲日韩图片专区第1页 | 五月婷婷激情视频 | 亚洲免费在线观看视频 | 久久国产精品99精品国产987 | 九九国产在线观看 | 欧美人与性另类 | 自偷自拍亚洲欧美清纯唯美 | 1024视频在线观看国产成人 | 午夜精品福利影院 | 青娱乐伊人 | aaa一级最新毛片 | 五月激情综合网 | 激情有码 | 五月国产综合视频在线观看 | 8天堂资源在线 | 韩国免费特一级毛片 | 偷操 | 宅男69免费永久网站 | 亚洲不卡视频在线观看 | 狠狠丁香激情久久综合 |