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

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

📁 P87LPC764+万能遥控调光调速器.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 254   2      if(Key==0){ 
 255   3      KeyDown=1; /*键已按下*/ 
 256   3      AGE++; /*按键年龄增长*/ 
 257   3      if(NO_R_SW){ /*不是遥控开关,才能设置为持续方式*/ 
 258   4      if(AGE>=30){ 
 259   5      CONTI=1; 
 260   5      goto retu; 
 261   5      }/*按下按键超过0.3s,为持续方式*/ 
 262   4      }
 263   3      else{/*开关模式下,按下2.5s 进行红外学习*/ 
 264   4      if(AGE==50) SwStyTime++; 
 265   4      if(SwStyTime==6){ 
 266   5      SwStyTime=0; 
 267   5      CONTI=1; 
 268   5      DownTimes=2; 
 269   5      IKCLK=120; 
 270   5      goto retu; 
 271   5      } 
 272   4      } 
 273   3      }
 274   2      else{
 275   3      if(KeyDown==1 && AGE>=3 && AGE<=30){ 
 276   4      DownTimes++; 
 277   4      if(!NO_R_SW) IKCLK=120; /*是遥控开关,立即执行功能*/ 
 278   4      } 
 279   3      KeyDown=0; /*键已释放*/ 
 280   3      AGE=0; /*按键弹起时,清除年龄*/ 
 281   3      SwStyTime=0;
 282   3      CONTI=0; /*清除持续标志*/ 
 283   3      } 
 284   2      }
 285   1      if(Key==1) CONTI=0; /*键已释放,清除持续标志*/ 
 286   1      retu:; 
 287   1      }
 288          /*主程序*/ 
 289          main() 
 290          { 
 291   1      WDFeed(); /*清看门狗*/ 
 292   1      WDCON=0X16; /*设置看门狗*/ 
 293   1      /*初始化比较器,用于过零检测,Vref=5V*/ 
 294   1      CMP1 &= 0xFE; /*清比较器中断标志*/ 
 295   1      PT0AD=0X30; /* 禁止CN1A,CMPREF 作为数字输入口 */ 
 296   1      P0M2 &= 0XCF; /* 禁止CN1A,CMPREF 作为数字输出口*/ 
 297   1      P0M1 |= 0X30; /*开放比较器功能*/ 
 298   1      CMP1=0X24; /*CHN1A 作为比较器正输入端,CMPREF 为参考电压,比较结果送CMP1*/ 
 299   1      Delay(1); /*延时1ms*/ 
 300   1      CMP1 &= 0xFE; /*清比较器1 中断标志*/ 
 301   1      EC1=1;/*使能比较器一中断*/ 
 302   1      /*设置定时器*/ 
 303   1      TMOD=0X11; /*定时器0,1 方式1*/ 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 6   

 304   1      IT1=1; /*外部中断1 为边沿触发方式*/ 
 305   1      EX1=1; 
 306   1      Led=0; /*LED ON*/ 
 307   1      Calc_MaxFireAngle(); /*计算半周期对应的定时器值*/ 
 308   1      Write_MaxFireAngle(); 
 309   1      IP1H=0X20; /*比较器1 中断最高优先级*/ 
 310   1      ReadEE(0,50,Buf); 
 311   1      Read_Last_FireAngle(); /*从存储器中读出上一次的速度(亮度)值*/ 
 312   1      Fire_Angle=Last_FireAngle; 
 313   1      EA =1; /*开中断*/ 
 314   1      do{
 315   2      
 316   2      WDFeed(); /*清看门狗*/ 
 317   2      ReadEE(0,50,Buf); /*循环读出,加强抗干扰能力*/ 
 318   2      Read_MaxFireAngle(); 
 319   2      if(Task_Ovr==1) Task_10ms(); 
 320   2      if(FuncSet==1) FuncHandle(); 
 321   2      }while(1); 
 322   1      }
 323          /*任务处理,由电压过零激活*/ 
 324          void Task_10ms() 
 325          { 
 326   1      if(KeyStart==0 && Key==0){/*检测键处理周期中的第一次按键*/ 
 327   2      AGE=0; /*清除按键年龄*/ 
 328   2      IKCLK=0; /*清除识别计时器*/ 
 329   2      DownTimes=0; /*清除击键次数*/ 
 330   2      KeyStart=1; /*开始进行按键处理*/ 
 331   2      } 
 332   1      if(IKCLK<100) goto Remote;/*未完,等待下一次任务*/ 
 333   1      if(CONTI==0) /*识别时间完,设置功能代码*/ 
 334   1      FuncCode=DownTimes; 
 335   1      else 
 336   1      FuncCode=DownTimes+4; 
 337   1      FuncSet=1; /*允许进行功能处理*/ 
 338   1      IKCLK=0; 
 339   1      DownTimes=0; 
 340   1      KeyStart=0; /*关闭按键处理*/ 
 341   1      goto Task_Ret; 
 342   1      Remote: 
 343   1      if(IRCLK<100) goto Task_Ret; 
 344   1      IRCLK=0; 
 345   1      if(CONTI_R){ 
 346   2      if(RKeySt1) FuncCode=4; 
 347   2      else if(RKeySt2) FuncCode=5; 
 348   2      else FuncCode=0; 
 349   2      }
 350   1      
 351   1      
 352   1      else{ 
 353   2      if(RKeySt1) FuncCode=1; 
 354   2      else if(RKeySt2) FuncCode=2; 
 355   2      else FuncCode=0; 
 356   2      }
 357   1      RKeySt1=0; /*清除状态*/ 
 358   1      RKeySt2=0; 
 359   1      RmtStart=0; 
 360   1      FuncSet=1; /*允许进行功能处理*/ 
 361   1      Task_Ret: 
 362   1      Task_Ovr=0; /*清任务进程标志*/ 
 363   1      }
 364          void FuncHandle() 
 365          { 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 7   

 366   1      unsigned char data i; 
 367   1      switch(FuncCode){ 
 368   2      case 1: /*点击一次*/ 
 369   2      if(!NO_R_SW){ /*遥控开关*/ 
 370   3      if(ON){ 
 371   4      ON=0; 
 372   4      Led=0; 
 373   4      SW=1; 
 374   4      }
 375   3      else{
 376   4      Fire_Angle=AngleLimit;/*可控硅全导通*/ 
 377   4      ON=1; 
 378   4      Led=1; 
 379   4      SW=0; 
 380   4      }
 381   3      break; 
 382   3      }
 383   2      Read_Last_FireAngle(); 
 384   2      if(ON==0){ 
 385   3      /*渐亮到上一次调定的亮度*/ 
 386   3      ON=1; /*允许可控硅触发*/ 
 387   3      Led=1; /*指示灯灭*/ 
 388   3      if(CtlLamp) 
 389   3      for(Fire_Angle=10;Fire_Angle>Last_FireAngle;Fire_Angle--) Delay(1);
 390   3      
 391   3      else{ 
 392   4      Fire_Angle=MaxFireAngle/2; /*中速运转*/ 
 393   4      Delay(3000); /*延迟5s*/ 
 394   4      /*转变为上次调定的转速*/ 
 395   4      if(Fire_Angle>Last_FireAngle){ 
 396   5      while(Fire_Angle>Last_FireAngle){ 
 397   6      Fire_Angle--; 
 398   6      Delay(1); 
 399   6      } 
 400   5      }
 401   4      else{ 
 402   5      while(Fire_Angle<Last_FireAngle){ 
 403   6      Fire_Angle++; 
 404   6      Delay(1); 
 405   6      } 
 406   5      } 
 407   4      } 
 408   3      }
 409   2      else{ 
 410   3      Led=0; /*指示灯点亮*/ 
 411   3      if(CtlLamp) 
 412   3      /*渐暗到最小亮度后关闭*/ 
 413   3      for(Fire_Angle=Last_FireAngle;Fire_Angle<MaxFireAngle- 
 414   3      AngleLimit;Fire_Angle++) Delay(1); 
 415   3      ON=0; /*不允许可控硅触发*/ 
 416   3      }
 417   2      break; 
 418   2      case 2: /*点击二次*/ 
 419   2      if(!CtlLamp) break; 
 420   2      if(ON==0){ 
 421   3      Read_Last_FireAngle(); 
 422   3      Fire_Angle=Last_FireAngle; 
 423   3      ON=1; /*可控硅打开为上次亮度*/ 
 424   3      Led=1; /*指示灯关闭*/ 
 425   3      }
 426   2      else{ 
 427   3      /*可控硅关闭*/ 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 8   

 428   3      ON=0; 
 429   3      Led=0; 
 430   3      }
 431   2      break; 
 432   2      case 3: /*点击三次*/ 
 433   2      break;
 434   2      
 435   2      case 4: /*持续按住*/ 
 436   2      EX1=0; 
 437   2      i=0; 
 438   2      while(CONTI || CONTI_R){/*亮度逐渐增大,直到放开*/ 
 439   3      WDRST=0X1E; /*清看门狗*/ 
 440   3      WDRST=0XE1; 
 441   3      if(ON==0){ /*原来关闭,亮度从0 开始,是电机,不予理会*/ 
 442   4      if(CtlLamp){ 
 443   5      ON=1; 
 444   5      Led=1; 
 445   5      Fire_Angle=MaxFireAngle-AngleLimit; 
 446   5      } 
 447   4      }
 448   3      if(ON){ 
 449   4      if(CtlLamp){/*灯*/ 
 450   5      if(Fire_Angle>AngleLimit){ 
 451   6      Fire_Angle-=1; 
 452   6      Delay(1); 
 453   6      } 
 454   5      else 
 455   5      Fire_Angle=AngleLimit; 
 456   5      }
 457   4      else{/*电机*/ 
 458   5      if(Fire_Angle>AngleLimit+SpeedLimit){ 
 459   6      Fire_Angle-=1; 
 460   6      Delay(1); 
 461   6      } 
 462   5      else 
 463   5      Fire_Angle=AngleLimit+SpeedLimit; 
 464   5      } 
 465   4      }
 466   3      if(INT1){ /*等待遥控键释放*/ 
 467   4      if(i++>100) CONTI_R=0; 
 468   4      }
 469   3      else 
 470   3      i=0; 
 471   3      }
 472   2      Write_FireAngle(); 
 473   2      EX1=1; 
 474   2      break; 
 475   2      case 5: /*点击一次,持续*/ 
 476   2      EX1=0; 
 477   2      i=0;
 478   2      
 479   2      while(CONTI || CONTI_R){/*亮度逐渐减小,直到放开*/ 
 480   3      WDRST=0X1E; /*清看门狗*/ 
 481   3      WDRST=0XE1; 
 482   3      if(ON){ 
 483   4      if(CtlLamp){ 
 484   5      if(Fire_Angle<MaxFireAngle-AngleLimit) { 
 485   6      Fire_Angle+=1; 
 486   6      Delay(1); 
 487   6      } 
 488   5      else{ 
 489   6      Fire_Angle=MaxFireAngle-AngleLimit; 
C51 COMPILER V7.09   P87LPC764_万能襙控礯筥礯_倨_                                          11/13/2006 13:51:42 PAGE 9   

 490   6      ON=0; 
 491   6      Led=0; 
 492   6      } 
 493   5      }
 494   4      else{ 
 495   5      if(Fire_Angle<MaxFireAngle-AngleLimit-SpeedLimit) { 
 496   6      Fire_Angle+=1; 
 497   6      Delay(1); 
 498   6      } 
 499   5      else{ 
 500   6      Fire_Angle=MaxFireAngle-AngleLimit-SpeedLimit; 
 501   6      ON=0; 
 502   6      Led=0; 
 503   6      } 
 504   5      } 
 505   4      }
 506   3      if(INT1){ /*等待遥控键释放*/ 
 507   4      if(i++>100) CONTI_R=0; 
 508   4      }
 509   3      else 
 510   3      i=0; 
 511   3      }
 512   2      Write_FireAngle(); 
 513   2      EX1=1; 
 514   2      break; 
 515   2      case 6: /*点击二次,持续*/ 

⌨️ 快捷键说明

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