沒有吧,在里面程序里加了個定時器就好了。也沒有免費進貨啊,不然我一點代碼都不打直接問得了。#include <REGX51.H>
#include "1602.h"
struct Time {
char hour;
char minute;
char second;
};
struct Time currentTime = {23, 59, 56}; // 初始時間將在 main() 里設置
int Count = 0;
void Timer0_Init() {
TMOD &= 0xF0; // 設置定時器0模式1
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x18;
ET0 = 1; // 允許定時器0中斷
EA = 1; // 開總中斷
TR0 = 1; // 啟動定時器0
}
void UpdateTimeDisplay() {
char timeStr[9];
// 格式化時間字符串
timeStr[0] = currentTime.hour / 10 + '0';
timeStr[1] = currentTime.hour % 10 + '0';
timeStr[2] = ':';
timeStr[3] = currentTime.minute / 10 + '0';
timeStr[4] = currentTime.minute % 10 + '0';
timeStr[5] = ':';
timeStr[6] = currentTime.second / 10 + '0';
timeStr[7] = currentTime.second % 10 + '0';
timeStr[8] = '\0';
LCD_ShowString(2, 1, timeStr);
}
void Timer0_ISR() interrupt 1 {
TH0 = 0xFC; // 重新加載初值
TL0 = 0x18;
Count++;
if (Count >= 1000) { // 1秒到
Count = 0;
currentTime.second++;
// 處理秒進位
if (currentTime.second >= 60) {
currentTime.second = 0;
currentTime.minute++;
// 處理分鐘進位
if (currentTime.minute >= 60) {
currentTime.minute = 0;
currentTime.hour++;
// 處理小時進位
if (currentTime.hour >= 24) {
currentTime.hour = 0;
}
}
}
UpdateTimeDisplay(); // 更新顯示
}
}
void main()
{
LCD_Init();
LCD_ShowString(1,1,"TIME:");
Timer0_Init();
UpdateTimeDisplay();
while(1)
{
}
} |