📄 wnl.c
字号:
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 + -