微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 调试通过51单片机的万年历

调试通过51单片机的万年历

时间:11-28 来源:互联网 点击:

0x09,0x37,0x4B, //2051

0x84,0x97,0xC1, //2052

0x04,0x97,0x53, //2053

0x06,0x4B,0x48, //2054

0x66,0xA5,0x3C, //2055

0x0e,0xA5,0x4f, //2056

0x06,0xB2,0x44, //2057

0x4A,0xB6,0x38, //2058

0x0A,0xAe,0x4C, //2059

0x09,0x2e,0x42, //2060

0x3C,0x97,0x35, //2061

0x0C,0x96,0x49, //2062

0x7d,0x4A,0xBd, //2063

0x0d,0x4A,0x51, //2064

0x0d,0xA5,0x45, //2065

0x55,0xAA,0xBA, //2066

0x05,0x6A,0x4e, //2067

0x0A,0x6d,0x43, //2068

0x45,0x2e,0xB7, //2069

0x05,0x2d,0x4B, //2070

0x8A,0x95,0xBf, //2071

0x0A,0x95,0x53, //2072

0x0B,0x4A,0x47, //2073

0x6B,0x55,0x3B, //2074

0x0A,0xd5,0x4f, //2075

0x05,0x5A,0x45, //2076

0x4A,0x5d,0x38, //2077

0x0A,0x5B,0x4C, //2078

0x05,0x2B,0x42, //2079

0x3A,0x93,0xB6, //2080

0x06,0x93,0x49, //2081

0x77,0x29,0xBd, //2082

0x06,0xAA,0x51, //2083

0x0A,0xd5,0x46, //2084

0x54,0xdA,0xBA, //2085

0x04,0xB6,0x4e, //2086

0x0A,0x57,0x43, //2087

0x45,0x27,0x38, //2088

0x0d,0x26,0x4A, //2089

0x8e,0x93,0x3e, //2090

0x0d,0x52,0x52, //2091

0x0d,0xAA,0x47, //2092

0x66,0xB5,0x3B, //2093

0x05,0x6d,0x4f, //2094

0x04,0xAe,0x45, //2095

0x4A,0x4e,0xB9, //2096

0x0A,0x4d,0x4C, //2097

0x0d,0x15,0x41, //2098

0x2d,0x92,0xB5, //2099

};

///月份数据表

code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};

code uint day_code2[3]={0x111,0x130,0x14e};

bit c_moon;

data uchar year_moon,month_moon,day_moon,week;


bit get_moon_day(uchar month_p,uint table_addr)

{

unsigned char temp;

switch (month_p){

case 1:{if(year_code[table_addr]&0x08 == 0) return(0);

else return(1);}

case 2:{if(year_code[table_addr]&0x04 == 0) return(0);

else return(1);}

case 3:{if(year_code[table_addr]&0x02 == 0) return(0);

else return(1);}

case 4:{if(year_code[table_addr]&0x01 == 0) return(0);

else return(1);}

case 5:{if(year_code[table_addr+1]&0x80 == 0) return(0);

else return(1);}

case 6:{if(year_code[table_addr+1]&0x40 == 0) return(0);

else return(1);}

case 7:{if(year_code[table_addr+1]&0x20 == 0) return(0);

else return(1);}

case 8:{if(year_code[table_addr+1]&0x10 == 0) return(0);

else return(1);}

case 9:{if(year_code[table_addr+1]&0x08 == 0) return(0);

else return(1);}

case 10:{if(year_code[table_addr+1]&0x04 == 0) return(0);

else return(1);}

case 11:{if(year_code[table_addr+1]&0x02 == 0) return(0);

else return(1);}

case 12:{if(year_code[table_addr+1]&0x01 == 0) return(0);

else return(1);}

case 13:{temp=year_code[table_addr+2]&0x80;

if (temp==0)return(0);else return(1);}

}

}

void Conversion(bit c,uchar year,uchar month,uchar day)

{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据

uchar temp1,temp2,temp3,month_p;

uint temp4,table_addr;

bit flag2,flag_y;

temp1=year/16; //BCD->hex 先把数据转换为十六进制

temp2=year;

year=temp1*10+temp2;

temp1=month/16;

temp2=month;

month=temp1*10+temp2;

temp1=day/16;

temp2=day;

day=temp1*10+temp2;

//定位数据表地址

if(c==0){

table_addr=(year+0x64-1)*0x3;

}

else {

table_addr=(year-1)*0x3;

}

//定位数据表地址完成

//取当年春节所在的公历月份

temp1=year_code[table_addr+2]&0x60;

temp1=_cror_(temp1,5);

//取当年春节所在的公历月份完成

//取当年春节所在的公历日

temp2=year_code[table_addr+2]&0x1f;

//取当年春节所在的公历日完成

// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月

if(temp1==0x1){

temp3=temp2-1;

}

else{

temp3=temp2+0x1f-1;

}

// 计算当年春年离当年元旦的天数完成

//计算公历日离当年元旦的天数,为了减少运算,用了两个表

//day_code1[9],day_code2[3]

//如果公历月在九月或前,天数会少于0xff,用表day_code1[9],

//在九月后,天数大于0xff,用表day_code2[3]

//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1

//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1

if (month<10){

temp4=day_code1[month-1]+day-1;

}

else{

temp4=day_code2[month-10]+day-1;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top