📄 main.lst
字号:
220 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
221 1 Nop();
222 1 T_RST = 0;
223 1 Nop();
224 1 T_CLK = 0;
225 1 Nop();
226 1 T_RST = 1;
227 1 Nop();
228 1 RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
229 1 Nop();
230 1 for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
231 1 {
232 2 Nop();
233 2 RTInputByte(*pWReg); /* 写1Byte数据*/
234 2 Nop();
235 2 pWReg++;
236 2 Nop();
237 2 }
238 1 T_CLK = 1;
239 1 Nop();
240 1 T_RST = 0;
241 1 }
C51 COMPILER V8.05a MAIN 04/18/2007 21:34:58 PAGE 5
242 /********************************************************************
243
244
245 ***********************************************************************/
246 void BurstR1302R(unsigned char *pRReg)
247 {
248 1 unsigned char i;
249 1 T_RST = 0;
250 1 Nop();
251 1 T_CLK = 0;
252 1 Nop();
253 1 T_RST = 1;
254 1 Nop();
255 1 RTInputByte(0xff); /* 0xff:时钟多字节读命令 */
256 1 Nop();
257 1 for (i=31; i>0; i--) /*31Byte 寄存器数据 */
258 1 {
259 2 Nop();
260 2 *pRReg = RTOutputByte(); /* 读1Byte数据 */
261 2 Nop();
262 2 pRReg++;
263 2 Nop();
264 2 }
265 1 T_CLK = 1;
266 1 Nop();
267 1 T_RST = 0;
268 1 }
269 /********************************************************************
270
271
272 ***********************************************************************/
273 void Set1302(unsigned char *pClock)
274 {
275 1 unsigned char i;
276 1 unsigned char ucAddr = 0x80;
277 1 /**转换为bcd码*****/
278 1 for(i = 0;i <7;i++)
279 1 {
280 2 pClock[i] = (((pClock[i]/10) << 4) | (pClock[i]%10));
281 2 }
282 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
283 1 Nop();
284 1 for(i =7; i>0; i--)
285 1 {
286 2 Nop();
287 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
288 2 Nop();
289 2 pClock++;
290 2 ucAddr +=2;
291 2 }
292 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
293 1 }
294 /********************************************************************
295
296 ***********************************************************************/
297 void Get1302(unsigned char *ucCurtime)
298 {
299 1 unsigned char i;
300 1 unsigned char ucAddr = 0x81;
301 1 for (i=0; i<7; i++)
302 1 {
303 2 ucCurtime[i] = R1302(ucAddr); //*格式为: 秒 分 时 日 月 星期 年 */
C51 COMPILER V8.05a MAIN 04/18/2007 21:34:58 PAGE 6
304 2 ucCurtime[i]=(ucCurtime[i]>>4)*10+(ucCurtime[i]&0x0f); //转换
305 2 ucAddr += 2;
306 2 }
307 1 }
308
309 /////初始化 DS1302
310 void initialize_DS1302(void)
311 {
312 1 T_CLK=0;
313 1 T_RST=0;
314 1 W1302(0x8e,0x00);
315 1 W1302(0x90,0x00); //////////
316 1 }
317 void solution_time(void)
318 {
319 1 Get1302(b) ;
320 1 SEC=b[0]; //miao
321 1 MIN=b[1]; //fen
322 1 HOUR=b[2]; //shi
323 1 DAY=b[3]; //日期
324 1 MONTH=b[4];
325 1 WEEKDAY=b[5]; //月
326 1 YEAR=b[6]; //年
327 1 }
328 /*****************************************************************************
329 公历年对应的农历数据,每年三字节,
330 格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小
331 第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小
332 月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天)
333 第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期
334 *****************************************************************************/
335 unsigned char code year_code[]={
336 0x09,0x2e,0x50, //1999
337 0x0C,0x96,0x45, //2000
338 0x4d,0x4A,0xB8, //2001
339 0x0d,0x4A,0x4C, //2002
340 0x0d,0xA5,0x41, //2003
341 0x25,0xAA,0xB6, //2004
342 0x05,0x6A,0x49, //2005
343 0x7A,0xAd,0xBd, //2006
344 0x02,0x5d,0x52, //2007
345 0x09,0x2d,0x47, //2008
346 0x5C,0x95,0xBA, //2009
347 0x0A,0x95,0x4e, //2010
348 0x0B,0x4A,0x43, //2011
349 0x4B,0x55,0x37, //2012
350 0x0A,0xd5,0x4A, //2013
351 0x95,0x5A,0xBf, //2014
352 0x04,0xBA,0x53, //2015
353 0x0A,0x5B,0x48, //2016
354 0x65,0x2B,0xBC, //2017
355 0x05,0x2B,0x50, //2018
356 0x0A,0x93,0x45, //2019
357 0x47,0x4A,0xB9, //2020
358 0x06,0xAA,0x4C, //2021
359 0x0A,0xd5,0x41, //2022
360 0x24,0xdA,0xB6, //2023
361 0x04,0xB6,0x4A, //2024
362 0x69,0x57,0x3d, //2025
363 0x0A,0x4e,0x51, //2026
364 0x0d,0x26,0x46, //2027
365 0x5e,0x93,0x3A, //2028
C51 COMPILER V8.05a MAIN 04/18/2007 21:34:58 PAGE 7
366 0x0d,0x53,0x4d, //2029
367 0x05,0xAA,0x43, //2030
368 0x36,0xB5,0x37, //2031
369 0x09,0x6d,0x4B, //2032
370 0xB4,0xAe,0xBf, //2033
371 0x04,0xAd,0x53, //2034
372 0x0A,0x4d,0x48, //2035
373 0x6d,0x25,0xBC, //2036
374 0x0d,0x25,0x4f, //2037
375 0x0d,0x52,0x44, //2038
376 0x5d,0xAA,0x38, //2039
377 0x0B,0x5A,0x4C, //2040
378 0x05,0x6d,0x41, //2041
379 0x24,0xAd,0xB6, //2042
380 0x04,0x9B,0x4A, //2043
381 0x7A,0x4B,0xBe, //2044
382 0x0A,0x4B,0x51, //2045
383 0x0A,0xA5,0x46, //2046
384 0x5B,0x52,0xBA, //2047
385 0x06,0xd2,0x4e, //2048
386 0x0A,0xdA,0x42, //2049
387 0x35,0x5B,0x37, //2050
388 0x09,0x37,0x4B, //2051
389 0x84,0x97,0xC1, //2052
390 0x04,0x97,0x53, //2053
391 0x06,0x4B,0x48, //2054
392 0x66,0xA5,0x3C, //2055
393 0x0e,0xA5,0x4f, //2056
394 0x06,0xB2,0x44, //2057
395 0x4A,0xB6,0x38, //2058
396 0x0A,0xAe,0x4C, //2059
397 0x09,0x2e,0x42, //2060
398 0x3C,0x97,0x35, //2061
399 0x0C,0x96,0x49, //2062
400 0x7d,0x4A,0xBd, //2063
401 0x0d,0x4A,0x51, //2064
402 0x0d,0xA5,0x45, //2065
403 0x55,0xAA,0xBA, //2066
404 0x05,0x6A,0x4e, //2067
405 0x0A,0x6d,0x43, //2068
406 0x45,0x2e,0xB7, //2069
407 0x05,0x2d,0x4B, //2070
408 0x8A,0x95,0xBf, //2071
409 0x0A,0x95,0x53, //2072
410 0x0B,0x4A,0x47, //2073
411 0x6B,0x55,0x3B, //2074
412 0x0A,0xd5,0x4f, //2075
413 0x05,0x5A,0x45, //2076
414 0x4A,0x5d,0x38, //2077
415 0x0A,0x5B,0x4C, //2078
416 0x05,0x2B,0x42, //2079
417 0x3A,0x93,0xB6, //2080
418 0x06,0x93,0x49, //2081
419 0x77,0x29,0xBd, //2082
420 0x06,0xAA,0x51, //2083
421 0x0A,0xd5,0x46, //2084
422 0x54,0xdA,0xBA, //2085
423 0x04,0xB6,0x4e, //2086
424 0x0A,0x57,0x43, //2087
425 0x45,0x27,0x38, //2088
426 0x0d,0x26,0x4A, //2089
427 0x8e,0x93,0x3e, //2090
C51 COMPILER V8.05a MAIN 04/18/2007 21:34:58 PAGE 8
428 0x0d,0x52,0x52, //2091
429 0x0d,0xAA,0x47, //2092
430 0x66,0xB5,0x3B, //2093
431 0x05,0x6d,0x4f, //2094
432 0x04,0xAe,0x45, //2095
433 0x4A,0x4e,0xB9, //2096
434 0x0A,0x4d,0x4C, //2097
435 0x0d,0x15,0x41, //2098
436 0x2d,0x92,0xB5 //2099
437 };
438 unsigned int code day_code[]={
439 0x0000,0x001f,0x003b,0x005a,0x0078,0x0097,//月份数据表
440 0x00b5,0x00d4,0x00f3,0x0111,0x0130,0x014e
441 };
442 /****************************************************************************
443 返回月大小
444 ****************************************************************************/
445 bit get_lunar_day(unsigned char month_p,unsigned int table_addr)//子函数,用于读取数据表中农历月的大月或
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -