#include <LiquidCrystal.h>
//cslg
// 初始化LCD接口引脚
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
// 定义Pacman闭合嘴巴的自定义字符
uint8_t pacman[8] = {
0b00000,
0b00000,
0b01110,
0b11011,
0b11111,
0b01110,
0b00000,
0b00000
};
// 定义Pacman张开嘴巴的自定义字符
uint8_t pacmanOpen[8] = {
0b00000,
0b00000,
0b01110,
0b11011,
0b11100,
0b01110,
0b00000,
0b00000
};
// 定义点的自定义字符
uint8_t dot[8] = {
0b00000,
0b00000,
0b00000,
0b00110,
0b00110,
0b00000,
0b00000,
0b00000
};
void setup() {
// 创建自定义字符
lcd.createChar(1, pacman);
lcd.createChar(2, dot);
// 初始化LCD为20列4行模式
lcd.begin(20, 4);
// 显示一些初始信息
lcd.setCursor(3, 0);
lcd.print("cslg-lcd2004");
lcd.setCursor(3, 1);
lcd.print("cslg-lcd2004");
lcd.setCursor(2, 2);
lcd.print("4 lines, 20 cols");
}
void loop() {
// Pacman动画部分(保留原功能)
for (int i = 3; i < 16; i++) {
// 在第3行显示Pacman动画
lcd.setCursor(i, 3);
lcd.print("\1"); // 显示闭合嘴巴的Pacman
for (int j = i + 1; j < 16; j++) {
lcd.setCursor(j, 3);
lcd.print("\2"); // 显示点
}
lcd.createChar(1, pacman);
delay(100);
lcd.createChar(1, pacmanOpen);
delay(100);
lcd.setCursor(i, 3);
lcd.print(" "); // 清除Pacman显示
}
// cslg-162422188左右滚动显示部分
int direction = 1; // 滚动方向,1表示向右,-1表示向左
int position = 0; // 初始位置
for (int i = 0; i < 14; i++) {
// 清除之前的显示
lcd.setCursor(position, 0);
lcd.print(" \2");
// 根据方向计算新的位置
position += direction;
// 检查是否需要改变方向
if (position > 19) { // 如果超出右边界,则向左滚动
position = 19;
direction = -1;
} else if (position < 0) { // 如果超出左边界,则向右滚动
position = 0;
direction = 1;
}
// 显示新的文本
lcd.setCursor(position - 8, 0); // 文本长度为16,所以中心对齐
lcd.print("cslg-162422188");
if(position - 9 >= 0){
lcd.setCursor(position - 9, 0);
lcd.print(" ");
}
// 延迟以便观察滚动效果
delay(200);
}
// 以下代码被新的滚动逻辑替代,因此不再需要
// lcd.setCursor(0, 0);
// lcd.print(" ");
// delay(200);
}