风筝
发表于: 2019-8-19 21:27:54 | 显示全部楼层

在本篇文章中,您将学习到如何基于Arduino开发板使用LCD键盘扩展板,并制作实际的项目。

arduino-keypad-shield-teaset-900x600.jpg


1602 Arduino LCD键盘扩展板的功能

在电子项目中显示信息一直是最引人注目的问题。有多种方式可以显示数据。这些液晶屏可以很简单,例如7段或LED,或者它们可以更加迷人,例如LCD。使用LCD一直是最流行的信息显示方式之一。 LCD分为两种通用类型:字符和图形。


最常见,最便宜和最简单的LCD之一是字符LCD。该LCD由多行和多列组成。字母和数字写在由行和列创建的位置。例如,LCD字符16 * 2有2行16列。所以它可以显示32个字符。


使用这些LCD非常简单,它们与所有微控制器和处理器开发板完全兼容。为了更方便地使用这些LCD,1602的显示屏模型(包括用于制作菜单的四个按键)被制成一个扩展板,它也与Arduino板兼容。


如何使用Arduino LCD键盘扩展板

Arduino扩展板是一个用户友好且简单的扩展板。要使用它,您首先需要知道它的引脚排列及其与Arduino的连接。

lcd-keypad-shield-pinout.jpg

Arduino引脚
扩展板引脚
8
LCD RS
9
LCD Enable
7
LCD D7
6
LCD D6
5
LCD D5
4
LCD D4
10
LCD背光
A0
按键

所需的材料

●    Arduino Uno R3开发板

●    适用于Arduino的1602 LCD键盘扩展板

●    Arduino IDE


如何读取按键?

在该扩展板中,所有4个按键都连接到模拟引脚A0,节省数字引脚。所以我们应该使用ADC来读取它们。当您按下某个键时,它会根据内部电阻分离电路向A0引脚返回一个值,通过该电路识别该键的类型。

按键名称
A0模拟值
RIGHT
0-60
UP
60-200
DOWN
200-400
LEFT
400-600
SELECT
600-800

  1. /*
  2. Arduino 2x16 LCD - Detect Buttons
  3. */

  4. #include <LiquidCrystal.h>

  5. //LCD pin to Arduino
  6. const int pin_RS = 8;
  7. const int pin_EN = 9;
  8. const int pin_d4 = 4;
  9. const int pin_d5 = 5;
  10. const int pin_d6 = 6;
  11. const int pin_d7 = 7;

  12. const int pin_BL = 10;

  13. LiquidCrystal lcd( pin_RS,  pin_EN,  pin_d4,  pin_d5,  pin_d6,  pin_d7);

  14. void setup() {
  15.   
  16.   lcd.begin(16, 2);

  17.   lcd.setCursor(0,0);

  18.   lcd.print("Electropeak.com");
  19.   lcd.setCursor(0,1);
  20.   lcd.print("Press Key:");
  21. }

  22. void loop() {
  23.   int x;
  24.   x = analogRead (0);
  25.   lcd.setCursor(10,1);
  26.   if (x < 60) {
  27.     lcd.print ("Right ");
  28.   }
  29.   else if (x < 200) {
  30.     lcd.print ("Up    ");
  31.   }
  32.   else if (x < 400){
  33.     lcd.print ("Down  ");
  34.   }
  35.   else if (x < 600){
  36.     lcd.print ("Left  ");
  37.   }
  38.   else if (x < 800){
  39.     LCD.print ("Select");
  40.   }
  41. }
复制代码

让我们深入研究一下代码:

  1. #include <LiquidCrystal.h>
复制代码

我们需要包含字符LCD库。

  1. LiquidCrystal LCD( pin_RS, pin_EN, pin_d4, pin_d5,  pin_d6, pin_d7);
复制代码

根据连接到Arduino的引脚定义LCD对象。

  1. lcd.begin(16, 2);
复制代码

通过指定列数和行数来初始配置LCD。第一个参数是列数,第二个参数是行数。


以下是使用LCD的一些重要函数:

函数名称
功能说明
lcd.clear(); 清除LCD液晶屏的显示内容
lcd.print(data); 以字符串或数字显示信息
lcd.setCursor(col,row); 更改起点位置
lcd.scrollDisplayLeft(); 将光标向左移动一个块
lcd.scrollDisplayRight(); 将光标向右移动一个块
lcd.creatChar(num,data); 创建所需的字符(字符号码,字符串)

如何实现滚动文字?

我们可以使用上述函数轻松完成。

  1. /*
  2. Arduino 2x16 LCD - LCD Scroll
  3. */
  4. #include <LiquidCrystal.h>

  5. const int RS = 8;
  6. const int EN = 9;
  7. const int d4 = 4;
  8. const int d5 = 5;
  9. const int d6 = 6;
  10. const int d7 = 7;

  11. const int pin_BL = 10; // arduino pin wired to LCD backlight circuit

  12. LiquidCrystal lcd( RS,  EN,  d4,  d5,  d6,  d7);

  13. void setup() {

  14.   lcd.begin(16, 2);
  15.   
  16.   lcd.print("Electropeak");
  17.   delay(1000);
  18. }

  19. void loop() {
  20.   // scroll 11 positions ("Electropeak" length) to the left
  21.   for (int positionCounter = 0; positionCounter < 11; positionCounter++) {
  22.     lcd.scrollDisplayLeft();
  23.     delay(400);  //Scrolling speed
  24.   }

  25.   // scroll 27 positions ("Electropeak" length + display length) to the right
  26.   for (int positionCounter = 0; positionCounter < 27; positionCounter++) {
  27.     lcd.scrollDisplayRight();
  28.     delay(400);
  29.   }

  30.   // scroll 16 positions (display length) to the left
  31.   for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
  32.     lcd.scrollDisplayLeft();
  33.     delay(50);
  34.   }

  35.   delay(1000);

  36. }
复制代码

如何显示特定字符?

您可以通过LCD在每个块中创建一个字符。 为此,您应将所需的字符转换为代码数组,然后将其显示在LCD上。 要将字符转换为代码,您可以使用一些在线的转换网站。 设计字符,然后将生成的数组复制到代码中。

char1.png

char2.png

  1. /*
  2. Arduino 2x16 LCD - LCD Special Char
  3. */

  4. #include <LiquidCrystal.h>

  5. const int RS = 8;
  6. const int EN = 9;
  7. const int d4 = 4;
  8. const int d5 = 5;
  9. const int d6 = 6;
  10. const int d7 = 7;

  11. const int pin_BL = 10; // arduino pin wired to LCD backlight circuit

  12. LiquidCrystal lcd( RS,  EN,  d4,  d5,  d6,  d7);

  13. // smily face
  14. byte smiley[8] = {
  15.   B00000,
  16.   B10001,
  17.   B00000,
  18.   B00000,
  19.   B10001,
  20.   B01110,
  21.   B00000,
  22. };

  23. // Battery sign
  24. byte battery[] = {
  25.   B01110,
  26.   B01010,
  27.   B11011,
  28.   B10001,
  29.   B11111,
  30.   B11111,
  31.   B11111,
  32.   B11111
  33. };

  34. // arrow right
  35. byte R_arrow[8] = {
  36.   B00000,
  37.   B00100,
  38.   B00010,
  39.   B11111,
  40.   B00010,
  41.   B00100,
  42.   B00000,
  43.   B00000
  44. };

  45. // arrow left
  46. byte L_arrow[8] = {
  47.   B00000,
  48.   B00100,
  49.   B01000,
  50.   B11111,
  51.   B01000,
  52.   B00100,
  53.   B00000,
  54.   B00000
  55. };

  56. // Ohm sign
  57. byte ohm[8] = {
  58.   B00000,
  59.   B01110,
  60.   B10001,
  61.   B10001,
  62.   B10001,
  63.   B01010,
  64.   B11011,
  65.   B00000
  66. };

  67. // Heart
  68. byte heart[8] = {
  69.   B00000,
  70.   B01010,
  71.   B10101,
  72.   B10001,
  73.   B10001,
  74.   B01010,
  75.   B00100,
  76.   B00000
  77. };

  78. int i = 0;

  79. void setup() {

  80.   lcd.begin(16, 2);

  81.   lcd.createChar(0, smiley);
  82.   lcd.createChar(1, battery);
  83.   lcd.createChar(2, R_arrow);
  84.   lcd.createChar(3, L_arrow);
  85.   lcd.createChar(4, ohm);
  86.   lcd.createChar(5, heart);
  87.   lcd.createChar(6, ohm);

复制代码

lcd.createChar将您的数组存储在内存位置,您可以使用lcd.write显示该数组。


以上就是本篇文章的全部内容。如果遇到任何问题,请随时在本帖下面进行回复。

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

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-24 08:26 , Processed in 0.051457 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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