📄 main.c
字号:
nao_hour--; // 闹钟小时减减
if(nao_hour == 0xff) // 闹钟小时是否等于0
nao_hour = 23; // 闹钟小时等于24
}
}
if((key_code == 0x02) && (function_flag == 0)) // 没有功能键按下时
{
clock_flag = 2; // 清除闹钟标志位
flag = 1; // 换屏标志位被按下
if(num_flag == 1) // 换屏位1
ping_flag = 1;
if(num_flag == 2) // 换屏位2
ping_flag = 2;
if(num_flag == 3) // 换屏位3
ping_flag = 3;
}
if((key_code == 0x04) && (function_flag == 0))
{
clock_flag = 2; // 清除闹钟标志位
}
key_code = 0; // 键值清零
}
/**************************************************
** 函数名称:闰年判断函数
** 工作环境: IAR 3.42A
** 作者: 谷丰
** 生成日期: 2008.08.20
** 功能:判断年是否是闰年
** 相关文件:
** 修改日志:
***************************************************/
void leap_year(void)
{
tian = tianshu[month]; // 读出每月天数表
if(day < tian)
tian_flag = 0;
if(month == 2)
{
if((year%4 == 0)&&(year%100 != 0) || (year%400 == 0)) // 判断是否是闰年
{
tian = 29; // 闰年2月天数修正
}
else
{
tian = 28; // 闰年2月天数修正
}
}
}
/**************************************************
** 函数名称:时分秒加函数
** 工作环境: IAR 3.42A
** 作者: 谷丰
** 生成日期: 2008.08.20
** 功能:时分秒、年月日加
** 相关文件:
** 修改日志:
***************************************************/
void rtc()
{
if(++sec < 60) // 秒加一
return;
sec = 0;
if(++min < 60) // 分加一
return;
min = 0;
if(++hour < 24) // 小时加一
return;
hour = 0;
if(++day <= tian) // 天数加一
return;
day = 1; // 月加一
if(++month <= 12)
return;
month = 1;
if(++year < 2100) // 年加一
return;
year = 2000;
}
/**************************************************
** 函数名称:LCD显示函数
** 工作环境: IAR 3.42A
** 作者: 谷丰
** 生成日期: 2008.08.20
** 功能:LCD显示、闪烁、换屏
** 相关文件:
** 修改日志:
***************************************************/
void rtc_show(void)
{
if((function_ping1 != 0) && (function_ping2 == 0) && (function_ping3 == 0))
{
change_ping = 0; // 第一屏
}
else if((function_ping1 == 0) && (function_ping2 != 0) && (function_ping3 == 0))
{
change_ping = 1; // 第二屏
}
else if((function_ping1 == 0) && (function_ping2 == 0) && (function_ping3 != 0))
{
change_ping = 2; // 第三屏
}
if(change_ping == 1)
{
if(function_ping2 == 0) // 正常显示
{
LCDMEM[0] = digit[sec%10];
LCDMEM[1] = digit[sec/10];
LCDMEM[2] = digit[min%10];
LCDMEM[3] = digit[min/10];
LCDMEM[4] = digit[hour%10];
LCDMEM[5] = digit[hour/10];
}
if(function_ping2 == 1) // 秒闪烁
{
if(twinkle_num == 0) // 闪烁标志位
{
LCDMEM[0] = digit[sec%10];
LCDMEM[1] = digit[sec/10];
}
else
{
LCDMEM[0] = 0;
LCDMEM[1] = 0;
}
LCDMEM[2] = digit[min%10];
LCDMEM[3] = digit[min/10];
LCDMEM[4] = digit[hour%10];
LCDMEM[5] = digit[hour/10];
}
if(function_ping2 == 2) // 分闪烁
{
if(twinkle_num == 0)
{
LCDMEM[2] = digit[min%10];
LCDMEM[3] = digit[min/10];
}
else
{
LCDMEM[2] = 0;
LCDMEM[3] = 0;
}
LCDMEM[0] = digit[sec%10];
LCDMEM[1] = digit[sec/10];
LCDMEM[4] = digit[hour%10];
LCDMEM[5] = digit[hour/10];
}
if(function_ping2 == 3) // 小时闪烁
{
if(twinkle_num == 0)
{
LCDMEM[4] = digit[hour%10];
LCDMEM[5] = digit[hour/10];
}
else
{
LCDMEM[4] = 0;
LCDMEM[5] = 0;
}
LCDMEM[0] = digit[sec%10];
LCDMEM[1] = digit[sec/10];
LCDMEM[2] = digit[min%10];
LCDMEM[3] = digit[min/10];
}
}
if(change_ping == 0)
{
if(function_ping1 == 0) // 正常显示
{
LCDMEM[0] = digit[(day)%10];
LCDMEM[1] = digit[(day)/10];
LCDMEM[2] = digit[(month)%10];
LCDMEM[3] = digit[(month)/10];
LCDMEM[4] = digit[year%10];
LCDMEM[5] = digit[(year/10)%10];
}
if(function_ping1 == 1) // 天闪烁
{
if(twinkle_num == 0)
{
LCDMEM[0] = digit[day%10];
LCDMEM[1] = digit[day/10];
}
else
{
LCDMEM[0] = 0;
LCDMEM[1] = 0;
}
LCDMEM[2] = digit[(month)%10];
LCDMEM[3] = digit[(month)/10];
LCDMEM[4] = digit[year%10];
LCDMEM[5] = digit[(year/10)%10];
}
if(function_ping1 == 2) // 月闪烁
{
if(twinkle_num == 0)
{
LCDMEM[2] = digit[(month)%10];
LCDMEM[3] = digit[(month)/10];
}
else
{
LCDMEM[2] = 0;
LCDMEM[3] = 0;
}
LCDMEM[0] = digit[day%10];
LCDMEM[1] = digit[day/10];
LCDMEM[4] = digit[year%10];
LCDMEM[5] = digit[(year/10)%10];
}
if(function_ping1 == 3) // 年闪烁
{
if(twinkle_num == 0)
{
LCDMEM[4] = digit[year%10];
LCDMEM[5] = digit[(year/10)%10];
}
else
{
LCDMEM[4] = 0;
LCDMEM[5] = 0;
}
LCDMEM[0] = digit[(day)%10];
LCDMEM[1] = digit[(day)/10];
LCDMEM[2] = digit[(month)%10];
LCDMEM[3] = digit[(month)/10];
}
}
if(change_ping == 2)
{
if(function_ping3 == 0) // 正常显示
{
LCDMEM[0] = digit[nao_sec%10];
LCDMEM[1] = digit[nao_sec/10];
LCDMEM[2] = digit[nao_min%10];
LCDMEM[3] = digit[nao_min/10];
LCDMEM[4] = digit[nao_hour%10];
LCDMEM[5] = digit[nao_hour/10];
}
if(function_ping3 == 1) // 闹钟秒闪烁
{
if(twinkle_num == 0)
{
LCDMEM[0] = digit[nao_sec%10];
LCDMEM[1] = digit[nao_sec/10];
}
else
{
LCDMEM[0] = 0;
LCDMEM[1] = 0;
}
LCDMEM[2] = digit[nao_min%10];
LCDMEM[3] = digit[nao_min/10];
LCDMEM[4] = digit[nao_hour%10];
LCDMEM[5] = digit[nao_hour/10];
}
if(function_ping3 == 2) // 闹钟分闪烁
{
if(twinkle_num == 0)
{
LCDMEM[2] = digit[nao_min%10];
LCDMEM[3] = digit[nao_min/10];
}
else
{
LCDMEM[2] = 0;
LCDMEM[3] = 0;
}
LCDMEM[0] = digit[nao_sec%10];
LCDMEM[1] = digit[nao_sec/10];
LCDMEM[4] = digit[nao_hour%10];
LCDMEM[5] = digit[nao_hour/10];
}
if(function_ping3 == 3) // 闹钟小时闪烁
{
if(twinkle_num == 0)
{
LCDMEM[4] = digit[nao_hour%10];
LCDMEM[5] = digit[nao_hour/10];
}
else
{
LCDMEM[4] = 0;
LCDMEM[5] = 0;
}
LCDMEM[0] = digit[nao_sec%10];
LCDMEM[1] = digit[nao_sec/10];
LCDMEM[2] = digit[nao_min%10];
LCDMEM[3] = digit[nao_min/10];
}
}
}
/**************************************************
** 函数名称:基本定时器中断函数
** 工作环境: IAR 3.42A
** 作者: 谷丰
** 生成日期: 2008.08.20
** 功能:秒+,5s换屏,闹钟闪烁,修改闪烁
** 相关文件:
** 修改日志:
***************************************************/
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer (void)
{
if(clock_flag == 1) // 闹钟存在
P1OUT ^= BIT0; // LED闪烁
if(clock_flag == 2) // 闹钟清除
P1OUT &= ~BIT0; // 关闭LED
cnt++; // 1s计数器加
if(cnt == 4) // 是否等于4
{
rtc(); // 秒加一
cnt = 0; // 清零
}
change_num++; // 换屏计数器
twinkle_num = ~twinkle_num; // 闪烁标志位
if(change_num == 60) // 屏幕切换计数器到时复位
{
change_num = 0; //
}
if(((change_num > 0) && (change_num < 20) || (change_num == 0)) || ((ping_flag == 1) && (flag == 1)))
{
if((ping_flag == 1) && (flag == 1)) // 按键时在第一屏
{
change_num = 20; // 切换到第二屏
flag = 0; // 按键标志位清零
}
change_ping = 0; // 第一屏
num_flag = 1; // 屏切换标志位1
}
if(((change_num > 20) && (change_num < 40) || (change_num == 20)) || ((ping_flag == 2) && (flag == 1)))
{
if((ping_flag == 2) && (flag == 1)) // 按键时在第二屏
{
change_num = 40; // 切换到第三屏
flag = 0;
}
change_ping = 1; // 第二屏
num_flag = 2; // 屏切换标志位2
}
if(((change_num > 40) && (change_num < 60) || (change_num == 40)) || ((ping_flag == 3) && (flag == 1)))
{
if((ping_flag == 3) && (flag == 1)) // 按键时在第二屏
{
change_num = 0; // 切换到第1屏
flag = 0;
}
change_ping = 2; // 第三屏
num_flag = 3; // 屏切换标志位3
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -