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

📄 wnl.c

📁 与硬件无关的C语言写的万年历源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			if(ucLunarCalendarMonth == ucTempLeapMonth)
			{
//				if((gclunar_calendar_year==6)|(gclunar_calendar_year==14)|(gclunar_calendar_year==19)|(gclunar_calendar_year==25)|(gclunar_calendar_year==33)|(gclunar_calendar_year==36)|(gclunar_calendar_year==38)|(gclunar_calendar_year==41)|(gclunar_calendar_year==44)|(gclunar_calendar_year==52)|(gclunar_calendar_year==
				for(temp01 = 0;temp01 < 20; temp01++)
				{
					if(ucLunarCalendarYear == aa[temp01])
					{
						if(uiTempTotalDay<31)
						{
							ucLunarCalendarDate = uiTempTotalDay;
							ucTpumenusTempLoop = 0;
							ucTempFlag = 0;
							ucLunarMonthTotalDay = 30;
						}
						else 
							uiTempTotalDay -= 30;
						state = 1;
					}
				}
				if(!state)
				{
					if(uiTempTotalDay < 30)
					{
						ucLunarCalendarDate = uiTempTotalDay;
						ucTpumenusTempLoop = 0;
						ucTempFlag = 0; /*current month:ucTempLeapMonth*/ 
						ucLunarMonthTotalDay = 29;
					}
					else 
						uiTempTotalDay -= 29; 
				}
#if 0
				switch(ucLunarCalendarYear)
				{
					case 6,14,19,25,33,36,38,41,44,52,55,79,117,136,147,150,155,158,185,193:
						if(uiTempTotalDay<31)
						{
							ucLunarCalendarDate = uiTempTotalDay;
							ucTpumenusTempLoop = 0;
							ucTempFlag = 0;
						}
						else 
							uiTempTotalDay -= 30;
						break; //current month:ucTempLeapMonth
					default:
						if(uiTempTotalDay < 30)
						{
							ucLunarCalendarDate = uiTempTotalDay;
							ucTpumenusTempLoop = 0;
							ucTempFlag = 0; /*current month:ucTempLeapMonth*/ }
						else 
							uiTempTotalDay -= 29; 
						break;
				}
#endif
			} 
			if(ucTempFlag)
			{
				ucLunarCalendarMonth++;
				if(ucLunarCalendarMonth == 13)
				{
					ucLunarCalendarMonth = 1;
					ucLunarCalendarYear++;
				}
				if(uiTempTotalDay < 61) //if uiTempTotalDay>60,ignore compare 
				{
					ucTpumenusTemp01 = CalendarCalculateLunarMonthTotalDay();
					if(uiTempTotalDay < (ucTpumenusTemp01 + 1))
					{
						ucLunarMonthTotalDay = ucTpumenusTemp01;
						ucTpumenusTempLoop = 0;
						ucLunarCalendarDate = uiTempTotalDay;
					} 
				}
			} 
		} 
	} 
	ucLunarLeapMonth = (ucTempFlag<<4)|ucTempLeapMonth;/*set leap_month flag*/
	*pLunarBuf++ = ucLunarCalendarYear;
	*pLunarBuf++ = ucLunarCalendarMonth;
	*pLunarBuf++ = ucLunarCalendarDate;
	*pLunarBuf++ = ucLunarMonthTotalDay;
	*pLunarBuf++ = ucLunarLeapMonth;
	*pLunarBuf = ucStartDayOfWeek
}

#if KEILC51
unsigned char code CalendarSolarTermTable01[12][33] = {
#else
const uchar CalendarSolarTermTable01[12][33] = {
#endif
{7,6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5}, //month 1
{5,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,4,3,3,3}, //2
{6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //3
{5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,4,4,5,5,4,4,4,5,4,4,4,4,5}, //4
{6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //5
{6,6,7,7,6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //6
{7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7}, //7
{8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7}, //8
{8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,7}, //9
{9,9,9,9,8,9,9,9,8,8,9,9,8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,8}, //10
{8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7}, //11
{7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7}, //12
}; //这个数据表表示了每个月第一个节气出现的规律


#if KEILC51
unsigned char code CalendarSolarTermYear01[12][9] = {
#else
const unsigned char CalendarSolarTermYear01[12][9] = {
#endif
{13,49,85,117,149,185,201,250,250}, //month 1
{13,45,81,117,149,185,201,250,250}, //2
{13,48,84,112,148,184,200,201,250}, //3
{13,45,76,108,140,172,200,201,250}, //4
{13,44,72,104,132,168,200,201,250}, //5
{5 ,33,68,96 ,124,152,188,200,201}, //6
{29,57,85,120,148,176,200,201,250}, //7
{13,48,76,104,132,168,196,200,201}, //8
{25,60,88,120,148,184,200,201,250}, //9
{16,44,76,108,144,172,200,201,250}, //10
{28,60,92,124,160,192,200,201,250}, //11
{17,53,85,124,156,188,200,201,250}, //12
}; //这个数据表表示了每个月第一个节气出现规律对应的阳历年份范围

#if KEILC51
unsigned char code CalendarSolarTermTable02[12][29] = {
#else
const unsigned char CalendarSolarTermTable02[12][29] = {
#endif
{21,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,20,20,20,20,20,19,20,20,20,19,19,20},
{20,19,19,20,20,19,19,19,19,19,19,19,19,18,19,19,19,18,18,19,19,18,18,18,18,18,18,18},
{21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,21,20,20,20,20,19,20,20,20,20},
{20,21,21,21,20,20,21,21,20,20,20,21,20,20,20,20,19,20,20,20,19,19,20,20,19,19,19,20,20},
{21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,21,21},
{22,22,22,22,21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,21},
{23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,22,22,22,22,23},
{23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,23},
{23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,23},
{24,24,24,24,23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,23},
{23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,22,22,22,22,21,22,22,22,21,21,22,22,22},
{22,22,23,23,22,22,22,23,22,22,22,22,21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,22},
}; //这个数据表表示了每个月第二个节气出现的规律

#if KEILC51
unsigned char code CalendarSolarTermYear02[12][8] = {
#else
const unsigned char CalendarSolarTermYear02[12][8] = {
#endif
{13,45,81,113,149,185,201},{21,57,93,125,161,193,201},
{21,56,88,120,152,188,200,201},
{21,49,81,116,144,176,200,201},{17,49,77,112,140,168,200,201},
{28,60,88,116,148,180,200,201},{25,53,84,112,144,172,200,201},
{29,57,89,120,148,180,200,201},{17,45,73,108,140,168,200,201},
{28,60,92,124,160,192,200,201},{16,44,80,112,148,180,200,201},
{17,53,88,120,156,188,200,201},};
//这个数据表表示了每个月第二个节气出现规律对应的阳历年份范围

/****************************************************************
 *函数性质:共用
 *入口:公历年unsigned char ucSolarCalendarYear,公历月unsigned char ucSolarCalendarMonth
 *出口:日期
 *功能:计算输入的公历年月中的第一个24节气日在哪一天
 *调用方式:unsigned char CalendarCalculateSolarTerm1(void)
*****************************************************************/
unsigned char CalendarCalculateSolarTerm1(unsigned char ucSolarCalendarYear,unsigned char ucSolarCalendarMonth)
{
	unsigned char ucDoneIndex;
	unsigned char ucSolarTerm;
	ucDoneIndex = 0;
	while(ucSolarCalendarYear >= CalendarSolarTermYear01[ucSolarCalendarMonth - 1][ucDoneIndex]) 
		ucDoneIndex++;
	ucSolarTerm = CalendarSolarTermTable01[ucSolarCalendarMonth - 1][4*ucDoneIndex + ucSolarCalendarYear%4];
	if((ucSolarCalendarYear == 121)&&(ucSolarCalendarMonth == 4))
		ucSolarTerm = 5;
	if((ucSolarCalendarYear == 132)&&(ucSolarCalendarMonth == 4))
		ucSolarTerm = 5;
	if((ucSolarCalendarYear == 194)&&(ucSolarCalendarMonth == 6))
	ucSolarTerm = 6;
	return(ucSolarTerm);
} //计算阳历月对应的第一个节气

/****************************************************************
 *函数性质:共用
 *入口:公历年unsigned char ucSolarCalendarYear,公历月unsigned char ucSolarCalendarMonth
 *出口:日期
 *功能:计算输入的公历年月中的第二个24节气日在哪一天
 *调用方式:unsigned char CalendarCalculateSolarTerm1(void)
*****************************************************************/
unsigned char CalendarCalculateSolarTerm2(unsigned char ucSolarCalendarYear,unsigned char ucSolarCalendarMonth)
{
	unsigned char ucDoneIndex;
	unsigned char ucSolarTerm;
	ucDoneIndex = 0;
	while(ucSolarCalendarYear >= CalendarSolarTermYear02[ucSolarCalendarMonth - 1][ucDoneIndex])
		ucDoneIndex++;
	ucSolarTerm = CalendarSolarTermTable02[ucSolarCalendarMonth - 1][4*ucDoneIndex + ucSolarCalendarYear%4];
	if((ucSolarCalendarYear == 171)&&(ucSolarCalendarMonth == 3))
		ucSolarTerm = 21;
	if((ucSolarCalendarYear == 181)&&(ucSolarCalendarMonth == 5))
		ucSolarTerm = 21;
	return(ucSolarTerm);
} //计算阳历月对应的第二个节气


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -