rili.h

来自「AT89S52的万年历程序源码」· C头文件 代码 · 共 136 行

H
136
字号
//星期 
//(百年%4*5天+年+年/4+月星期表+日+2天)%7        
unsigned char getweek(unsigned year,unsigned char month,unsigned char day)
{
    unsigned week;
    unsigned char moontab1[]={3,6,0,3,5,1,3,6,2,4,0,2},moontab2[]={4,0,0,3,5,1,3,6,2,4,0,2};
    if((0==year/400)||(0==year/4&&0!=year/100))
    week=((year/100)%4*5+year%100+(year%100)/4+moontab1[month-1]+day+2)%7;
    else
    week=((year/100)%4*5+year%100+(year%100)/4+moontab2[month-1]+day+2)%7;
    return week;
}


//日历 

#include<lcd1.h>
void pagerili(bit x,unsigned char week,unsigned char monthday,unsigned char *rilisto)
{
    unsigned char i;
    if(x==0)
	{
	    clrscreen();
		write_com(0x81);
		for(i=0;i<4;i++)
		write_data(rilisto[i]+0x30);
		hzkdis("年");  
		write_data(rilisto[4]+0x30);
		write_data(rilisto[5]+0x30);
		hzkdis("月"); 
	    write_com(0x90);
        hzkdis("周一二三四五六天");    
		write_com(0x89);
	    for(i=1;i<=7-week+1;i++)
 	    {
		    write_data(i/10+0x30);
			write_data(i%10+0x30);
		}
		write_com(0x99);
		for(i=9-week;i<16-week;i++)
		{
		    write_data(i/10+0x30);
			write_data(i%10+0x30);
		}
		
	}
	else if(x==1)
	{
        clrscreen();
		write_com(0x81);
		for(i=16-week;i<23-week;i++)
		{
		    write_data(i/10+0x30);
			write_data(i%10+0x30);
		}
		write_com(0x91);
        for(i=23-week;i<30-week;i++)
		{
		    write_data(i/10+0x30);
			write_data(i%10+0x30);
		}
		if(30-week<=monthday)
		{
		    write_com(0x91);
			if(37-week>monthday)
            {
			    for(i=30-week;i<=monthday;i++)
	    	    {
		            write_data(i/10+0x30);
		    	    write_data(i%10+0x30);
	    	    }
			} 
  		    else
			{
                for(i=30-week;i<37-week;i++)
	    	    {
		            write_data(i/10+0x30);
		    	    write_data(i%10+0x30);
	    	    }
				write_com(0x99);
                for(i=37-week;i<44-week;i++)
	    	    {
		            write_data(i/10+0x30);
		          	write_data(i%10+0x30);
	            }
			}
		}
	}
}

void rilidis(unsigned char *rilisto)
{
    unsigned year;
    unsigned char month,monthday;
	unsigned char week;
	bit y=0;
	year=rilisto[0]*1000+rilisto[1]*100+rilisto[2]*10+rilisto[3];
	month=rilisto[4]*10+rilisto[5];
	if(month>12)
	month=12;
    week=getweek(year,month,1);
    if(month==4||month==6||month==9||month==11)
	monthday=30;
	else if(month==2)
	{
	    if(year%400==0||(year%4==0&&year%100!=0))
		monthday=29;
		else
		monthday=28;
	}
	else monthday=31;
    pagerili(y,week,monthday,rilisto);
    while(1)
	{
	    P3=0x7f;
	    if(P3_0==0)
	    {
	        delay(50);
		    if(P3_0==0)
		    {
		        y=~y;
			    pagerili(y,week,monthday,rilisto);
			    while(P3_0==0);
		    }
	    }
	    if(P3_3==0)
	    {
	        delay(50);
		    if(P3_3==0)
		    {
		        return;
		    }
	    }
	}
}

⌨️ 快捷键说明

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