⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculatedates.c

📁 给当前的日期星期
💻 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 + -