📄 1302+18b20+点阵屏.lst
字号:
434 调 用:RTInputByte() , RTOutputByte()
435 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
436 返 回 值:无
437 ***********************************************************************/
438 void W1302(uchar ucAddr, uchar ucDa)
439 {
440 1 T_RST = 0;
441 1 T_CLK = 0;
442 1 T_RST = 1;
443 1 RTInputByte(ucAddr); /* 地址,命令 */
444 1 RTInputByte(ucDa); /* 写1Byte数据*/
445 1 T_CLK = 1;
446 1 T_RST = 0;
447 1 }
448 /********************************************************************
449 函 数 名:R1302()
450 功 能:读取DS1302某地址的数据
451 说 明:先写地址,后读命令/数据 (内部函数)
452 调 用:RTInputByte() , RTOutputByte()
453 入口参数:ucAddr: DS1302地址
454 返 回 值:ucData :读取的数据
455 ***********************************************************************/
456 uchar R1302(uchar ucAddr)
457 {
458 1 uchar ucData;
459 1 T_RST = 0;
460 1 T_CLK = 0;
461 1 T_RST = 1;
462 1 RTInputByte(ucAddr); /* 地址,命令 */
463 1 ucData = RTOutputByte(); /* 读1Byte数据 */
464 1 T_CLK = 1;
465 1 T_RST = 0;
466 1 return(ucData);
467 1 }
468
469 /********************************************************************
470 函 数 名:Set1302()
471 功 能:设置初始时间
472 说 明:先写地址,后读命令/数据(寄存器多字节方式)
473 调 用:W1302()
474 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
475 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
476 返 回 值:无
477 ***********************************************************************/
478 void Set1302(uchar *pClock)
479 {
480 1 uchar h;
481 1 uchar ucAddr = 0x80;
482 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
483 1 for(h =7; h>0; h--)
C51 COMPILER V8.05a 1302_18B20_点阵屏 05/24/2009 12:02:11 PAGE 9
484 1 {
485 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
486 2 pClock++;
487 2 ucAddr +=2;
488 2 }
489 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
490 1
491 1 }
492
493 /* 延时t毫秒 */
494 void delay(uint t)
495 {
496 1 uint i;
497 1 while(t--)
498 1 {
499 2 /* 对于11.0592M时钟,约延时1ms */
500 2 for (i=0;i<125;i++);
501 2 }
502 1 }
503 void TxReset(void) /* 产生复位脉冲初始化DS18B20 */
504 {
505 1 uint i;
506 1 DQ = 0;
507 1 i = 95; /* 拉低约900us */
508 1 while (i>0) i--;
509 1 DQ = 1; // 产生上升沿
510 1 i = 5;
511 1 while (i>0) i--;
512 1 }
513
514 /* 等待应答脉冲 */
515 void RxWait(void)
516 {
517 1 uint i;
518 1 while(DQ);
519 1 while(~DQ); // 检测到应答脉冲
520 1 i = 4;
521 1 while (i>0) i--;
522 1 }
523
524 /* 读取数据的一位,满足读时隙要求 */
525 bit RdBit(void) //只读1
526 {
527 1 uchar i;
528 1 DQ=0;
529 1 DQ=1;
530 1 for(i=0;i<3;i++);
531 1 return (DQ);
532 1 }
533
534 /* 读取数据的一个字节 */
535 uchar RdByte(void)
536 {
537 1 uchar i,j,b;
538 1 b = 0;
539 1 for (i=1;i<=8;i++)
540 1 {
541 2 j = RdBit();
542 2 b = (j<<7)|(b>>1);
543 2 }
544 1 return(b);
545 1 }
C51 COMPILER V8.05a 1302_18B20_点阵屏 05/24/2009 12:02:11 PAGE 10
546
547 /* 写数据的一个字节,满足写1和写0的时隙要求 */
548 void WrByte(uchar b)
549 {
550 1 uint i;
551 1 uchar j;
552 1 bit btmp;
553 1 for(j=1;j<=8;j++)
554 1 {
555 2 btmp = b&0x01;
556 2 b = b>>1; // 取下一位(由低位向高位)
557 2 if (btmp)
558 2 {
559 3 /* 写1 */
560 3 DQ = 0;
561 3 _nop_();
562 3 _nop_(); // 延时,使得15us以内拉高
563 3 DQ = 1;
564 3 i = 6;
565 3 while(i>0) i--; // 整个写1时隙不低于60us
566 3 }
567 2 else
568 2 {
569 3 /* 写0 */
570 3 DQ = 0;
571 3 i = 8;
572 3 while(i>0) i--; // 保持低在60us到120us之间
573 3 DQ = 1;
574 3 _nop_();
575 3 _nop_();
576 3 _nop_();
577 3 }
578 2 }
579 1 }
580
581 /* 启动温度转换 */
582 void convert(void)
583 {
584 1 TxReset(); // 产生复位脉冲,初始化DS18B20
585 1 RxWait(); // 等待DS18B20给出应答脉冲
586 1 delay(1); // 延时
587 1 WrByte(0xcc); // skip rom 命令
588 1 WrByte(0x44); // convert T 命令
589 1 }
590
591 /* 读取温度值 */
592 void RdTemp(void)
593 {
594 1 TxReset(); // 产生复位脉冲,初始化DS18B20
595 1 RxWait(); // 等待DS18B20给出应答脉冲
596 1 delay(1); // 延时
597 1 WrByte(0xcc); // skip rom 命令
598 1 WrByte(0xbe); // read scratchpad 命令
599 1 tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)
600 1 tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位)
601 1 wendu=(tplsb+tpmsb*256)*0.0625;
602 1 temp=wendu;
603 1 }
604 /*******************************************************/
605 uchar code hanzi0[67][32]={
606 /*-- 文字: 00 --*/
607 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
C51 COMPILER V8.05a 1302_18B20_点阵屏 05/24/2009 12:02:11 PAGE 11
608 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x42,0x42,0x42,0x42,0x42,0x42,
609 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,0x00,0x00,
610
611 /*-- 文字: 01 --*/
612 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
613 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x24,0x0E,0x42,0x08,0x42,0x08,0x42,0x08,
614 0x42,0x08,0x42,0x08,0x42,0x08,0x42,0x08,0x24,0x08,0x18,0x3E,0x00,0x00,0x00,0x00,
615
616 /*-- 文字: 02 --*/
617 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
618 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x20,
619 0x42,0x20,0x42,0x10,0x42,0x08,0x42,0x04,0x24,0x42,0x18,0x7E,0x00,0x00,0x00,0x00,
620
621 /*-- 文字: 03 --*/
622 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
623 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x24,0x42,0x42,0x42,0x42,0x20,0x42,0x18,
624 0x42,0x20,0x42,0x40,0x42,0x40,0x42,0x42,0x24,0x22,0x18,0x1C,0x00,0x00,0x00,0x00,
625
626 /*-- 文字: 04 --*/
627 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
628 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x30,0x42,0x28,0x42,0x24,0x42,0x24,
629 0x42,0x22,0x42,0x22,0x42,0x7E,0x42,0x20,0x24,0x20,0x18,0x78,0x00,0x00,0x00,0x00,
630
631 /*-- 文字: 05 --*/
632 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
633 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x7E,0x24,0x02,0x42,0x02,0x42,0x02,0x42,0x1A,
634 0x42,0x26,0x42,0x40,0x42,0x40,0x42,0x42,0x24,0x22,0x18,0x1C,0x00,0x00,0x00,0x00,
635
636 /*-- 文字: 06 --*/
637 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
638 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x24,0x24,0x42,0x02,0x42,0x02,0x42,0x1A,
639 0x42,0x26,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,0x00,0x00,
640
641 /*-- 文字: 07 --*/
642 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
643 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x7E,0x24,0x22,0x42,0x22,0x42,0x10,0x42,0x10,
644 0x42,0x08,0x42,0x08,0x42,0x08,0x42,0x08,0x24,0x08,0x18,0x08,0x00,0x00,0x00,0x00,
645
646 /*-- 文字: 08 --*/
647 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
648 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x24,
649 0x42,0x18,0x42,0x24,0x42,0x42,0x42,0x42,0x24,0x42,0x18,0x3C,0x00,0x00,0x00,0x00,
650
651 /*-- 文字: 09 --*/
652 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
653 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x42,0x42,0x42,0x42,0x42,0x42,
654 0x42,0x64,0x42,0x58,0x42,0x40,0x42,0x40,0x24,0x24,0x18,0x1C,0x00,0x00,0x00,0x00,
655
656 /*-- 文字: 10 --*/
657 /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
658 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x0E,0x24,0x08,0x42,0x08,0x42,0x08,0x42,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -