自学内容网 自学内容网

Arduinio mega 2560习题-填空、选择和判断-7-键盘和LCD显示


答案仅供参考,未必正确,如需使用请核实。


第七部分 键盘和LCD显示

填空题

  1. 在Arduino编程中,setup()函数在Arduino板_____时自动执行一次。
    答案:上电或复位

  2. 矩阵式键盘通常由_____行和_____列组成。
    答案:多;多

  3. LCD1602液晶显示屏可以显示_____行_____列的字符。
    答案:2;16

  4. 在使用矩阵式键盘时,通常需要采用_____扫描法来检测哪个键被按下。
    答案:行列

  5. Arduino Mega2560的数字I/O引脚数量为_____个。
    答案:54

  6. LCD1602的RS引脚用于控制_____。
    答案:寄存器选择

  7. 矩阵式键盘中,每个按键都连接在行线和列线的_____上。
    答案:交点

  8. Arduino Mega2560的模拟输入引脚数量为_____个。
    答案:16

  9. LCD1602的E引脚是_____引脚。
    答案:使能

  10. 在Arduino编程中,loop()函数会_____执行。
    答案:不断重复

  11. 矩阵式键盘的行线和列线通常通过_____连接到Arduino的引脚。
    答案:电阻

  12. LCD1602的V0引脚用于调节_____。
    答案:对比度

  13. Arduino Mega2560的工作电压为_____V。
    答案:5

  14. 在使用LCD1602显示字符时,通常需要先发送_____指令来设置显示位置。
    答案:光标移动

  15. 矩阵式键盘扫描时,如果检测到某行某列同时被拉低,则说明该_____被按下。
    答案:按键

单选题

  1. 下列哪个函数用于初始化串口通信?
    A. Serial.print()
    B. Serial.begin()
    C. Serial.read()
    答案:B

  2. 矩阵式键盘的行线和列线数量关系为?
    A. 行线多于列线
    B. 行线少于列线
    C. 行线等于列线
    答案:C(通常情况,但也可以不同)

  3. LCD1602的RW引脚用于?
    A. 读写选择
    B. 寄存器选择
    C. 使能
    答案:A

  4. Arduino Mega2560的处理器是?
    A. ATmega168
    B. ATmega328P
    C. ATmega2560
    答案:C

  5. 下列哪个函数用于在LCD上显示字符?
    A. lcd.print()
    B. lcd.write()
    C. lcd.display()
    答案:A

  6. 矩阵式键盘扫描时,通常需要?
    A. 同时扫描所有行和列
    B. 逐行扫描,再逐列检测
    C. 逐列扫描,再逐行检测
    答案:B或C(取决于具体实现)

  7. LCD1602的D4-D7引脚用于?
    A. 数据传输
    B. 控制信号
    C. 电源供电
    答案:A

  8. Arduino Mega2560的闪存大小为?
    A. 16KB
    B. 32KB
    C. 256KB
    答案:C

  9. 下列哪个函数用于设置LCD的光标位置?
    A. lcd.setCursor()
    B. lcd.moveCursor()
    C. lcd.positionCursor()
    答案:A

  10. 矩阵式键盘中,按键被按下时会导致?
    A. 行线和列线同时被拉高
    B. 行线和列线同时被拉低
    C. 行线被拉高,列线被拉低
    答案:B

  11. LCD1602的A引脚用于?
    A. 对比度调节
    B. 背光控制
    C. 电源供电
    答案:B(通常用于背光控制,但也可能不连接)

  12. Arduino Mega2560的SRAM大小为?
    A. 1KB
    B. 2KB
    C. 8KB
    答案:C

  13. 下列哪个函数用于从串口读取数据?
    A. Serial.available()
    B. Serial.read()
    C. Serial.print()
    答案:B

  14. 矩阵式键盘的行线和列线之间通常需要连接?
    A. 电容
    B. 电感
    C. 电阻
    答案:C

  15. LCD1602的VSS引脚是?
    A. 电源正极
    B. 电源负极
    C. 对比度调节
    答案:B

判断题

  1. Arduino Mega2560可以同时处理多个串口通信。()
    答案:对

  2. 矩阵式键盘的行线和列线可以直接连接到Arduino的数字I/O引脚,无需任何额外元件。()
    答案:错(通常需要连接电阻)

  3. LCD1602的V0引脚用于调节显示屏的亮度。()
    答案:错(用于调节对比度)

  4. 在Arduino编程中,delay()函数会阻塞程序的执行。()
    答案:对

  5. 矩阵式键盘的扫描速度越快,按键响应就越灵敏。()
    答案:错(扫描速度过快可能导致误判)

  6. LCD1602的RS引脚用于控制数据的读写操作。()
    答案:错(用于控制寄存器选择)

  7. Arduino Mega2560的闪存大小比Arduino Uno大。()
    答案:对

  8. 在使用LCD1602时,必须先初始化显示屏才能显示字符。()
    答案:对

  9. 矩阵式键盘的每个按键都对应一个独立的I/O引脚。()
    答案:错(按键通过行线和列线的组合来识别)

  10. LCD1602的E引脚在发送数据时必须保持高电平。()
    答案:错(E引脚用于使能数据传输,通常是一个脉冲信号)

  11. Arduino Mega2560的数字I/O引脚可以输出高电平和低电平。()
    答案:对

  12. 矩阵式键盘的行线和列线可以互换使用。()
    答案:对(从电气角度看,行和列是对称的)

  13. LCD1602的RW引脚在写入数据时必须置为低电平。()
    答案:对(写入时RW为低,读取时为高)

  14. Arduino Mega2560的模拟输入引脚可以读取模拟电压值。()
    答案:对

  15. 矩阵式键盘在按下多个按键时,可能会产生“鬼键”现象。()
    答案:对(由于按键之间的相互影响)


