#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
#include <zm.h>
#include <_12864.H>
#include <nongLi.h>
init_time0(){
TMOD=0x01;
EA=ET0=TR0=1;
}
char c=0,sec=0,min=0,hour=12,day=12,mon=6,year=109;
char week;
bit flag,newShow=1;
time0()interrupt 1 //定时器0中断
{
TL0=(65536-5*110592/12)%256;
TH0=(65536-5*110592/12)/256;
c++;
if(c>=20)c=0,flag=1; //1秒时间到
}
//
DateAdd(){
if(flag){ //如果到1秒则执行时间更新
flag=0; sec++; //秒
if(sec==60){
sec=0; min++; //分
newShow=1; //每秒刷新一次显示
if(min==60){
min=0;hour++; //时
if(hour==24){
hour=0;day++; //日
if(day>MonArr[LeapYear(year)][mon]){
day=1; mon++; //月
if(mon==13){
mon=1;year++; //年
}
}
}
}
}
}
}
#include <key.h>
void main(){
init_time0();
Init12864();
while(1){
keyCom(); //按键处理
DateAdd(); //每秒更新新时钟
if(newShow){
newShow=0;
/** 农历显示 **/
getNongLi(year,mon,day); //获取农历日期
//显示天干地支,生肖
showXY(0,66,15,2,TianGan_Table[(NL.year)%10]);
showXY(0,82,15,2,DiZhi_Table[(NL.year)%12]);
showXY(0,110,15,2,ShengXiao_Table[(NL.year)%12]);
//农历月份
if(NL.mon==1)showStr(2,64,"正");
else showXY(2,64,15,2,nlMonCode[NL.mon-1]);
showStr(2,80,"月");
//农历日
if(NL.day<11)showStr(2,96,"初"); //十位
else if(NL.day<20)showStr(2,96,"十");
else if(NL.day<30)showStr(2,96,"廿");
else showStr(2,96,"三");
if(NL.day%10==0)showStr(2,112,"十"); //个位
else showXY(2,112,15,2,nlMonCode[NL.day%10-1]);
/** 公历显示 **/
showXY(0,0,20,5,zm20x40_Table[day/10]); //大字
showXY(0,20,20,5,zm20x40_Table[day%10]);
showStr(2,40,"日");
showNum8x16(6,0,(1901+year)/100); //年
showNum8x16(6,16,(1901+year)%100);
showStr(6,32,"年");
showNum8x16(6,48,mon);showStr(6,64,"月"); //月
showStr(5,80,"星期"); //星期
week=getWeek(year,mon,day);
if(week==6)showStr(5,112,"日");
else showXY(5,112,15,2,nlMonCode[week]);
showXY(7,92,5,1,zm5x8_Table[10]); //冒号
showXY(7,110,5,1,zm5x8_Table[10]);
switch(keyCount){ //设置时,反白处理
case 1:notShow(6,2,0,32);break; //年反白
case 2:notShow(6,2,48,16);break;//月反白
case 3:notShow(0,5,0,40);break; //日反白
}
rect(0,0,40,60); rect(34,60,35,127); //画线条
}
//时分秒
if(c>15&&keyCount>3){ //设置时闪烁处理
if(keyCount==4){
showXY(7,81,5,1,zm5x8_Table[11]);//时
showXY(7,87,5,1,zm5x8_Table[11]);
}
else if(keyCount==5){
showXY(7,99,5,1,zm5x8_Table[11]);//分
showXY(7,105,5,1,zm5x8_Table[11]);
}
else if(keyCount==6){
showXY(7,116,5,1,zm5x8_Table[11]);//秒
showXY(7,122,5,1,zm5x8_Table[11]);
}
}
else { //时分秒正常显示
showNum5x8(7,81,hour);
showNum5x8(7,99,min);
showNum5x8(7,116,sec);
}
}
}