4
本帖最后由 yuying2015 于 2013-3-9 23:01 编辑
前两天看到论坛上的一个挂历图所以我也写了一个玩,之前不知道星期和日期的排列,闰年平年也分布清生肖排列也不了解多少所以设计的算法还可以优化。
功能:1常见万能历形式:温度,时间,闹钟,调时;2日历表形式:范围2000~2099年间,计算日按星期排列位置.生肖.闰年平年。
功能简单,以后有兴趣再增加游戏功能。今天上课时开小差写的,所以程序应该不会有雷同,给大家看一下我写的日历表函数的思路,如果有更简便的方法希望大家一起交流:
//====================================================================================================
void riliban(void)
{
//pdh
//1000830317
//2013/3/7
//基本部分
//无处理
uchar m,d,yr; //月日年
uchar i,xx,y; //i循环计数,xx坐标,y坐标
uchar monthx,month1; //月首地址,1月首地址
uchar nday,yu; //月天数,余数
uchar rp,run=0,ping=0; //闰年标志,闰年计数,平年计数
uchar sx; //生肖定位
LCD12864_set_tu(0,0,shu0_31+672,16,64,0); //电子日历字
LCD12864_set_tu(1,8,shu0_31+560,112,8,0); //周目字//shu0_31存放数值和一些图形
LCD12864_set_tu(2,0,shu0_31+512,16,8,0); //年字
LCD12864_set_tu(4,0,shu0_31+528,16,8,0); //月字
LCD12864_set_tu(6,0,shu0_31+544,16,8,0); //日字
LCD12864_set_tu(4,56,ziliao,64,8,0); //个人资料
gettime(&realtime);
yr=datastring[0]*10+datastring[1];
m=datastring[2]*10+datastring[3];
d=datastring[4]*10+datastring[5];
LCD12864_set_tu(1,0,shu0_31+yr*16,16,8,0); //年数
LCD12864_set_tu(3,0,shu0_31+m*16,16,8,0); //月数
LCD12864_set_tu(5,0,shu0_31+d*16,16,8,0); //日数
sx=(2000+yr)%12;
LCD12864_set_tu(7,0,shengxiao+sx*16,16,8,0); //生肖
//年处理
if(yr%4==0){rp=1;} //判断闰平年
else{rp=0;}
for(i=0;i
{
if(i%4==0){run++;} //计算13到yr间闰年平年数各数量
else{ping++;}
}
yu=((366*run)+(365*ping))%42+7; //以2013年为起始年累算
if(yu<8){month1=yu;} //求得任意一年1月1日显示的地址代号
else if(yu<15){month1=yu-7;} //
else if(yu<22){month1=yu-14;}
else if(yu<29){month1=yu-21;}
else if(yu<34){month1=yu-28;}
else{month1=yu-35;}
switch(rp) //求任一月首地址代号
{
case 0:{ //平年
if(m==2||m==3||m==11){monthx=month1+3;}
else if(m==4||m==7){monthx=month1+1;}
else if(m==5){monthx=month1+1;}
else if(m==6){monthx=month1+4;}
else if(m==8){monthx=month1+2;}
else if(m==9||m==12){monthx=month1+5;}
else{monthx=month1;}
break;
}
case 1:{ //闰年
if(m==2||m==8){monthx=month1+3;}
else if(m==3||m==11){monthx=month1+4;}
else if(m==5){monthx=month1+2;}
else if(m==6){monthx=month1+5;}
else if(m==10){monthx=month1+1;}
else if(m==9||m==12){monthx=month1+6;}
else{monthx=month1;}
break;
}
}
if(monthx>7){monthx=monthx-7;} //至此已经得到任意月首地址
if(m==4||m==6||m==9||m==11){nday=30;} //取月天数
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){nday=31;}
if(m==2){
switch(rp)
{
case 0:nday=28;break; //平
case 1:nday=29;break; //闰
}
} //至此已得到月天数
for(i=1;i<=nday;i++) //循环显示所有天数
{
xx=monthx+i;
if(xx>=2&&xx<=8){xx=xx-1;y=16;} //求显示地址代码
if(xx>=9&&xx<=15){xx=xx-8;y=24;}
if(xx>=16&&xx<=22){xx=xx-15;y=32;}
if(xx>=23&&xx<=29){xx=xx-22;y=40;}
if(xx>=30&&xx<=36){xx=xx-29;y=48;}
if(xx>=37&&xx<=43){xx=xx-36;y=56;}
if(i==d){LCD12864_set_tu(xx,y,shu0_31+(i*16),16,8,1);}//反白当天
else{LCD12864_set_tu(xx,y,shu0_31+(i*16),16,8,0); }//其他天
}
}
//====================================================================================================
|
-
IMG_20130307_214228_0.jpg
(39.96 KB, 下载次数: 39)
-
IMG_20130307_210902_0.jpg
(45.72 KB, 下载次数: 53)
-
IMG_20130307_210640_0.jpg
(47.45 KB, 下载次数: 72)
-
IMG_20130307_210608_0.jpg
(37.83 KB, 下载次数: 44)
-
IMG_20130307_205710_0.jpg
(28.63 KB, 下载次数: 47)
-
IMG_20130307_205646_0.jpg
(28.2 KB, 下载次数: 72)
-
IMG_20130307_205552_0.jpg
(34.85 KB, 下载次数: 45)
-
IMG_20130307_205541_0.jpg
(30.57 KB, 下载次数: 44)
-
IMG_20130307_205511_0.jpg
(37.8 KB, 下载次数: 42)
-
IMG_20130307_205459_0.jpg
(37.38 KB, 下载次数: 41)
-
IMG_20130307_205459_0.jpg
(37.38 KB, 下载次数: 46)
-
IMG_20130307_205437_0.jpg
(37.39 KB, 下载次数: 39)
-
IMG_20130307_205411_0.jpg
(38.31 KB, 下载次数: 36)
-
IMG_20130307_204812_0.jpg
(46.29 KB, 下载次数: 57)
-
IMG_20130307_204807_0.jpg
(46.68 KB, 下载次数: 39)
-
IMG_20130307_223331_0.jpg
(51.22 KB, 下载次数: 62)
-
IMG_20130307_224620_0.jpg
(57.58 KB, 下载次数: 44)
-
tt1.GIF
(40.47 KB, 下载次数: 35)
-
捕获1.GIF
(35.33 KB, 下载次数: 51)
-
捕获2.GIF
(25.79 KB, 下载次数: 43)
-
捕获3.GIF
(13.7 KB, 下载次数: 45)
|