📄 12864
字号:
1102 0x02,0x5d,0x4d, //1945
1103 0x09,0x2d,0x42, //1946
1104 0x2C,0x95,0xB6, //1947
1105 0x0A,0x95,0x4A, //1948
1106 0x7B,0x4A,0xBd, //1949
1107 0x06,0xCA,0x51, //1950
1108 0x0B,0x55,0x46, //1951
1109 0x55,0x5A,0xBB, //1952
C51 COMPILER V8.02 12864万年繽 11/15/2007 20:52:01 PAGE 19
1110 0x04,0xdA,0x4e, //1953
1111 0x0A,0x5B,0x43, //1954
1112 0x35,0x2B,0xB8, //1955
1113 0x05,0x2B,0x4C, //1956
1114 0x8A,0x95,0x3f, //1957
1115 0x0e,0x95,0x52, //1958
1116 0x06,0xAA,0x48, //1959
1117 0x7A,0xd5,0x3C, //1960
1118 0x0A,0xB5,0x4f, //1961
1119 0x04,0xB6,0x45, //1962
1120 0x4A,0x57,0x39, //1963
1121 0x0A,0x57,0x4d, //1964
1122 0x05,0x26,0x42, //1965
1123 0x3e,0x93,0x35, //1966
1124 0x0d,0x95,0x49, //1967
1125 0x75,0xAA,0xBe, //1968
1126 0x05,0x6A,0x51, //1969
1127 0x09,0x6d,0x46, //1970
1128 0x54,0xAe,0xBB, //1971
1129 0x04,0xAd,0x4f, //1972
1130 0x0A,0x4d,0x43, //1973
1131 0x4d,0x26,0xB7, //1974
1132 0x0d,0x25,0x4B, //1975
1133 0x8d,0x52,0xBf, //1976
1134 0x0B,0x54,0x52, //1977
1135 0x0B,0x6A,0x47, //1978
1136 0x69,0x6d,0x3C, //1979
1137 0x09,0x5B,0x50, //1980
1138 0x04,0x9B,0x45, //1981
1139 0x4A,0x4B,0xB9, //1982
1140 0x0A,0x4B,0x4d, //1983
1141 0xAB,0x25,0xC2, //1984
1142 0x06,0xA5,0x54, //1985
1143 0x06,0xd4,0x49, //1986
1144 0x6A,0xdA,0x3d, //1987
1145 0x0A,0xB6,0x51, //1988
1146 0x09,0x37,0x46, //1989
1147 0x54,0x97,0xBB, //1990
1148 0x04,0x97,0x4f, //1991
1149 0x06,0x4B,0x44, //1992
1150 0x36,0xA5,0x37, //1993
1151 0x0e,0xA5,0x4A, //1994
1152 0x86,0xB2,0xBf, //1995
1153 0x05,0xAC,0x53, //1996
1154 0x0A,0xB6,0x47, //1997
1155 0x59,0x36,0xBC, //1998
1156 0x09,0x2e,0x50, //1999
1157 0x0C,0x96,0x45, //2000
1158 0x4d,0x4A,0xB8, //2001
1159 0x0d,0x4A,0x4C, //2002
1160 0x0d,0xA5,0x41, //2003
1161 0x25,0xAA,0xB6, //2004
1162 0x05,0x6A,0x49, //2005
1163 0x7A,0xAd,0xBd, //2006
1164 0x02,0x5d,0x52, //2007
1165 0x09,0x2d,0x47, //2008
1166 0x5C,0x95,0xBA, //2009
1167 0x0A,0x95,0x4e, //2010
1168 0x0B,0x4A,0x43, //2011
1169 0x4B,0x55,0x37, //2012
1170 0x0A,0xd5,0x4A, //2013
1171 0x95,0x5A,0xBf, //2014
C51 COMPILER V8.02 12864万年繽 11/15/2007 20:52:01 PAGE 20
1172 0x04,0xBA,0x53, //2015
1173 0x0A,0x5B,0x48, //2016
1174 0x65,0x2B,0xBC, //2017
1175 0x05,0x2B,0x50, //2018
1176 0x0A,0x93,0x45, //2019
1177 0x47,0x4A,0xB9, //2020
1178 0x06,0xAA,0x4C, //2021
1179 0x0A,0xd5,0x41, //2022
1180 0x24,0xdA,0xB6, //2023
1181 0x04,0xB6,0x4A, //2024
1182 0x69,0x57,0x3d, //2025
1183 0x0A,0x4e,0x51, //2026
1184 0x0d,0x26,0x46, //2027
1185 0x5e,0x93,0x3A, //2028
1186 0x0d,0x53,0x4d, //2029
1187 0x05,0xAA,0x43, //2030
1188 0x36,0xB5,0x37, //2031
1189 0x09,0x6d,0x4B, //2032
1190 0xB4,0xAe,0xBf, //2033
1191 0x04,0xAd,0x53, //2034
1192 0x0A,0x4d,0x48, //2035
1193 0x6d,0x25,0xBC, //2036
1194 0x0d,0x25,0x4f, //2037
1195 0x0d,0x52,0x44, //2038
1196 0x5d,0xAA,0x38, //2039
1197 0x0B,0x5A,0x4C, //2040
1198 0x05,0x6d,0x41, //2041
1199 0x24,0xAd,0xB6, //2042
1200 0x04,0x9B,0x4A, //2043
1201 0x7A,0x4B,0xBe, //2044
1202 0x0A,0x4B,0x51, //2045
1203 0x0A,0xA5,0x46, //2046
1204 0x5B,0x52,0xBA, //2047
1205 0x06,0xd2,0x4e, //2048
1206 0x0A,0xdA,0x42, //2049
1207 0x35,0x5B,0x37, //2050
1208 0x09,0x37,0x4B, //2051
1209 0x84,0x97,0xC1, //2052
1210 0x04,0x97,0x53, //2053
1211 0x06,0x4B,0x48, //2054
1212 0x66,0xA5,0x3C, //2055
1213 0x0e,0xA5,0x4f, //2056
1214 0x06,0xB2,0x44, //2057
1215 0x4A,0xB6,0x38, //2058
1216 0x0A,0xAe,0x4C, //2059
1217 0x09,0x2e,0x42, //2060
1218 0x3C,0x97,0x35, //2061
1219 0x0C,0x96,0x49, //2062
1220 0x7d,0x4A,0xBd, //2063
1221 0x0d,0x4A,0x51, //2064
1222 0x0d,0xA5,0x45, //2065
1223 0x55,0xAA,0xBA, //2066
1224 0x05,0x6A,0x4e, //2067
1225 0x0A,0x6d,0x43, //2068
1226 0x45,0x2e,0xB7, //2069
1227 0x05,0x2d,0x4B, //2070
1228 0x8A,0x95,0xBf, //2071
1229 0x0A,0x95,0x53, //2072
1230 0x0B,0x4A,0x47, //2073
1231 0x6B,0x55,0x3B, //2074
1232 0x0A,0xd5,0x4f, //2075
1233 0x05,0x5A,0x45, //2076
C51 COMPILER V8.02 12864万年繽 11/15/2007 20:52:01 PAGE 21
1234 0x4A,0x5d,0x38, //2077
1235 0x0A,0x5B,0x4C, //2078
1236 0x05,0x2B,0x42, //2079
1237 0x3A,0x93,0xB6, //2080
1238 0x06,0x93,0x49, //2081
1239 0x77,0x29,0xBd, //2082
1240 0x06,0xAA,0x51, //2083
1241 0x0A,0xd5,0x46, //2084
1242 0x54,0xdA,0xBA, //2085
1243 0x04,0xB6,0x4e, //2086
1244 0x0A,0x57,0x43, //2087
1245 0x45,0x27,0x38, //2088
1246 0x0d,0x26,0x4A, //2089
1247 0x8e,0x93,0x3e, //2090
1248 0x0d,0x52,0x52, //2091
1249 0x0d,0xAA,0x47, //2092
1250 0x66,0xB5,0x3B, //2093
1251 0x05,0x6d,0x4f, //2094
1252 0x04,0xAe,0x45, //2095
1253 0x4A,0x4e,0xB9, //2096
1254 0x0A,0x4d,0x4C, //2097
1255 0x0d,0x15,0x41, //2098
1256 0x2d,0x92,0xB5, //2099
1257 };
1258 ///月份数据表
1259 code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
1260 code unsigned int day_code2[3]={0x111,0x130,0x14e};
1261
1262
1263
1264 /*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/
1265 bit get_moon_day(uchar month_p,unsigned int table_addr)
1266 {
1267 1 uchar temp;
1268 1 switch (month_p){
1269 2 case 1:{temp=year_code[table_addr]&0x08;
1270 3 if (temp==0)return(0);else return(1);}
1271 2 case 2:{temp=year_code[table_addr]&0x04;
1272 3 if (temp==0)return(0);else return(1);}
1273 2 case 3:{temp=year_code[table_addr]&0x02;
1274 3 if (temp==0)return(0);else return(1);}
1275 2 case 4:{temp=year_code[table_addr]&0x01;
1276 3 if (temp==0)return(0);else return(1);}
1277 2 case 5:{temp=year_code[table_addr+1]&0x80;
1278 3 if (temp==0) return(0);else return(1);}
1279 2 case 6:{temp=year_code[table_addr+1]&0x40;
1280 3 if (temp==0)return(0);else return(1);}
1281 2 case 7:{temp=year_code[table_addr+1]&0x20;
1282 3 if (temp==0)return(0);else return(1);}
1283 2 case 8:{temp=year_code[table_addr+1]&0x10;
1284 3 if (temp==0)return(0);else return(1);}
1285 2 case 9:{temp=year_code[table_addr+1]&0x08;
1286 3 if (temp==0)return(0);else return(1);}
1287 2 case 10:{temp=year_code[table_addr+1]&0x04;
1288 3 if (temp==0)return(0);else return(1);}
1289 2 case 11:{temp=year_code[table_addr+1]&0x02;
1290 3 if (temp==0)return(0);else return(1);}
1291 2 case 12:{temp=year_code[table_addr+1]&0x01;
1292 3 if (temp==0)return(0);else return(1);}
1293 2 case 13:{temp=year_code[table_addr+2]&0x80;
1294 3 if (temp==0)return(0);else return(1);}
1295 2 }
C51 COMPILER V8.02 12864万年繽 11/15/2007 20:52:01 PAGE 22
1296 1 }
1297
1298 /*************************************************************************************
1299 函数功能:输入阳历数据,输出阴历数据(只允许1901-2099年)
1300 调用函数示例:Conversion(c,year,month,day)
1301 如:计算2004年10月16日Conversion(0,0x4,0x0A,0x10);
1302 c,year,month,day均为16进制数据,c为世纪标志位,c_sun=0为21世纪,c_sun=1为20世纪
1303 调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历16进制数据。
1304 得出的16进制数据,会在后面的显示函数中有相应的处理。
1305 声明:本函数中的year,month,day均为局部变量,对全局变量不会有影响。
1306 *************************************************************************************/
1307 void Conversion(bit c,char year,char month,char day)
1308 { //c=0 为21世纪,c=1 为20世纪 输入输出数据均为BCD数据
1309 1 uchar temp1,temp2,temp3,month_p;
1310 1 unsigned int temp4,table_addr;
1311 1 bit flag2,flag_y;
1312 1
1313 1
1314 1 //定位数据表地址
1315 1 if(c==0) { table_addr=(year+0x64-1)*0x3; }
1316 1 else { table_addr=(year-1)*0x3; }
1317 1 //定位数据表地址完成
1318 1
1319 1 //取当年春节所在的公历月份
1320 1 temp1=year_code[table_addr+2]&0x60;
1321 1 temp1=_cror_(temp1,5);
1322 1 //取当年春节所在的公历月份完成
1323 1
1324 1 //取当年春节所在的公历日
1325 1 temp2=year_code[table_addr+2]&0x1f;
1326 1 //取当年春节所在的公历日完成
1327 1
1328 1 // 计算当年春年离当年元旦的天数,春节只会在公历1月或2月
1329 1 if(temp1==0x1) { temp3=temp2-1; }
1330 1 else { temp3=temp2+0x1f-1; }
1331 1 // 计算当年春年离当年元旦的天数完成
1332 1
1333 1 //计算公历日离当年元旦的天数,为了减少运算,用了两个表
1334 1 //day_code1[9],day_code2[3]
1335 1 //如果公历月在九月或前,天数会少于0xff,用表day_code1[9],
1336 1 //在九月后,天数大于0xff,用表day_code2[3]
1337 1 //如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1
1338 1 //如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1
1339 1 if (month<10){ temp4=day_code1[month-1]+day-1; }
1340 1 else { temp4=day_code2[month-10]+day-1;}
1341 1 if ((month>0x2)&&(year%0x4==0)&&(year!=0))
1342 1 temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
1343 1 //计算公历日离当年元旦的天数完成
1344 1
1345 1 //判断公历日在春节前还是春节后
1346 1 if (temp4>=temp3)
1347 1 { //公历日在春节后或就是春节当日使用下面代码进行运算
1348 2 temp4-=temp3;
1349 2 month=0x1;
1350 2 month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
1351 2 flag2=get_moon_day(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
1352 2 flag_y=0;
1353 2 if(flag2==0)temp1=0x1d; //小月29天
1354 2 else temp1=0x1e; //大小30天
1355 2 temp2=year_code[table_addr]&0xf0;
1356 2 temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月
1357 2 while(temp4>=temp1)
C51 COMPILER V8.02 12864万年繽 11/15/2007 20:52:01 PAGE 23
1358 2 {
1359 3 temp4-=temp1;
1360 3 month_p+=1;
1361 3 if(month==temp2)
1362 3 {
1363 4 flag_y=~flag_y;
1364 4 if(flag_y==0)month+=1;
1365 4 }
1366 3 else
1367 3 month+=1;
1368 3 flag2=get_moon_day(month_p,table_addr);
1369 3 if(flag2==0)temp1=0x1d;
1370 3 else temp1=0x1e;
1371 3 }
1372 2 day=temp4+1;
1373 2 }
1374 1 else
1375 1 { //公历日在春节前使
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -