#include <pico/stdlib.h>
#include <pico/time.h>
#include <pico/sleep.h>
#include <pico/gpio.h>
#define LCD_RS 0
#define LCD_RW 1
#define LCD_E 2
const int lcd_data_pins[] = {3, 4, 5, 6, 7, 8, 9, 10};
void lcd_init() {
gpio_pin_dir(LCD_RS, GPIO_OUTPUT);
gpio_pin_dir(LCD_RW, GPIO_OUTPUT);
gpio_pin_dir(LCD_E, GPIO_OUTPUT);
for (int i = 0; i < 8; i++) {
gpio_pin_dir(lcd_data_pins[i], GPIO_OUTPUT);
}
gpio_pin_write(LCD_RS, GPIO_HIGH);
gpio_pin_write(LCD_RW, GPIO_LOW);
gpio_pin_write(LCD_E, GPIO_HIGH);
for (int i = 0; i < 8; i++) {
gpio_pin_write(lcd_data_pins[i], GPIO_LOW);
}
}
void lcd_write(uint8_t data) {
gpio_pin_write(LCD_RS, GPIO_LOW);
gpio_pin_write(LCD_RW, GPIO_LOW);
for (int i = 0; i < 8; i++) {
gpio_pin_write(lcd_data_pins[i], (data >> i) & 0x01);
sleep_ms(1);
}
gpio_pin_write(LCD_E, GPIO_LOW);
}
void lcd_write_string(const char* str) {
while (*str) {
lcd_write(*str++);
}
}
int main() {
lcd_init(); // 初始化LCD显示屏
while (true) { // 这个循环会不断进行,从而实现持续的时钟更新。如果你想停止更新,可以使用某种形式的退出条件。例如,你可以检测某个按键是否被按下,或者检测某个特定的条件是否满足。然后使用适当的逻辑来跳出循环。这将允许你控制时钟更新的频率或持续时间。请注意,这只是一个示例,你需要根据你的具体需求来调整代码。
char time_str[9]; // "HH:MM:SS\0"
time_t now = time(nullptr);
strftime(time_str, sizeof(time_str), "%H:%M:%S", localtime(&now));
lcd_write(' '); // 先清空当前位置的字符
lcd_write('T'); // 显示'T'作为时间标识符(可自定义)
lcd_write(':'); // 显示冒号分隔符(可自定义)
lcd_write(' '); // 在冒号后面添加空格,以便对齐时间字符串(可自定义)
lcd_write_string(time_str); // 在LCD显示屏上显示时间字符串(当前时间)
lcd_write('\n'); // 在时间字符串后面添加换行符(可自定义)
lcd_write('D'); // 显示'D'作为日期标识符(可自定义)
lcd_write(':'); // 显示冒号分隔符(可自定义)
lcd_write(' '); // 在冒号后面添加空格,以便对齐日期字符串(可自定义)
lcd_write('2023-03-17'); // 在LCD显示屏上显示日期字符串(可自定义)
sleep(1); // 等待一秒,然后继续循环。如果你想加快或减慢时钟更新的频率,可以调整这个值。请注意,这个代码没有考虑夏令时等复杂的时间调整问题,因此可能不适合需要精确时间显示的场合。如果你需要更准确的时间显示,建议使用专业的时钟模块或网络时间同步技术。
}
}