|
#include <STC89C5xRC.H>
#include "OLED.h"
#include "ds1302.h"
#include "Key.h"
#include "Timer0.h"
unsigned char keynum,mode,adjust_bit,adjust_bit_flag;
unsigned char hmd,tmp;
void timeshow()
{
ds1302_readtime();
OLED_ShowNum(0,0,20,2,16);
OLED_ShowNum(18,0,ds1302_time[0],2,16);
OLED_ShowNum(56,0,ds1302_time[1],2,16);
OLED_ShowNum(94,0,ds1302_time[2],2,16);
OLED_ShowNum(0,2,ds1302_time[3],2,16);
OLED_ShowNum(28,2,ds1302_time[4],2,16);
OLED_ShowNum(58,2,ds1302_time[5],2,16);
}
void timeset() //ʱ¼äÉèÖÃ
{
if(keynum==2)
{
adjust_bit++;
adjust_bit%=6;
}
if(keynum==3)
{
ds1302_time[adjust_bit]++;
if(ds1302_time[0]>99){ds1302_time[0]=0;}//Äê
if(ds1302_time[1]>12){ds1302_time[1]=1;}//ÔÂ
//ÈÕ
if(ds1302_time[1]==1||ds1302_time[1]==3||ds1302_time[1]==5||ds1302_time[1]==7||ds1302_time[1]==8||ds1302_time[1]==10||ds1302_time[1]==12)
{
if(ds1302_time[2]>31){ds1302_time[2]=1;}
}
else if(ds1302_time[1]==4|ds1302_time[1]==6||ds1302_time[1]==9||ds1302_time[1]==11)
{
if(ds1302_time[2]>30){ds1302_time[2]=1;}
}
else if(ds1302_time[1]==2)
{
if(ds1302_time[0]%4==0)
{
if(ds1302_time[2]>29){ds1302_time[2]=1;}
}
else
{
if(ds1302_time[2]>28){ds1302_time[2]=1;}
}
}
if(ds1302_time[3]>23){ds1302_time[3]=0;}
if(ds1302_time[4]>59){ds1302_time[4]=0;}
if(ds1302_time[5]>59){ds1302_time[5]=0;}
}
if(keynum==4)
{
ds1302_time[adjust_bit]--;
if(ds1302_time[0]==0xff){ds1302_time[0]=99;}
if(ds1302_time[1]<1){ds1302_time[1]=12;}
if(ds1302_time[1]==1||ds1302_time[1]==3||ds1302_time[1]==5||ds1302_time[1]==7||ds1302_time[1]==8||ds1302_time[1]==10||ds1302_time[1]==12)
{
if(ds1302_time[2]<1){ds1302_time[2]=31;}
if(ds1302_time[2]>31){ds1302_time[2]=1;}//¼õ¼õÒ²ÒªÅжÏ
}
else if(ds1302_time[1]==4|ds1302_time[1]==6||ds1302_time[1]==9||ds1302_time[1]==11)
{
if(ds1302_time[2]<1){ds1302_time[2]=30;}
if(ds1302_time[2]>30){ds1302_time[2]=1;}
}
else if(ds1302_time[1]==2)
{
if(ds1302_time[0]%4==0)
{
if(ds1302_time[2]<1){ds1302_time[2]=29;}
if(ds1302_time[2]>29){ds1302_time[2]=1;}
}
else
{
if(ds1302_time[2]<1){ds1302_time[2]=28;}
if(ds1302_time[2]>28){ds1302_time[2]=1;}
}
}
if(ds1302_time[3]==0xff){ds1302_time[3]=23;}
if(ds1302_time[4]==0xff){ds1302_time[4]=59;}
if(ds1302_time[5]==0xff){ds1302_time[5]=59;}
}
OLED_ShowNum(0,0,20,2,16);
if(adjust_bit==0&&adjust_bit_flag==1){OLED_ShowString(18,0," ",16);}
else{OLED_ShowNum(18,0,ds1302_time[0],2,16);} //¸üÐÂÏÔʾ
if(adjust_bit==1&&adjust_bit_flag==1){OLED_ShowString(56,0," ",16);}
else{OLED_ShowNum(56,0,ds1302_time[1],2,16);}
if(adjust_bit==2&&adjust_bit_flag==1){OLED_ShowString(94,0," ",16);}
else{OLED_ShowNum(94,0,ds1302_time[2],2,16);}
if(adjust_bit==3&&adjust_bit_flag==1){OLED_ShowString(0,2," ",16);}
else{OLED_ShowNum(0,2,ds1302_time[3],2,16);}
if(adjust_bit==4&&adjust_bit_flag==1){OLED_ShowString(28,2," ",16);}
else{OLED_ShowNum(28,2,ds1302_time[4],2,16);}
if(adjust_bit==5&&adjust_bit_flag==1){OLED_ShowString(58,2," ",16);}
else{OLED_ShowNum(58,2,ds1302_time[5],2,16);}
}
void main()
{
Timer0_Init();
OLED_Init();
OLED_Clear();
ds1302_init();
ds1302_settime();
OLED_ShowCHinese(36,0,0);
OLED_ShowCHinese(75,0,1);
OLED_ShowCHinese(110,0,2);
OLED_ShowChar(18,2,':',16);
OLED_ShowChar(47,2,':',16);
while(1)
{
keynum=key_return();
if(keynum==1)
{
if(mode==0){mode=1;adjust_bit=0;}
else if(mode==1){mode=0;ds1302_settime();}//µ÷ÕûÍêÔÚд½øÈ¥¡£
}
switch(mode)
{
case 0:{timeshow();break;}
case 1:{timeset();break;}
}
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count1,T0Count2;
TL0 = 0x18;
TH0 = 0xFC;
T0Count1++;
if(T0Count1>=500)
{
T0Count1=0;
adjust_bit_flag=!adjust_bit_flag; //adjust_bit_flag^=0x01;
}
T0Count2++;
if(T0Count2>=20)
{
T0Count2=0;
keyloop();
}
}
|
評分
-
查看全部評分
|