{
Dsecond=X_Dswitch(second);//十六进制直接作为十进制(eg:0x16变为16) Dminute=X_Dswitch(minute); Dhour=X_Dswitch(hour); Dweek=X_Dswitch(week); Dday=X_Dswitch(day);
Dmonth=X_Dswitch(month); Dyear=X_Dswitch(year); if(first_sure) { Dyear--;judgeupdate=1; if(Dyear==65535) Dyear=99; } if(second_sure) { Dmonth--;judgeupdate=1; if(Dmonth==0) Dmonth=12; }
if(third_sure) { lastday=months(Dmonth,Dyear); Dday--;judgeupdate=1; if(Dday==0) Dday=lastday; } if(fourth_sure) { Dweek--;judgeupdate=1; if(Dweek==0) Dweek=7; }
if(fifth_sure) { Dhour--;judgeupdate=1; if(Dhour==65535) Dhour=23; }
if(sixth_sure) { Dminute--;judgeupdate=1; if(Dminute==65535) Dminute=59;
26
}
if(seventh_sure) { Dsecond--;judgeupdate=1; if(Dsecond==65535) Dsecond=59; }
second=D_Xswitch(Dsecond);//十进制直接作为十六进制(eg:16变为0x16) minute=D_Xswitch(Dminute); hour=D_Xswitch(Dhour); week=D_Xswitch(Dweek); day=D_Xswitch(Dday);
month=D_Xswitch(Dmonth); year=D_Xswitch(Dyear); if(alarmclock==0 && update==0)
{savesecond=second;saveminute=minute;savehour=hour;judgealarm=1;} }
/********************************** 按键扫描子程序
***********************************/ void keyboardscanf()
{ if(key_sure==0 || update==0) // 在key_sure键没按过前key_inc==0 || key_dec==0时无效
{ if(key_sure==0 || key_inc==0 || key_dec==0) {
if(cort>=1 && cort<=3) { for(i=0;i<=16;i++) displayymd(swap); } else { for(i=0;i<=16;i++) displaytime(swap); }
if(key_sure==0 || key_inc==0 || key_dec==0) {
if(key_sure==0) {update=0;anjian_num();} if(key_inc==0) inc_key(); if(key_dec==0) dec_key(); } } } }
/****************************** 时间调整位闪烁子程序
27
*******************************/ void time_flash() {
if(update==0)
{if(first_sure)//年位闪烁 {
for(i=0;i<=6;i++) {swap[4]=0;
displayymd(swap);} for(i=0;i<=6;i++) {swap[4]=1;
displayymd(swap);} }
if(second_sure)//月位闪烁 {
for(i=0;i<=6;i++) {swap[5]=0;
displayymd(swap);} for(i=0;i<=6;i++) {swap[5]=1;
displayymd(swap);} }
if(third_sure)//日位闪烁 {
for(i=0;i<=6;i++) {swap[6]=0;
displayymd(swap);} for(i=0;i<=6;i++) {swap[6]=1;
displayymd(swap);} }
if(fourth_sure)//星期位闪烁 {
for(i=0;i<=6;i++) {swap[3]=0;
displaytime(swap);} for(i=0;i<=6;i++) {swap[3]=1;
displaytime(swap);} }
if(fifth_sure)//时钟位闪烁 {
for(i=0;i<=6;i++) {swap[2]=0;
28
displaytime(swap);} for(i=0;i<=6;i++) {swap[2]=1;
displaytime(swap);} }
if(sixth_sure)//分钟位闪烁 {
for(i=0;i<=6;i++) {swap[1]=0;
displaytime(swap);} for(i=0;i<=6;i++) {swap[1]=1;
displaytime(swap);} }
if(seventh_sure)//秒钟位闪烁 {
for(i=0;i<=6;i++) {swap[0]=0;
displaytime(swap);} for(i=0;i<=6;i++) {swap[0]=1;
displaytime(swap);} }}
for(i=0;i<=6;i++) swap[i]=1; }
///////////////////////////////////////////////////////////////////////主函数 void main()
{ uint count=0,s=0; update=1; alarmcount=0; judgealarm=0; judgeupdate=0; clock=1; key_sure=1; key_dec=1; key_inc=1; P2=0xff; D4=1; D5=1;
TimeWorkStart(); // DS1302Inital(); while(1) {
29
if(update==1) {
//得到时、分、秒、星期 second=TimeByteRead(0x81); minute=TimeByteRead(0x83); hour=TimeByteRead(0x85); week=TimeByteRead(0x8b); //得到年、月、日
day=TimeByteRead(0x87); month=TimeByteRead(0x89); year=TimeByteRead(0x8d);
if(savesecond==second && saveminute==minute && savehour==hour) { clock=0; alarmcount=8200;} //闹铃约2分钟 else clock=1;
if(alarmcount!=0) { clock=0; alarmcount--;} else { clock=1;
judgealarm=0;}
if((minute==0x30 || minute==0x00) && second==0x00) //半点闹铃 D5=0; else D5=1;
if(showtemp==0) //显示切换 displaytemp(); else if(showymd==0) displayymd(swap); else
displaytime(swap);
if(count==0 && s!=second) //秒点闪烁 { s=second; D4=0; count=36; }
if(count!=0) { count--; D4=0;} else
D4=1; }
30
//闹铃
else { //得到时、分、秒、星期 second=second; minute=minute; hour=hour; week=week;
//得到年、月、日 day=day; month=month; year=year; D4=1;
if(cort>=1 && cort<=3) displayymd(swap); else displaytime(swap); }
keyboardscanf(); time_flash(); } }
31