⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1302+18b20+点阵屏.lst

📁 几年搜的LED显示屏程序大全20多个实例带仿真.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -