📄 rtc.c
字号:
/**************************************************************************
Real Time Clock
File Name: RTC.c
Author: Lin Qian
Created: 2008/04/28
Modified: NO
Revision: 1.0
***************************************************************************/
#define __RTC
#include "INC\\main.h"
#undef __RTC
// 实时时钟 ******************************
#if RealTimeClock_en
void RealTimeClock (void)
// [注: 本函数必须在<60s的时间内被再次调用.]
{
// --- 变量定义 ---
static uchar lastSec=0; // 上一秒时刻
static bit lastBT500ms=0; // 上一500ms标记
uchar Sec; // 当前秒时刻
// --- Operation ---
Sec = (uchar)Cnt1s; // 取当前时间
// 注: 秒计数准确的换算应按以下注释程序. 由于此处负数自动被抛弃负号, 至保留相减的绝对值.
/*
if (Sec < lastSec) // 换算秒计数器值
Sec = Sec+256-lastSec;
else
Sec = Sec-lastSec;
*/
if( lastSec != Sec )
{
ClockSec += Sec - lastSec; // 时钟Sec累加
lastSec = Sec;
if( ClockSec >= 60 ) // 满一分钟处理
{
ClockSec %= 60; // 时钟秒清零
ClockMin++; // 时钟分累加
if (ClockMin == 60) // 满一小时处理
{
ClockMin = 0; // 时钟分清零
ClockHour = (ClockHour + 1) % 24; // 时钟时累加
// 当在主画面时, 刷新实时时钟Hour显示
if( MenuMode == MENU_MAIN )
{
IntToStr(ClockHour, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(2,0);
LCD_Print(&TempBuffer[0]);
}
// 更新实时时钟Hour存储
x24c02_Write(X24C02_0, EEPROM_CLOCK_HOUR, ClockHour);
DelayXms(5);
}
// 当在主画面时, 刷新实时时钟Min显示
if( MenuMode == MENU_MAIN )
{
IntToStr(ClockMin, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(5,0);
LCD_Print(&TempBuffer[0]);
}
// 更新实时时钟Min存储
x24c02_Write(X24C02_0, EEPROM_CLOCK_MIN, ClockMin);
DelayXms(5);
}
// 当在主画面时, 刷新实时时钟Sec显示
if( MenuMode == MENU_MAIN )
{
IntToStr(ClockSec, &TempBuffer[0], 2, CLEAR0);
LCD_GotoXY(14,0);
LCD_Print(&TempBuffer[0]);
}
// 更新实时时钟Sec存储
x24c02_Write(X24C02_0, EEPROM_CLOCK_SEC, ClockSec);
DelayXms(5);
}
if ( MenuMode == MENU_MAIN && BT500ms != lastBT500ms ) // 满500ms处理
{
lastBT500ms = BT500ms;
// 刷新时钟":"显示
LCD_GotoXY(4,0);
if( BT500ms )
LCD_Print(":");
else
LCD_Print(" ");
}
}
#endif
//************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -