Arduinio mega 2560习题-填空、选择和判断-7-键盘和LCD显示
答案仅供参考,未必正确,如需使用请核实。
第七部分 键盘和LCD显示
填空题
-
在Arduino编程中,
setup()
函数在Arduino板_____时自动执行一次。
答案:上电或复位 -
矩阵式键盘通常由_____行和_____列组成。
答案:多;多 -
LCD1602液晶显示屏可以显示_____行_____列的字符。
答案:2;16 -
在使用矩阵式键盘时,通常需要采用_____扫描法来检测哪个键被按下。
答案:行列 -
Arduino Mega2560的数字I/O引脚数量为_____个。
答案:54 -
LCD1602的RS引脚用于控制_____。
答案:寄存器选择 -
矩阵式键盘中,每个按键都连接在行线和列线的_____上。
答案:交点 -
Arduino Mega2560的模拟输入引脚数量为_____个。
答案:16 -
LCD1602的E引脚是_____引脚。
答案:使能 -
在Arduino编程中,
loop()
函数会_____执行。
答案:不断重复 -
矩阵式键盘的行线和列线通常通过_____连接到Arduino的引脚。
答案:电阻 -
LCD1602的V0引脚用于调节_____。
答案:对比度 -
Arduino Mega2560的工作电压为_____V。
答案:5 -
在使用LCD1602显示字符时,通常需要先发送_____指令来设置显示位置。
答案:光标移动 -
矩阵式键盘扫描时,如果检测到某行某列同时被拉低,则说明该_____被按下。
答案:按键
单选题
-
下列哪个函数用于初始化串口通信?
A.Serial.print()
B.Serial.begin()
C.Serial.read()
答案:B -
矩阵式键盘的行线和列线数量关系为?
A. 行线多于列线
B. 行线少于列线
C. 行线等于列线
答案:C(通常情况,但也可以不同) -
LCD1602的RW引脚用于?
A. 读写选择
B. 寄存器选择
C. 使能
答案:A -
Arduino Mega2560的处理器是?
A. ATmega168
B. ATmega328P
C. ATmega2560
答案:C -
下列哪个函数用于在LCD上显示字符?
A.lcd.print()
B.lcd.write()
C.lcd.display()
答案:A -
矩阵式键盘扫描时,通常需要?
A. 同时扫描所有行和列
B. 逐行扫描,再逐列检测
C. 逐列扫描,再逐行检测
答案:B或C(取决于具体实现) -
LCD1602的D4-D7引脚用于?
A. 数据传输
B. 控制信号
C. 电源供电
答案:A -
Arduino Mega2560的闪存大小为?
A. 16KB
B. 32KB
C. 256KB
答案:C -
下列哪个函数用于设置LCD的光标位置?
A.lcd.setCursor()
B.lcd.moveCursor()
C.lcd.positionCursor()
答案:A -
矩阵式键盘中,按键被按下时会导致?
A. 行线和列线同时被拉高
B. 行线和列线同时被拉低
C. 行线被拉高,列线被拉低
答案:B -
LCD1602的A引脚用于?
A. 对比度调节
B. 背光控制
C. 电源供电
答案:B(通常用于背光控制,但也可能不连接) -
Arduino Mega2560的SRAM大小为?
A. 1KB
B. 2KB
C. 8KB
答案:C -
下列哪个函数用于从串口读取数据?
A.Serial.available()
B.Serial.read()
C.Serial.print()
答案:B -
矩阵式键盘的行线和列线之间通常需要连接?
A. 电容
B. 电感
C. 电阻
答案:C -
LCD1602的VSS引脚是?
A. 电源正极
B. 电源负极
C. 对比度调节
答案:B
判断题
-
Arduino Mega2560可以同时处理多个串口通信。()
答案:对 -
矩阵式键盘的行线和列线可以直接连接到Arduino的数字I/O引脚,无需任何额外元件。()
答案:错(通常需要连接电阻) -
LCD1602的V0引脚用于调节显示屏的亮度。()
答案:错(用于调节对比度) -
在Arduino编程中,
delay()
函数会阻塞程序的执行。()
答案:对 -
矩阵式键盘的扫描速度越快,按键响应就越灵敏。()
答案:错(扫描速度过快可能导致误判) -
LCD1602的RS引脚用于控制数据的读写操作。()
答案:错(用于控制寄存器选择) -
Arduino Mega2560的闪存大小比Arduino Uno大。()
答案:对 -
在使用LCD1602时,必须先初始化显示屏才能显示字符。()
答案:对 -
矩阵式键盘的每个按键都对应一个独立的I/O引脚。()
答案:错(按键通过行线和列线的组合来识别) -
LCD1602的E引脚在发送数据时必须保持高电平。()
答案:错(E引脚用于使能数据传输,通常是一个脉冲信号) -
Arduino Mega2560的数字I/O引脚可以输出高电平和低电平。()
答案:对 -
矩阵式键盘的行线和列线可以互换使用。()
答案:对(从电气角度看,行和列是对称的) -
LCD1602的RW引脚在写入数据时必须置为低电平。()
答案:对(写入时RW为低,读取时为高) -
Arduino Mega2560的模拟输入引脚可以读取模拟电压值。()
答案:对 -
矩阵式键盘在按下多个按键时,可能会产生“鬼键”现象。()
答案:对(由于按键之间的相互影响)
//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_ROWS
和KEYPAD_COLS
定义了键盘的行数和列数。rowPins
和colPins
数组定义了键盘行和列分别连接到的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
),则执行以下步骤:
- 设置LCD的光标到第二行的开始位置(列0,行1)。
- 清除第二行的内容,通过打印16个空格来实现。
- 再次设置光标到第二行的开始位置。
- 在第二行显示被按下的键的字符。
这样,每当用户在键盘上按下一个键时,该键的字符就会立即显示在LCD显示屏的第二行上。
原文地址:https://blog.csdn.net/ZhangRelay/article/details/144108513
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!