万年历查询程序. C语言代码

万年历查询程序. C语言代码,第1张

除了天数差计算,基本上是完成了你所提出的功能(天数差计算其实已经提供了年内序数计算方方法,可以在此基础上完善即可)。包含星期计算、公历农历、农历转公历、节气查询。数据与算法均为原创,绝非网上复制而来。附件中有源代码,同时附带农历数据提取工具,可提取1600到7000年之间的任意年份区间,提取后的数据为压缩数据,占用空间小,同时数据包含数九、三伏、入梅和出梅,非常适合写一份完整的万年历。

部分核心算法函数如下:

//判断闰年,参数:年份,返回值:0-平年,1-闰年

int IsLeapYear(int iYear);

//计算日期在年内的序数,参数:年,月,日,年内序数,返回值:0-失败,1-成功

int GetDaysNumInYear(int iYear, int iMonth, int iDay,int nDays);

//从年内序数计算月、日,参数:年,年内序数,月,日,返回值:0-失败,1-成功

int GetDateFromDays(int iYear, int nDays, int iMonth, int iDay);

//检验年、月、日的合法性,参数:年,月,日,返回值:0-失败,1-成功

int DateCheck(int iYear,int iMonth,int iDay);

//获取农历新年的公历年内序数,参数:农历年,返回值:农历新年的公历年内序数

int LunarGetNewYearOrdinal(int iLunarYear);

//获取农历月的天数,参数:农历年,农历月,是否为闰月,返回值:该农历月的天数,为0代表参数无效

int LunarGetDaysofMonth(int iLunarYear,int iLunarMonth,int IsLeapMonth);

//展开大小月数据表(某一年的),参数:农历年,从上一年十一月开始到当前年份(闰)十二月的每月天数,返回值:0-失败,1-成功

int LunarExpandDX(int iLunarYear,int iDayOfMonth[15]);

//获取农历某一年的闰月情况,参数:农历年,返回值,该年的闰月月份,0表示无闰月

int LunarGetLeapMonth(int iLunarYear);

//公历转农历,参数:公历年、月、日,农历年、月、日,是否为闰月,返回值:0-失败,1-成功

int Gongli2Nongli(int iYear,int iMonth,int iDay,int iLunarYear,int iLunarMonth,int iLunarDay,int iIsLeapMonth);

//农历转公历,参数:家历年、月、日,是否为闰月,公历年、月、日,返回值:0-失败,1-成功

int Nongli2Gongli(int iLunarYear,int iLunarMonth,int iLunarDay,int iIsLeapMonth,int iYear,int iMonth,int iDay);

//得到指定年份的节气信息,首个是小寒

int GetJieQi(int iYear,int uMonth,unsigned int uJieQi[2]);

//计算星期

unsigned int GetDayOfWeek(int iYear,int uMonth,int uDay);

源代码请看

吧。提取码:ooj7

这是一个1602计时的程序,稍微改一下就是万年历了

//12MHz

#include<AT89X51H>

unsigned char Sec,Min,Hour;

#define DB P2

#define RS P3_0

#define RW P3_1

#define E  P3_2

void delay1ms(void)   //误差 0us

{

    unsigned char a,b,c;

    for(c=1;c>0;c--)

        for(b=142;b>0;b--)

            for(a=2;a>0;a--);

}

void nop(unsigned char time){while(time--);}

void LCD_WriteCmd(unsigned char cmd)

{

RS=0;

DB=cmd;

E=0;

nop(5);

E=1;

nop(5);

}

void LCD_WriteData(unsigned char dat)

{

RS=1;

DB=dat;

E=0;

nop(5);

E=1;

nop(5);

}

void Init1602(void)

{

RW=0;

LCD_WriteCmd(0x38);

delay1ms();

LCD_WriteCmd(0x0c);

delay1ms();

LCD_WriteCmd(0x06);

delay1ms();

LCD_WriteCmd(0x01);

delay1ms();

}

void LCD_Clear()

{

LCD_WriteCmd(0x01);

delay1ms();

}

void LCD_SetAddress(unsigned char x,unsigned char y)

{

if(y)

LCD_WriteCmd(0xc0+x);

else

LCD_WriteCmd(0x80+x);

delay1ms();

}

void LCD_DrawChar(unsigned char dat)

{

LCD_WriteData(dat);

delay1ms();

}

void InitTimer0(void)

{

TMOD = 0x01;

TH0 = 0x3C;

TL0 = 0x0B0;

EA = 1;

ET0 = 1;

TR0 = 1;

}

void main(void)

{

InitTimer0();//初始化50ms定时器中断

Init1602();//初始化1602

LCD_Clear();//1602清屏

while(1)

{

LCD_SetAddress(4,0);//显示时间

LCD_DrawChar(Hour/10+'0');

LCD_DrawChar(Hour%10+'0');

LCD_DrawChar(':');

LCD_DrawChar(Min/10+'0');

LCD_DrawChar(Min%10+'0');

LCD_DrawChar(':');

LCD_DrawChar(Sec/10+'0');

LCD_DrawChar(Sec%10+'0');

}

}

void Timer0Interrupt(void) interrupt 1

{

static unsigned char cont;

TH0 += 0x3C;

TL0 += 0x0B0;

if(++cont==20)//2050ms=1s

{

cont=0;

if(++Sec==60)

{

Sec=0;

if(++Min==60)

{

Min=0;

if(++Hour==24)

{

Hour=0;

}

}

}

}

}

效果:

以上就是关于万年历查询程序. C语言代码全部的内容,包括:万年历查询程序. C语言代码、求不需要时钟芯片单片万年历LCD1602显示程序。坐等,急急急 基于STC89C52、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9419166.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存