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

📄 p87lpc764+万能遥控调光调速器.lst

📁 P87LPC764+万能遥控调光调速器.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 516   2      ON=0; /*禁止可控硅*/ 
 517   2      IsStudy=1; /*设置红外学习标志*/ 
 518   2      StudyOK=0; 
 519   2      i=20; /*设置10s 学习时间*/ 
 520   2      while(!StudyOK){/*等待学习完成,Led 闪烁*/ 
 521   3      Led=~Led; 
 522   3      Delay(500);
 523   3      
 524   3      
 525   3      if(i--==0) goto NoSt; 
 526   3      } 
 527   2      /*学习成功*/ 
 528   2      Led=1; 
 529   2      Delay(100); 
 530   2      Led=0; 
 531   2      Delay(100); 
 532   2      Led=1; 
 533   2      Delay(100); 
 534   2      NoSt: 
 535   2      Led=0; 
 536   2      IsStudy=0;/*进入接收状态*/ 
 537   2      StudyOK=0; 
 538   2      break; /*红外学习*/ 
 539   2      default: 
 540   2      break; 
 541   2      } 
 542   1      FuncCode=0; 
 543   1      FuncSet=0; /*清除功能设置标志*/ 
 544   1      }
 545          void Write_FireAngle() 
 546          { 
 547   1      Buf1[0]=Fire_Angle%256; 
 548   1      Buf1[1]=Fire_Angle/256; 
 549   1      WriteEE(128,2,Buf1); 
 550   1      }
 551          void Read_Last_FireAngle(void) 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 10  

 552          { 
 553   1      ReadEE(128,2,Buf1); 
 554   1      Last_FireAngle=Buf1[0]+Buf1[1]*256; 
 555   1      }
 556          void Write_MaxFireAngle() 
 557          { 
 558   1      Buf1[0]=MaxFireAngle%256; 
 559   1      Buf1[1]=MaxFireAngle/256; 
 560   1      WriteEE(136,2,Buf1); 
 561   1      }
 562          void Read_MaxFireAngle(void) 
 563          { 
 564   1      ReadEE(136,2,Buf1);
 565   1      
 566   1      MaxFireAngle=Buf1[0]+Buf1[1]*256; 
 567   1      }
 568          void WDFeed() /*清看门狗*/ 
 569          { 
 570   1      WDRST=0X1E; 
 571   1      WDRST=0XE1; 
 572   1      }
 573          /*三次过零的时间间隔除于2 即为半周期时间值*/ 
 574          void Calc_MaxFireAngle() 
 575          { 
 576   1      while((CMP1 & 1)==0); /*等待过零*/ 
 577   1      CMP1 &= 0xFE; /*清比较器中断标志*/ 
 578   1      TR0=1; /*启动定时器*/ 
 579   1      while((CMP1 & 1)==0); /*等待过零*/ 
 580   1      CMP1 &= 0xFE; /*清比较器中断标志*/ 
 581   1      while((CMP1 & 1)==0); /*等待过零*/ 
 582   1      CMP1 &= 0xFE; /*清比较器中断标志*/ 
 583   1      TR0=0; /*关闭定时器*/ 
 584   1      MaxFireAngle=(TH0*256+TL0)/2; 
 585   1      }
 586          /*测量低电平宽度*/ 
 587          unsigned char Get_L_Width() 
 588          { 
 589   1      TH1=TL1=0; 
 590   1      TR1=1; /*启动定时器*/ 
 591   1      while(INT1!=1); 
 592   1      TR1=0; 
 593   1      TL1=(TH1*256+TL1 )/250; 
 594   1      return(TL1/2); 
 595   1      }
 596          /*测量高电平宽度*/ 
 597          unsigned char Get_H_Width() 
 598          { 
 599   1      TF1=0; 
 600   1      TH1=TL1=0; 
 601   1      TR1=1; /*启动定时器*/ 
 602   1      while(INT1!=0){ 
 603   2      if(TH1>0X20) return(255);/*脉宽约为16ms*/ 
 604   2      /*if(TF1==1) return(255);*/ 
 605   2      }
 606   1      
 607   1      
 608   1      TR1=0; 
 609   1      TL1=(TH1*256+TL1 )/250; 
 610   1      return(TL1/2); 
 611   1      }
 612          /*页写存储器,Num<=8*/ 
 613          int WriteEE(unsigned char SubAdr,unsigned char Num,unsigned char *Wbuf) 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 11  

 614          { 
 615   1      unsigned char data i; 
 616   1      Start(); /*发送I2C 总线起始条件*/ 
 617   1      if(SendByte(0xa0)!=0) return -1; /* 发送被控器总线地址*/ 
 618   1      if(SendByte(SubAdr)!=0) return -1; /*发送写的地址*/ 
 619   1      for(i=0;i<Num;i++) /*重复操作直到发送完最后一个数据*/ 
 620   1      if(SendByte(*(Wbuf+i))!=0) return -1; 
 621   1      Stop(); /*发送I2C 总线停止条件*/ 
 622   1      Delay(10); /*延时10ms,等待数据写完*/ 
 623   1      return 0; 
 624   1      }
 625          /*读多个字节数据 */ 
 626          int ReadEE(unsigned char SubAdr,unsigned char Num,unsigned char *Rbuf) 
 627          { 
 628   1      unsigned char data i; 
 629   1      Start(); /* 发送I2C 总线起始条件*/ 
 630   1      if(SendByte(0xa0)!=0) return -1;/*发送被控器总线写地址*/ 
 631   1      if(SendByte(SubAdr)!=0) return -1; /*发送读首地址*/ 
 632   1      Start(); /*发送I2C 总线重复起始条件*/ 
 633   1      if(SendByte(0xa1)!=0) return(-1); /*发送被控器总线读地址*/ 
 634   1              if(Num!=1)
 635   1                      {for(i=0;i<Num-1;i++) *(Rbuf+i)=ReadByte(); 
 636   2                      SendACK(); /*发送应答信号*/ 
 637   2                       
 638   2              *(Rbuf+Num-1)=ReadByte(); 
 639   2              } 
 640   1      else 
 641   1      *Rbuf=ReadByte(); 
 642   1      SendNoACK(); /*最后一个字节,发送非应答信号*/ 
 643   1      Stop(); /*发送I2C 总线停止条件*/ 
 644   1      return(0); 
 645   1      } 
 646          /*字节数据传送子程序发送一个字节数据或地址给被控器*/ 
 647          int SendByte(unsigned char a)
 648          { 
 649   1      unsigned char data i,j; 
 650   1      unsigned char bdata Sin; 
 651   1      Sin=a; 
 652   1      for(i=0;i<8;i++) 
 653   1      { 
 654   2      if((Sin & 0x80)==0) 
 655   2      SDA=0; 
 656   2      else 
 657   2      SDA=1; 
 658   2      for(j=0;j<2;j++); 
 659   2      SCL=1; /*置时钟线为高通知被控器开始*/ 
 660   2      for(j=0;j<4;j++);/*保证时钟高周期大于4 s*/ 
 661   2      SCL=0; 
 662   2      Sin=Sin<<1; 
 663   2      }
 664   1      for(j=0;j<2;j++); 
 665   1      SDA=1; 
 666   1      for(j=0;j<2;j++); 
 667   1      SCL=1; 
 668   1      for(j=0;j<2;j++); 
 669   1      if (SDA==0) {SCL=0;return 0;} /*成功,返回0*/ 
 670   1      for(j=0;j<1;j++); 
 671   1      SCL=0; 
 672   1      return -1; /*未收到应答,返回-1*/ 
 673   1      }
 674          /*数据接收子程序从被控器接收一个字节数据*/ 
 675          unsigned char ReadByte() 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 12  

 676          { 
 677   1      unsigned char data i,j; 
 678   1      unsigned char bdata Sin; 
 679   1      SDA=1; 
 680   1      for (i=0;i<7;i++) 
 681   1      { 
 682   2      SCL=0; 
 683   2      for(j=0;j<2;j++); 
 684   2      SCL=1; 
 685   2      if(SDA==1) 
 686   2      Sin|=0x01; 
 687   2      else 
 688   2      Sin&=0xfe; 
 689   2      for(j=0;j<2;j++);
 690   2      Sin<<=1; 
 691   2      } 
 692   1      SCL=0; 
 693   1      for(j=0;j<2;j++); 
 694   1      SCL=1; 
 695   1      if(SDA==1) 
 696   1      Sin|=0x01; 
 697   1      else 
 698   1      Sin&=0xfe; 
 699   1      for(j=0;j<2;j++); 
 700   1      return(Sin); 
 701   1      }
 702          /*发送应答位*/ 
 703          void SendACK() 
 704          { 
 705   1      unsigned char data j; 
 706   1      SCL=0; 
 707   1      for(j=0;j<2;j++); 
 708   1      SDA=0; 
 709   1      for(j=0;j<2;j++); 
 710   1      SCL=1; 
 711   1      for(j=0;j<4;j++); 
 712   1      SCL=0; 
 713   1      }
 714          /*发送非应答位*/ 
 715          void SendNoACK() 
 716          { 
 717   1      unsigned char data j; 
 718   1      SCL=0; 
 719   1      for(j=0;j<2;j++); 
 720   1      SDA=1; 
 721   1      for(j=0;j<2;j++); 
 722   1      SCL=1; 
 723   1      for(j=0;j<4;j++); 
 724   1      SCL=0; 
 725   1      }
 726          /*START 启动I2C 总线子程序发送I2C 起始条件*/ 
 727          void Start(void) 
 728          { 
 729   1      unsigned char data i;
 730   1      SDA=1; /* 发送起始条件的数据信号*/ 
 731   1      for (i=0;i<2;i++); 
 732   1      SCL=1; /*发送起始条件的时钟信号*/ 
 733   1      for(i=0;i<4;i++) ; /*起始条件建立时间大于4.7 s*/ 
 734   1      SDA=0; /*发送起始信号*/ 
 735   1      for(i=0;i<4;i++); /*起始条件锁定时间大于4 s*/ 
 736   1      SCL=0; /*钳住I2C 总线准备发送或接收数据*/ 
 737   1      }
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 13  

 738          /*STOP 停止I2C 总线子程序发送I2C 总线停止条件*/ 
 739          void Stop(void) 
 740          { 
 741   1      unsigned char data i; 
 742   1      SDA=0; 
 743   1      for(i=0;i<2;i++) ; 
 744   1      SCL=1; 
 745   1      for(i=0;i<4;i++) 
 746   1      SDA=1; 
 747   1      for(i=0;i<4;i++); 
 748   1      }
 749          /*一次延时1ms*/ 
 750          void Delay(unsigned int x) 
 751          { 
 752   1      unsigned char j; 
 753   1      while(x--){ 
 754   2      WDRST=0X1E; /*清看门狗*/ 
 755   2      WDRST=0XE1; 
 756   2      for(j=0;j<120;j++); 
 757   2      } 
 758   1      }
 759          
 760          
 761          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2326    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     76      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -