📄 main.lst
字号:
249 2 case 6: d=0Xbe;break;
250 2 case 7: d=0Xe0;break;
251 2 case 8: d=0Xfe;break;
252 2 case 9: d=0Xf6;break;
253 2 }
254 1 return(d);
255 1
256 1 }
257
258
259
260 writetime1(uchar ucTime[],uchar flag)
261 {
262 1
263 1 /*
264 1 h0=changdata(ucTime[1]>>4);
265 1 h1=changdata(ucTime[1]&0xF);
266 1 m0=changdata(ucTime[0]>>4);
267 1 m1=changdata(ucTime[0]&0xF);
268 1 */
269 1 //*
270 1 m0=changdata(ucTime[1]>>4);
271 1 m1=changdata(ucTime[1]&0xF);
272 1 h0=changdata(ucTime[2]>>4);
273 1 h1=changdata(ucTime[2]&0xF);
274 1 //*/
275 1
276 1 if(ucTime[0]&0x01)
277 1 h1=h1+flag;
278 1 }
279
280
281 writetime2( )
282 {
283 1 // WriteIO(0X6000,0X00);
284 1 //P1_7=0;
285 1 show++;
286 1
287 1 //if( show >= 16 )
288 1 // show = 0;
289 1 P1_7=1;
290 1
291 1 //if( show & 0x03 == 0 )
292 1 //WriteIO(0X6000,0X00);
293 1
294 1
295 1 //if((show>>2) == 0)
296 1 if( show == 1 )
297 1 {
298 2 WriteIO(0X6000,0X00);
299 2
300 2 P1_0=0;
301 2 P1_1=0;
302 2
303 2 WriteIO(0X6000,h0);
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 6
304 2
305 2 }
306 1
307 1 //else if((show>>2) == 1)
308 1 else if( show == 2 )
309 1 {
310 2 WriteIO(0X6000,0X00);
311 2
312 2 P1_0=1;
313 2 P1_1=0;
314 2
315 2 WriteIO(0X6000,h1);
316 2
317 2 }
318 1
319 1 //else if((show>>2) == 2)
320 1 else if( show == 3 )
321 1 {
322 2 WriteIO(0X6000,0X00);
323 2
324 2 P1_0=0;
325 2 P1_1=1;
326 2
327 2 WriteIO(0X6000,m0);
328 2
329 2 }
330 1 //else if( (show>>2) == 3 )
331 1 else if( show == 4 )
332 1 {
333 2 WriteIO(0X6000,0X00);
334 2
335 2 P1_0=1;
336 2 P1_1=1;
337 2
338 2 WriteIO(0X6000,m1);
339 2 show = 0;
340 2
341 2 }
342 1
343 1 //WriteIO(0X6000,0X00);
344 1 P1_7=0;
345 1
346 1 }
347
348
349 /********************************************************************
350 *
351 * 名称: v_RTInputByte
352 * 说明:
353 * 功能: 往DS1302写入1Byte数据
354 * 调用:
355 * 输入: ucDa 写入的数据
356 * 返回值: 无
357 ***********************************************************************/
358 void v_RTInputByte(uchar ucDa)
359 {
360 1 uchar i;
361 1 ACC = ucDa;
362 1 for(i=8; i>0; i--)
363 1 {
364 2 T_IO = ACC0; /*相当于汇编中的 RRC */
365 2 T_CLK = 1;
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 7
366 2 T_CLK = 0;
367 2 ACC = ACC >> 1;
368 2 }
369 1 }
370 /********************************************************************
371 *
372 * 名称: uchar uc_RTOutputByte
373 * 说明:
374 * 功能: 从DS1302读取1Byte数据
375 * 调用:
376 * 输入:
377 * 返回值: ACC
378 ***********************************************************************/
379 uchar uc_RTOutputByte(void)
380 {
381 1 uchar i;
382 1 for(i=8; i>0; i--)
383 1 {
384 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
385 2 ACC7 = T_IO;
386 2 T_CLK = 1;
387 2 T_CLK = 0;
388 2 }
389 1 return(ACC);
390 1 }
391 /********************************************************************
392 *
393 * 名称: v_W1302
394 * 说明: 先写地址,后写命令/数据
395 * 功能: 往DS1302写入数据
396 * 调用: v_RTInputByte()
397 * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
398 * 返回值: 无
399 ***********************************************************************/
400 void v_W1302(uchar ucAddr, uchar ucDa)
401 {
402 1 T_RST = 0;
403 1 T_CLK = 0;
404 1 T_RST = 1;
405 1 v_RTInputByte(ucAddr); /* 地址,命令 */
406 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
407 1 T_CLK = 1;
408 1 T_RST =0;
409 1 }
410 /********************************************************************
411 *
412 * 名称: uc_R1302
413 * 说明: 先写地址,后读命令/数据
414 * 功能: 读取DS1302某地址的数据
415 * 调用: v_RTInputByte() , uc_RTOutputByte()
416 * 输入: ucAddr: DS1302地址
417 * 返回值: ucDa :读取的数据
418 ***********************************************************************/
419 uchar uc_R1302(uchar ucAddr)
420 {
421 1 uchar ucDa;
422 1 T_RST = 0;
423 1 T_CLK = 0;
424 1 T_RST = 1;
425 1 v_RTInputByte(ucAddr); /* 地址,命令 */
426 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
427 1 T_CLK = 1;
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 8
428 1 T_RST =0;
429 1 return(ucDa);
430 1 }
431
432
433 /********************************************************************
434 *
435 * 名称: v_Set1302
436 * 说明:
437 * 功能: 设置初始时间
438 * 调用: v_W1302()
439 * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
440 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
441 * 返回值: 无
442 ***********************************************************************/
443 void v_Set1302(uchar *pSecDa)
444 {
445 1 uchar i;
446 1 uchar ucAddr = 0x80;
447 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
448 1 for(i =7;i>0;i--)
449 1 {
450 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
451 2
452 2 pSecDa++;
453 2 ucAddr +=2;
454 2 }
455 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
456 1 }
457
458
459 /********************************************************************
460 *
461 * 名称: v_Get1302
462 * 说明:
463 * 功能: 读取DS1302当前时间
464 * 调用: uc_R1302()
465 * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
466 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
467 * 返回值: 无
468 ***********************************************************************/
469 void v_Get1302(uchar ucCurtime[])
470 {
471 1 uchar i;
472 1 uchar ucAddr = 0x81;
473 1 for (i=0;i<7;i++)
474 1 {
475 2 ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
476 2 ucAddr += 2;
477 2 }
478 1 }
479
480 void Set_ReadAddress(uchar pSecDa[])
481 {
482 1 uchar i;
483 1
484 1 uchar ucAddr = 0xC0; //写在时钟RAM的头部
485 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
486 1 for(i = 0;i<4;i++)
487 1 {
488 2 v_W1302(ucAddr,pSecDa[i]);
489 2 ucAddr +=2;
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 9
490 2 }
491 1
492 1 ucAddr = 0xEE; //写在时钟RAM的尾部
493 1 for( i = 0 ; i < 4 ; i ++ )
494 1 {
495 2 v_W1302(ucAddr,pSecDa[i]);
496 2 ucAddr +=2;
497 2 }
498 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
499 1 }
500
501 void Get_ReadAddress(uchar pSecDa[] )
502 {
503 1 uchar i;
504 1 uchar Temp;
505 1 uchar ucAddr = 0xC1; //读取时钟RAM的头部
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -