一板网电子技术论坛

风筝
发表于: 2018-8-7 09:06:48 | 显示全部楼层

前段时间,我们介绍了如何使用2.4寸TFT LCD液晶屏来构建一个Arduino触摸屏计算器,它可以执行加法、减法、除法和乘法等所有的基本计算。在本篇文章中,我们将继续介绍如何使用LCD显示屏与键盘和Arduino配合来制作计算器。


虽然计算器已经存在了数千年,但电子计算器在世界上占据了数十年的主导地位。从基础建设到科学研究,计算器有着各种不同的形状和尺寸。但现在,几乎每个人都拥有一部智能手机,我们不再需要计算器了。这并不意味着我们不再喜欢它们或者不再关心它们了。因此,让我们通过使用Arduino制作我们自己的基本计算器来向他们致敬。


所需的材料

●    Arduino UNO开发板

●    LCD液晶显示屏1602A

●    4x4按钮键盘

●    面包板

●    电位器(10Kohm)

●    连接导线


在我们开始之前

为了能够编译该程序,您需要在Arduino IDE中安装LiquidCrystal.hKeypad.h库。您可以通过以下两种方式之一完成此操作。如果您的Arduino IDE是1.6.2及更高版本,只需使用Library Manager。如果您使用的是早期版本,则需要将这些库复制到Arduino IDE安装位置的l​​ibraries文件夹中。

A_2.jpg


运作原理

该设备开始时先清除LCD屏幕的内容,然后等待键盘的输入。它从用户输入的密钥中形成数字。一旦用户按下操作按钮,它就记住第一个号码和所需的操作并继续获取第二个号码。当用户完成输入第二个数字后,按下键盘上的等于按钮后,程序执行所请求的操作并打印结果。之后,它静止不动,等待CLEAR按钮('C')被按下,以便它可以重新开始。


LCD 1602a液晶屏

Arduino IDE有一个内置库(LiquidCrystal.h),支持基于Hitachi HD44780芯片组的LCD。除了在LCD上显示文本之外,库还可以处理打印浮点数到指定的小数位数,这使开发人员更容易。例如:

  1. double Pi = 3.1415926535;
  2. Lcd.print (Pi,4);
复制代码

以上代码在LCD上打印输出3.1415,其中4表示4位小数。


本例中的LCD使用4位数据传输引脚D4-D7(板上11-14)。电位计充当分压器并调节显示文本的对比度。其中间引脚连接到显示器的引脚V0(引脚3)。

A_1.jpg


让我们将LCD连接到Arduino。首先,将Arduino的+ 5v和GND引脚连接到面包板电源线。将LCD插入面包板,将Pin1连接到地,将Pin2连接到+ 5V导轨。

接下来,将电位器放在电路板上并连接两个引脚:一个到+ 5v,另一个连接到GND引脚。现在将电位器的中间引脚连接到LCD的引脚3。


我们需要为显示器背光供电并显示对比度。 LCD上的引脚15和16是内置LED的阳极和阴极,用作LCD背光。我们将其连接到电源轨,就像将任何其他LED连接到5V一样:阳极到正电压,阴极到GND,用一个串联电阻来限制电流。您可以使用100-220欧姆电阻。我在这里使用了1k电阻,因为220欧姆的背光太亮了。也可以用电位器替代电阻器,并根据自己的喜好调节背光。


接下来,进行以下连接:LCD的引脚4连接到Arduino板上的引脚7,LCD上的引脚5连接到GND,LCD的引脚6连接到Arduino板的引脚8,最后引脚11、12、13、14液晶显示屏分别为Arduino开发板的9、10、11、12引脚。如果你想确保你的连接正确完成,我已经包含了一个简单的代码来测试连接。您只需将其刻录到Arduino板上,看看您的LCD是否正常工作。

Fritzing_LCD1.jpg


键盘

除了闪烁LED之外的大多数项目将需要来自用户的某种输入。在许多情况下,按钮用于用户输入获取。 Arduino Keypad.h有一个库,它能够处理按钮矩阵并且易于使用。该库无需外部上拉电阻,因为它可以实现片上集成的上拉电阻,并且还可以处理/设置所有未使用的列引脚上的高阻抗。它基本上逐列扫描。它通过将当前列引脚设置为低电平并读取该列的行引脚值,然后跳转到下一列等等直到它扫描所有连接/分配的引脚来实现。除了上拉电阻,该库还处理按钮去抖动。库没有使用延迟;相反,它会定期使用内置的Arduino millis()函数,并确定按下按钮的时间长度或特定按键是否有转换。没有延迟,代码执行效率更高,并且不需要消耗处理能力,因为无需使用软件延迟进行去抖动。


我只想使用Arduino引脚0到13的一侧,因为它是所需引脚的确切数量。但是经过几次测试后,引脚13上的LED很刺激,所以我决定不使用引脚13.我还没有将引脚0-1用于串口测试。我移动LCD使用引脚7-12,键盘使用引脚2-5,模拟引脚A2-A5用于行和列。所以你可以方便地连接它;只需确保拆分行和列。连接引脚A2-A5或引脚2-5,并将列连接到Arduino板的另一侧。因此,如果将第1行连接到引脚A2,则将第1列连接到引脚2。

Keypad_final.jpg

只需进入您的软件并在那里更改内容,如下所示:

  1. byte rowPins[ROWS] = {A2,A3,A4,A5}; //connect to the row pinouts of the keypad

  2. byte colPins[COLS] = {2,3,4,5}; //connect to the column pinouts of the keypad
复制代码

如果您想测试键盘或使用它,代码包中包含一个简单的代码,可以帮助您完成此操作。只需将代码下载并刻录到Arduino板上,并附上键盘即可。

Keypad.jpg

我没有键盘,所以我自己做了一个。它显示在下面的图片中。如果您打算这样做,您将需要:

●    16个按钮

●    小型PCB原型板

●    8根线(4根用于行,4根用于列)

●    一些焊料和烙铁

Aleksandr.jpg


软件/代码

代码由三个循环组成。第一个循环扫描键盘以进行击键,并一次在显示器上打印一个键。与此同时,它将之前的数字向上移动了十倍,它为第一个十位数增加了一个新数字。这一直持续到用户按下一个操作键或按下'C'重置。然后程序打破第一个循环并跳转到第二个循环。


第二个循环与第一个循环基本相同,但它只等待按下相等的键'='。此时,它根据所选的运算符计算总数,打印结果,并继续下一个和最后一个循环。


在第三个循环中,程序只需等待按下键盘上的“C”按钮。按下“C”键后,它会重新启动程序。


代码可以进行优化,但我这样写,所以初学者可以快速跟踪代码并获得程序流的概念(而不是分析紧凑的代码)。


现在我们完成了硬件组装和代码说明,现在是时候烧录代码了。


如果您不想经历将键盘连接到此项目的麻烦,则可以使用Arduino串行监视器。您可以通过更改几行代码来完成此操作:


void setup()函数中,添加:

  1. Serial.Begin(9600);

  2. // And inside character acquisition loops change

  3. button = customKeypad.getKey();

  4. // To

  5. button=Serial.Read();
复制代码

如果您没有LCD,您可以通过类似的方式修改程序,将数据发送到计算机而不是LCD,并将结果输入串行监视器。

A_6.jpg


总结

虽然这个项目是一个用Arduino制作的简单计算器,但它主要介绍了如何使用键盘来获取字符并从单独输入的字符中形成整数。


它还解释了如何控制连接到Arduino的LCD并将它们组合成功能计算器。这个程序受到Arduino平台变量和数学的限制,所以不要期望太多--Arduino在大数和浮点数方面有局限性。例如,当涉及浮点数时,您有浮点数和双精度数。 Double应该比float更精确,但在Arduino上并非如此。因此,除非使用Arduino Due,否则使用double而不是float将不会提供更高的精度。


制作一个更复杂的计算器可以处理更大的数字和更长的浮点数,但这超出了本文的范围。对于那些对更大数字感兴趣的人,有一个库(BigNumber.h,实际上是C ++类)可以处理大数字,可以通过这个链接访问。当我说大数字时,我的意思是你可以做计算直到你的内存耗尽。因此,如果您喜欢大数字并且想要测试Arduino板的极限,那么您一定要查看该教程。


总而言之,我希望你喜欢这样做,并像我一样享受它的乐趣。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 184 | 回复: 303



Archiver|手机版|小黑屋|

GMT+8, 2018-12-16 01:57 , Processed in 0.046875 second(s), 32 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表