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

📄 t100.lst

📁 非常经典的一款LCD单芯片方案的驱动代码.(T100)
💻 LST
📖 第 1 页 / 共 5 页
字号:
 515   3                              {
 516   4                                      cINC    =       *pString++;
 517   4                                      cNum1  -=       1;
 518   4                              }
 519   3                              while(cNum1--)
 520   3                              {
 521   4                                      I2CWriteByte(cAddr,cReg,*pString++);
 522   4                                      cReg+=cINC;
 523   4                              }
 524   3                      }
 525   2        }
 526   1      }
 527          
 528          bit Filter13(bit le)
 529          {
 530   1              bit r;
 531   1              r=INT1;
 532   1              if(le==1)
 533   1              {
 534   2                      _nop_();
 535   2                      _nop_();
 536   2                      _nop_();
 537   2                      r&=INT1;
 538   2                      _nop_();
 539   2                      _nop_();
 540   2                      _nop_();
 541   2                      r&=INT1;
 542   2              }
 543   1              else
 544   1              {
 545   2                      _nop_();
 546   2                      _nop_();
 547   2                      _nop_();
 548   2                      r|=INT1;
C51 COMPILER V7.06   T100                                                                  10/30/2005 21:46:44 PAGE 10  

 549   2                      _nop_();
 550   2                      _nop_();
 551   2                      _nop_();
 552   2                      r|=INT1;
 553   2              }
 554   1              if(r==le)
 555   1                      return 1;
 556   1              else
 557   1                      return 0;
 558   1      }
 559          /*遥控接收在此中断程序内完成
 560            数据放在ir_data内*/
 561          /************************************/
 562          /*  Interrupt for IR subroutine     */
 563          /*  external interrupt source INT0  */
 564          /************************************/
 565          void int1Remote(void) interrupt 2
 566          {
 567   1              register BYTE i;
 568   1              unsigned int count;             /*计时变量*/
 569   1              unsigned int  temp0,temp1,ir_code=0;
 570   1              ir_enable=TRUE;
 571   1              TMOD=0x11;             /*timer 0 operate in 16 bit mode*/
 572   1              EX1=0;
 573   1              TL0=0;
 574   1              TH0=0;
 575   1              TR0=1;
 576   1              /************************************/
 577   1              /*   Detect IR Head                 */
 578   1              /************************************/
 579   1              do                /*Detect IR head 9mS*/
 580   1              {
 581   2                      count=(TL0+TH0*256);   /*count :us unit */
 582   2                      if(Filter13(1)==1) break;
 583   2              }while(count<=(IR_HEAD+DELTA));
 584   1              TR0=0;                  /*停止计时*/
 585   1      
 586   1              if(Filter13(0)==1||count<(IR_HEAD-DELTA*25))       /*for some noise disturb IR*/
 587   1                      {
 588   2                      ir_enable=FALSE; /* no IR head or not suitable for Ir head*/
 589   2                      EX1=1;
 590   2                      TR0=1;
 591   2                      return;
 592   2                      }
 593   1              /************************************/
 594   1              /*   Detect OFF CODE     4.5mS      */
 595   1              /************************************/
 596   1              while(Filter13(0)==1);
 597   1              TR0=0;
 598   1              TL0=0;
 599   1              TH0=0;
 600   1              TR0=1;
 601   1              do                /*Detect IR OFF CODE*/
 602   1              {
 603   2                      count=(TL0+TH0*256);   /*count :us unit */
 604   2                      if(Filter13(0)==1) break;
 605   2              }while(count<(OFF_CODE+DELTA));
 606   1              TR0=0;
 607   1              count=(TL0+TH0*256);   /*count :us unit */
 608   1              if(count<=(OFF_CODE-DELTA*4))
 609   1              {
 610   2                      /*重复码OFF=2.25*/
C51 COMPILER V7.06   T100                                                                  10/30/2005 21:46:44 PAGE 11  

 611   2                      if((count>(OFF_REP-DELTA)&&count<(OFF_REP+DELTA)))
 612   2                      {     TR0=0;
 613   3                            TL0=0;
 614   3                            TH0=0;
 615   3                            TR0=1;
 616   3      
 617   3                              do
 618   3                              {
 619   4                                      count=(TL0+TH0*256);   /*count :us unit */
 620   4                                      if(Filter13(1)==1) break;
 621   4                              }while(count<=(REP_CODE+DELTA));
 622   3                              TR0=0;
 623   3                              count=(TL0+TH0*256);   /*count :us unit */
 624   3                              if(INT1==1)
 625   3                              {
 626   4                                      TR0=0;
 627   4                                      if(
 628   4      //#ifdef SINAI_REMOTE
 629   4                                      ir_data==REMOTE_KEY_VO_DEC||ir_data==REMOTE_KEY_VO_INC||
 630   4      //#endif
 631   4                                      ir_data==REMOTE_KEY_DECR||ir_data==REMOTE_KEY_INCR )
 632   4      
 633   4                                      {
 634   5      
 635   5                                      ir_enable=TRUE; /*注意:ir_data不变*/
 636   5                                      EX1=0;
 637   5                                      }
 638   4                                      else
 639   4                                      {
 640   5                                      ir_data=0;
 641   5                                      ir_enable=FALSE;
 642   5                                      EX1=1;
 643   5                                      TR0=1;
 644   5                                      }
 645   4                                      return;
 646   4                              }
 647   3                      }
 648   2                      else if(count>(OFF_REP+DELTA))
 649   2                      {
 650   3      
 651   3                       ir_enable=TRUE;        /*注意:ir_data不变*/
 652   3                       EX1=0;
 653   3      
 654   3                      }
 655   2                      else
 656   2                      {
 657   3                              ir_enable=FALSE;   /*not suitable for off code*/
 658   3                              EX1=1;
 659   3                              TR0=1;
 660   3                              return;
 661   3                      }
 662   2              }
 663   1      
 664   1              /************************************/
 665   1              /*   Detect 16 bit address code     */
 666   1              /************************************/
 667   1              if(ir_enable==TRUE)
 668   1              {
 669   2                      TMOD=0x11;           /*counter start with INT0 and TR0*/
 670   2                      ir_code=0;              /*初始化变量*/
 671   2                      for(i=0;i<16;i++)
 672   2                      {
C51 COMPILER V7.06   T100                                                                  10/30/2005 21:46:44 PAGE 12  

 673   3                              while(INT1==0);
 674   3                              TL0=0;
 675   3                              TH0=0;
 676   3                              TR0=1;
 677   3                              do
 678   3                              {
 679   4                                      count=(TL0+TH0*256);   /*count :us unit */
 680   4                                      if(Filter13(0)==1) break;
 681   4                              }while(count<=(CODE_1_TIME+DELTA));     /*INT0为高电平时计时*/
 682   3                              TR0=0;
 683   3                              ir_code<<=1;
 684   3                              if((count>(CODE_1_TIME-DELTA))&&(count<=(CODE_1_TIME+DELTA)))  /*detect 1 code  2.24mS-0.56mS=1.68mS*/
 685   3                                      ir_code++;
 686   3                              else if((count>(CODE_0_TIME-DELTA))&&(count<=(CODE_0_TIME+DELTA)));  /*detect 0 code 1.12mS-0.56mS=0.56
             -mS*/
 687   3                              else
 688   3                              {
 689   4                                      ir_enable=FALSE;
 690   4                                      TR0=1;
 691   4                                      break;           /*not suitable for address code */
 692   4                              }
 693   3                      }                /*end for*/
 694   2              }
 695   1              /************************************/
 696   1              /*   Detect 16 bit data code        */
 697   1              /************************************/
 698   1              if(ir_enable==TRUE&&ir_code==IR_SYSTEM_CODE)/**/
 699   1              {
 700   2                      TMOD=0x11;           /*counter start with INT0 and TR0*/
 701   2                      ir_code=0;
 702   2                      for(i=0;i<16;i++)
 703   2                      {
 704   3                              while(INT1==0);
 705   3                              TL0=0;
 706   3                              TH0=0;
 707   3                              TR0=1;
 708   3                              do
 709   3                              {
 710   4                                      count=(TL0+TH0*256);
 711   4                                      if(Filter13(0)==1) break;
 712   4                              }while(count<=(CODE_1_TIME+DELTA));     /*INT0为高电平时计时*/
 713   3                              TR0=0;
 714   3                              //count=(TL0+TH0*256);   /*count :us unit */
 715   3                              ir_code<<=1;
 716   3                              if((count>(CODE_1_TIME-DELTA))&&(count<=(CODE_1_TIME+DELTA)))  /*detect 1 code 1.68mS*/
 717   3                                      ir_code++;
 718   3                              else if((count>(CODE_0_TIME-DELTA)&&count<=(CODE_0_TIME+DELTA)));  /*detect 0 code 0.56mS*/
 719   3                              else
 720   3                              {
 721   4                                      ir_enable=FALSE;
 722   4                                      TR0=1;
 723   4                                      break;           /*not suitable for address code */
 724   4                              }
 725   3                      }                /*end for*/
 726   2                      if(ir_enable==TRUE)
 727   2                      {
 728   3      
 729   3                              temp0=ir_code&0xff00;
 730   3                              temp0=~temp0;
 731   3                              temp0>>=8;
 732   3                              temp1=ir_code&0x00ff;
 733   3                              if(temp0!=temp1)
C51 COMPILER V7.06   T100                                                                  10/30/2005 21:46:44 PAGE 13  

 734   3                                      ir_enable=FALSE;
 735   3                              else
 736   3                              {
 737   4                                      ir_data=(BYTE)(temp1);     /*true code effective*/
 738   4                                      ir_enable=TRUE;            /*set ir flag*/
 739   4                                      EX1=0;
 740   4                                      return;
 741   4                              }
 742   3                      }
 743   2              }
 744   1              else
 745   1              {       ir_enable=FALSE;
 746   2              EX1=1;}
 747   1      }
 748          void RemoteEvent(void)
 749          {
 750   1              bit bTemp=0;
 751   1              switch(ir_data)
 752   1              {
 753   2              //      case REMOTE_KEY_POWER:
 754   2              //           bTemp=kyPOWEREvent();
 755   2              //           break;
 756   2                      case REMOTE_KEY_SOURCE:
 757   2                           IRSourceSelCtrl();
 758   2                           break;
 759   2                      case REMOTE_KEY_SCALER:
 760   2                            IRSCALEREvent();
 761   2                           break;
 762   2                      case REMOTE_KEY_AIRCABLE:
 763   2                            IRDismodeEvent();
 764   2                           break;
 765   2      
 766   2              /*      case REMOTE_KEY_DECR:
 767   2                           bTemp=kyDECREASEEvent();
 768   2                           break;
 769   2                      case REMOTE_KEY_INCR:
 770   2                           bTemp=kyINCREASEEvent();
 771   2                           break;
 772   2                      case REMOTE_KEY_MENU:
 773   2                            bTemp=kyMENUEvent();
 774   2                           break;
 775   2                      case REMOTE_KEY_VO_INC:
 776   2                           bTemp=IRVolDownKeyCtrl();

⌨️ 快捷键说明

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