📄 calculatedates.c
字号:
#include "reg51.h"
#define ISP_ENABLE
#ifdef ISP_ENABLE
sbit ISP_P=P0^1;
extern void GoToIsp(void);
#endif
typedef struct
{
unsigned char month;
unsigned char dat;
}dates;
//unsigned char dates[]={0,0,0}
unsigned char dataBuff[4];//={0x07,0xd8,0x07,0x0f};//改过
unsigned char dataBuff1[4];
unsigned char i;
unsigned char j;
unsigned char k=0;
unsigned long year;
unsigned long leapyearNum;
unsigned char week;
unsigned long tolday;
dates days[12]={{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
unsigned char smallDays;
unsigned long totalDays;
unsigned char testBuff;//测试用的
bit ok_flag;//=1;//改过
/*enum
{
January =31,
February =29,
March =31,
April =30,
May =31,
June =30,
July =31,
August =31,
september =30,
October =31,
November =30,
December =31
};
*/
void uartInit()
{
PCON=0x00;
SCON=0x50;
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
EA=1;
ES=1;
}
/*void delay(unsigned char i)
{
unsigned char j,k;
while(i--)
{
for(j=0;j<20;j++)
for(k=0;k<100;k++)
{}
}
}
*/
unsigned long calculateDdates(unsigned char *p)
{
unsigned char m;
year=(*p<<8)+*(p+1);
while(--year)
{
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
{
leapyearNum++;
//totalDays=year
}
}
else
{
leapyearNum++;
}
}
}
year=(*p<<8)+*(p+1);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
{
if(*(p+2)<=2)
{
smallDays=31+*(p+3);
}
else
{
for(m=1;m<*(p+2);m++)
{
smallDays+=days[*(p+2)-2].dat;
}
smallDays=smallDays+*(p+3)+1;
}
}
}
else
{
if(*(p+2)<=2)
{
smallDays=31+*(p+3);
}
else
{
for(m=1;m<*(p+2);m++)
{
smallDays+=days[*(p+2)-2].dat;
}
smallDays=smallDays+*(p+3)+1;
}
}
}
else
{
if(*(p+2)<=2)
{
smallDays=31+*(p+3);
}
else
{
for(m=1;m<*(p+2);m++)
{
smallDays+=days[*(p+2)-2].dat;
}
smallDays=smallDays+*(p+3);
}
}
totalDays=(year-leapyearNum)*365+(leapyearNum)*366+smallDays;
smallDays=0x00;
leapyearNum=0x00;
return (totalDays);
}
main(void)
{
uartInit();
#ifdef ISP_ENABLE
ISP_P=1;
if(!ISP_P)
{
GoToIsp();
}
#endif
while(1)
{
if(ok_flag==1)
{
ok_flag=0;
EA=0;
tolday=calculateDdates(dataBuff);
week =tolday%7;
SBUF =week;
while(!TI);
TI=0;
//删了一个WEEK=0;
EA=1;
}
}
}
void uartIsv() interrupt 4
{
if(RI)
{
RI=0;
if(k<3)
{
dataBuff[k]=SBUF;
k++;
}
else
{
dataBuff[k]=SBUF;
k=0;
ok_flag=1;
}
}
}
/*
main(void)
{
uartInit();
#ifdef ISP_ENABLE
ISP_P=1;
if(!ISP_P)
{
GoToIsp();
}
#endif
while(1)
{
if(ok_flag==1)
{
ok_flag=0;
EA=0;
for(i=0;i<4;i++)
{
SBUF=dataBuff[i];
while(!TI);
TI=0;
}
EA=1;
}
// delay(100);
//RI=1;
}
}
void uartIsv() interrupt 4
{
if(RI)
{
RI=0;
if(k<3)
{
dataBuff[k]=SBUF;
k++;
}
else
{
dataBuff[k]=SBUF;
k=0;
ok_flag=1;
}
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -