一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3383|回复: 2
收起左侧

请各位帮忙看看:农历在10月-12月显示不对

[复制链接]
发表于 2008-12-5 00:06 | 显示全部楼层 |阅读模式
<P>void Conversion(void)<BR>/*==转换当前农历信息====================================*/<BR>{&nbsp;&nbsp; <BR>unsigned char year,month,day,temp1,temp2,temp3,month_p;<BR>unsigned int temp4,code_addr;<BR>bit flag_y; &nbsp; // flag2,<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; year =((nian/16)*10+nian%16)&amp;0x7f;&nbsp;&nbsp; //加载年月日数据,如为BCD则需转为十进制&nbsp; <BR>&nbsp;&nbsp;&nbsp; month=((yue/16)*10+yue%16);<BR>&nbsp;&nbsp;&nbsp; day=((ri/16)*10+ri%16);<BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp; code_addr=year-1;&nbsp;&nbsp; //定位数据表地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if(((nian/16)*10+nian%16)&gt;&gt;7==0)<BR>&nbsp;&nbsp;&nbsp; code_addr+=100;<BR>&nbsp;&nbsp;&nbsp; code_addr*=3;</P>
<P>&nbsp;&nbsp;&nbsp; temp1=(year_code[code_addr+2]&amp;0x60)&gt;&gt;5; //取当年春节所在的公历月份&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; temp2=year_code[code_addr+2]&amp;0x1f;&nbsp;&nbsp; //取当年春节所在的公历日&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; temp3=temp2-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //计算当年春节离当年元旦的天数,春节只会在公历1月或2月<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; if(temp1!=1)<BR>&nbsp;&nbsp; temp3+=31;&nbsp;&nbsp;&nbsp;&nbsp; //如果不在1月则天数加上31天(1月)<BR>&nbsp;&nbsp;&nbsp; if(month&lt;10)<BR>&nbsp;&nbsp;&nbsp; {temp4=day_code1[month-1]+day;}<BR>&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp; {temp4=day_code2[month-10]+day;}</P>
<P>&nbsp;&nbsp;&nbsp; if((month&lt;=2)||(year%0x04!=0))<BR>&nbsp;&nbsp; temp4-=1; //如果公历月小于等于2月或者该年的2月非闰月,天数减1&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; temp2=(year_code[code_addr]&amp;0xf0)&gt;&gt;4; //从数据表中取该年的闰月月份,如为0则该年无闰月<BR>&nbsp; <BR>&nbsp;if (temp4&gt;=temp3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断公历日在春节前还是春节后<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //公历日在春节后或就是春节当日使用下面代码进行运算<BR>&nbsp;&nbsp;&nbsp; temp4 -=temp3;<BR>&nbsp;&nbsp;&nbsp; month&nbsp; = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; flag_y = 0;<BR>&nbsp;&nbsp;&nbsp; month_p= 1;&nbsp; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月<BR>&nbsp;&nbsp;&nbsp; temp1=get_moon_day(month_p,code_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;while(temp4&gt;=temp1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp4-=temp1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; month_p+=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(month==temp2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag_y=~flag_y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(flag_y==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; month+=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {month+=1;}</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp1=get_moon_day(month_p,code_addr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; day=temp4+1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //公历日在春节前使用下面代码进行运算<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp3-=temp4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(year==0)<BR>&nbsp;&nbsp;&nbsp; {year=0xe3;}<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp; {year-=1;}</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; code_addr-=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; month&nbsp; = 12;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag_y = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(temp2==0)<BR>&nbsp;&nbsp;{month_p=12;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp; {month_p=13;} //如果当年有闰月,一年有十三个月,月指向13,无闰月指向12&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp1=get_moon_day(month_p,code_addr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(temp3&gt;temp1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp3-=temp1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; month_p-=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(flag_y==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; month-=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(month==temp2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag_y=~flag_y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp1=get_moon_day(month_p,code_addr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; day=temp1-temp3+1;<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp; Tim[0] = year|(((nian/16)*10+nian%16)&amp;0x80);&nbsp;&nbsp;&nbsp; //将农历信息写进指定变量<BR>&nbsp;&nbsp; Tim[1] = month;<BR>&nbsp;&nbsp; Tim[2] = day;<BR>&nbsp; // Conver_week();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最后进行星期转换(根据需要自行选用)<BR>}</P>
<P>unsigned char get_moon_day(unsigned char&nbsp;&nbsp; month_p,unsigned int code_addr)/*读取数据表中农历月的大月或小月,如果该月大返回1,小返回0*/<BR>{<BR>&nbsp; unsigned char temp,temp5; </P>
<P><BR>&nbsp; temp=0x80&gt;&gt;((month_p+3)%8);<BR>&nbsp; temp5=(month_p+3)/8; <BR>&nbsp; temp=year_code[code_addr+temp5]&amp;temp; <BR>&nbsp;if(temp==0)<BR>&nbsp;&nbsp; return(29);<BR>&nbsp; else<BR>&nbsp; return(30);</P>
<P>&nbsp;}<BR></P>
发表于 2008-12-11 07:41 | 显示全部楼层
沈兄:刚看到,相关资料已发你邮箱!
 楼主| 发表于 2008-12-12 11:34 | 显示全部楼层
资料收到,谢谢!!

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-10 07:59 , Processed in 0.063400 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表