//#include "intrins.h"
#include "oled.h"
unsigned char miao=0,fen=0,shi=0,yue=7,ri=24,ri_max=31,zhou=2;
unsigned int nian=2019;
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0DC;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void jinzhi(unsigned char * shi, unsigned char * fen, unsigned char * miao, unsigned int * nian, unsigned char * yue,unsigned char * ri) //進制
{
if(*miao==60)
{
*miao=0;
*fen=*fen+1;
if(*fen==60)
{
*fen=0;
*shi=*shi+1;
if(*shi==24)
{
*shi=0;
*ri=*ri+1;
if(*ri==ri_max+1)
{
*ri=1;
*yue=*yue+1;
if(*yue==13)
{
*yue=1;
*nian=*nian+1;
}
}
}
}
}
}
void zhou_jisuan()
{
static unsigned int MON=0,YER=0;
MON = yue;
YER = nian;
if(yue==1||yue==2)
{
MON=MON+12;
YER--;
}
zhou=((YER/400)+(YER%100)+((YER%100)/4)+(13*(MON+1))/5+ri-1-(YER/50))%7;
}
void display()
{
switch (yue)
{
case 1||3||5||7||8||10||12:
ri_max=31;
break;
case 2:
if(nian%4==0)
ri_max=28;
else
ri_max=29;
break;
default:
ri_max=30;
break;
}
zhou_jisuan();
OLED_zifu(0,0,6,8," ");
OLED_zifu(0,1,6,8," ");
OLED_zifu(0,2,6,8," ");
OLED_zifu(0,3,6,8," ");
OLED_zifu(0,4,6,8," ");
OLED_zifu(0,5,6,8," ");
OLED_zifu(0,6,6,8," ");
OLED_zifu(0,7,6,8," ");
OLED_write(9,0,8,16,nian%6000/1000);
OLED_write(17,0,8,16,nian%1000/100);
OLED_write(25,0,8,16,nian%100/10);
OLED_write(33,0,8,16,nian%10);
OLED_write(41,0,16,16,8);
OLED_write(57,0,8,16,yue%13/10);
OLED_write(65,0,8,16,yue%10);
OLED_write(73,0,16,16,9);
OLED_write(89,0,8,16,ri%ri_max/10);
OLED_write(97,0,8,16,ri%10);
OLED_write(105,0,16,16,0);
OLED_write(48,2,16,16,10);
OLED_write(64,2,16,16,zhou);
OLED_write(40,4,6,8,shi%24/10);
OLED_write(46,4,6,8,shi%10);
OLED_zifu(52,4,6,8,":");
OLED_write(58,4,6,8,fen%60/10);
OLED_write(64,4,6,8,fen%10);
OLED_zifu(70,4,6,8,":");
OLED_write(76,4,6,8,miao%60/10);
OLED_write(82,4,6,8,miao%10);
}
void main(void)
{
InitTimer0();
OLED_Init(); //OLED初始化
OLED_Fill(0);
while(1)
{
display();
}
}
void Timer0Interrupt(void) interrupt 1
{
static unsigned char k=0;
TH0 = 0x0DC;
TL0 = 0x00;
k++;
if(k==100)
{
k=0;
miao++;
jinzhi(&shi,&fen,&miao,&nian,&yue,&ri);
}
}
|