//cslg lcd key
#include <LiquidCrystal.h> // 引入LiquidCrystal库,用于LCD显示
#include <Keypad.h> // 引入Keypad库,用于键盘输入

/* Display (LCD显示屏设置) */
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // 初始化LCD,参数为连接LCD的RS, E, D4, D5, D6, D7引脚

/* Keypad setup (键盘设置) */
const byte KEYPAD_ROWS = 4; // 键盘行数
const byte KEYPAD_COLS = 4; // 键盘列数
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2}; // 键盘行连接的引脚
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0}; // 键盘列连接的引脚
char keys[KEYPAD_ROWS][KEYPAD_COLS] = { // 键盘按键布局
  {'1', '2', '3', '+'},
  {'4', '5', '6', '-'},
  {'7', '8', '9', '*'},
  {'.', '0', '=', '/'}
};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS); // 初始化键盘

void setup() {
  lcd.begin(16, 2); // 初始化LCD为16x2字符
  lcd.print("Welcome To CSLG"); // 在LCD上显示欢迎信息
  lcd.setCursor(0, 1); // 设置光标到第二行的开始位置
  lcd.print("                "); // 清除第二行的内容
}

void loop() {
  char key = keypad.getKey(); // 从键盘获取按键
  
  if (key) {
    // 如果检测到按键被按下
    lcd.setCursor(0, 1); // 设置光标到第二行的开始位置
    lcd.print("                "); // 清除第二行的内容,为显示新按键做准备
    lcd.setCursor(0, 1); // 再次设置光标到第二行的开始位置
    lcd.print(key); // 在LCD上显示被按下的按键
  }
}

这段代码是一个结合了Arduino、LCD显示屏(16x2字符)和矩阵式键盘(4x4)的示例程序。程序的主要功能是,当用户在矩阵键盘上按下某个键时,该键的字符会被显示在LCD显示屏的第二行。下面是代码的详细解释:

引入库

#include <LiquidCrystal.h> // 引入LiquidCrystal库,用于LCD显示
#include <Keypad.h> // 引入Keypad库,用于键盘输入

cpp复制代码

#include <LiquidCrystal.h> // 引入LiquidCrystal库,用于LCD显示
#include <Keypad.h> // 引入Keypad库,用于键盘输入

这两行代码引入了Arduino的两个外部库:LiquidCrystal用于控制LCD显示屏,Keypad用于读取矩阵式键盘的输入。

初始化LCD

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

cpp复制代码

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

这行代码创建了一个LiquidCrystal对象lcd,并初始化了LCD显示屏。参数12, 11, 10, 9, 8, 7分别对应LCD的RS、E、D4、D5、D6、D7引脚,这些引脚连接到了Arduino的数字I/O引脚上。

初始化键盘

const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
  {'1', '2', '3', '+'},
  {'4', '5', '6', '-'},
  {'7', '8', '9', '*'},
  {'.', '0', '=', '/'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);

cpp复制代码

const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'.', '0', '=', '/'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);

这部分代码定义了矩阵式键盘的行数、列数、行和列连接的引脚,以及键盘的布局。然后,使用这些信息创建了一个Keypad对象keypad

  • KEYPAD_ROWSKEYPAD_COLS定义了键盘的行数和列数。
  • rowPinscolPins数组定义了键盘行和列分别连接到的Arduino引脚。
  • keys二维数组定义了键盘的布局,即每个按键对应的字符。
  • Keypad构造函数使用makeKeymap(keys)将键盘布局转换为内部表示,并指定了行和列的引脚以及行列数。

setup()函数

void setup() {
  lcd.begin(16, 2);
  lcd.print("Welcome To CSLG");
  lcd.setCursor(0, 1);
  lcd.print("                ");
}

cpp复制代码

void setup() {
lcd.begin(16, 2);
lcd.print("Welcome To CSLG");
lcd.setCursor(0, 1);
lcd.print(" ");
}

setup()函数在Arduino上电或复位时执行一次。它初始化了LCD显示屏为16x2字符模式,显示了欢迎信息"Welcome To CSLG",然后清除了第二行的内容,为后续的按键显示做准备。

loop()函数

void loop() {
  char key = keypad.getKey();
  
  if (key) {
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print(key);
  }
}

cpp复制代码

void loop() {
char key = keypad.getKey();
if (key) {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(key);
}
}

loop()函数是Arduino程序的主循环,它会不断重复执行。在这个函数中,首先调用keypad.getKey()来获取键盘上被按下的键。如果没有键被按下,getKey()会返回NO_KEY(在Keypad库中定义的一个特殊值,但在这个示例中没有直接使用)。

如果检测到一个键被按下(即key不是NO_KEY),则执行以下步骤:

  1. 设置LCD的光标到第二行的开始位置(列0,行1)。
  2. 清除第二行的内容,通过打印16个空格来实现。
  3. 再次设置光标到第二行的开始位置。
  4. 在第二行显示被按下的键的字符。

这样,每当用户在键盘上按下一个键时,该键的字符就会立即显示在LCD显示屏的第二行上。



原文地址:https://blog.csdn.net/ZhangRelay/article/details/144108513

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!