#include <Arduino.h>
#include <LiquidCrystal.h>
// 定义 LCD1602 引脚
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// 定义矩阵键盘引脚
const int rowPins[4] = {9, 8, 7, 6};
const int colPins[4] = {A0, A1, A2, A3};
// 定义开机动画标志
bool isAnimation = true;
// 定义当前输入值和操作符
float num1 = 0, num2 = 0, op = 0;
// 定义时间相关变量(手动设置)
int year = 2024, month = 4, day = 28;
int hour = 22, minute = 35, second = 11;
void setup() {
// 初始化 LCD1602
lcd.begin(16, 2);
// 初始化矩阵键盘
for (int i = 0; i < 4; i++) {
pinMode(rowPins[i], INPUT_PULLUP);
}
// 显示初始信息
showDateTime();
}
void loop() {
// 处理矩阵键盘输入
handleKeypadInput();
// 处理开机动画和计算功能切换
if (isAnimation) {
// 开机动画逻辑
//...
} else {
// 计算逻辑
//...
}
}
// 处理矩阵键盘输入函数
void handleKeypadInput() {
for (int row = 0; row < 4; row++) {
digitalWrite(colPins[row], LOW);
for (int col = 0; col < 4; col++) {
if (!digitalRead(rowPins[col])) {
// 处理按键输入逻辑
//...
}
}
digitalWrite(colPins[row], HIGH);
}
}
// 显示日期时间函数
void showDateTime() {
lcd.setCursor(0, 0);
lcd.print(year);
lcd.print('-');
lcd.print(month < 10? "0" + month : month);
lcd.print('-');
lcd.print(day < 10? "0" + day : day);
lcd.setCursor(0, 1);
if (hour < 12) {
lcd.print("AM ");
} else {
lcd.print("PM ");
}
lcd.print(hour < 10? "0" + hour : hour);
lcd.print(':');
lcd.print(minute < 10? "0" + minute : minute);
lcd.print(':');
lcd.print(second < 10? "0" + second : second);
}
// 计算函数
void calculate() {
// 计算逻辑...
}