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

📄 remote51.lst

📁 基于单片机的红外解码源码
💻 LST
字号:
C51 COMPILER V8.02   REMOTE51                                                              02/24/2007 12:37:25 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE REMOTE51
OBJECT MODULE PLACED IN REMOTE51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE REMOTE51.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX52.H>
   2          #define  D45MS 2500
   3          #define  D09MS 450
   4          #define  D220U 0x90
   5          #define  D250U 0x06
   6          
   7          #define IRIN  P1_4 //红外输入引脚的定义
   8          //#define IRIN  P2_0 //红外输入引脚的定义
   9          //#define IRIN  P2_7
  10          //#define IRGND P2_6
  11          
  12          union myd{
  13                   unsigned long r;
  14                   unsigned char led[4];    
  15            }     ;
  16          union myd k;
  17          unsigned long readir(void);
  18          void delay1(unsigned int nms);
  19          void initTimer(unsigned char st0); 
  20          
  21          extern void lcd_init(void);
  22          extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/
  23          
  24          //unsigned char code remcode[]={0x12,0x90,0xb8,0xf8,0x98,0xd8,0x88,0xe8,0x48,0x68,//0,1-9
  25          //                              0xb0,0xa8,0x99,0x00,0x08,0x60,0x02,0x20,
  26                                                                  //VOL+,VOL-,CH+,CH-,POWER,mute,recall,-/--
  27          //                                                        0x40,0xa0,0x2a,0xb2,0x50,0x78,0x70,0x58,0x38,0x30};
  28                                                                          //  最后3排AV。。。Freeze。。。video。。。hide。。。panel等
  29          
  30          unsigned char code remcode[]={
  31                  0x90,0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,//0-9的编码   
  32                  0x28,  0x68,0x08,  0x88, 0x58,0x48,0xc8, 0xa8,
  33                  //TV/AV,关机,频道-,频道+,重复,VOL+,VOL-, 静音MUTE,
  34                  0x78,  0xb8, 0x38, 0xe8, 0x98,0x18, 0x98,  0x50,0xd0,
  35                  //亮度,MIN,HOUR,IMER,SET,定时,画中画,2*,  3*
  36          };
  37          
  38          void int1(void) interrupt 2
  39          { EA = 0;
  40   1        k.r = readir();
  41   1        IE1 = 0;  
  42   1        EA = 1;
  43   1        IE1 = 0;
  44   1      }
  45          
  46          
  47          int main(void)
  48          { 
  49   1        union myd rdata;  
  50   1        unsigned char m,n,i,seg[]={0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};
  51   1        unsigned char zxm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  52   1                    0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff, };
  53   1        unsigned int rekey;
  54   1        unsigned char key, str1[]="Code: --------      SYS:--   USER:--";
  55   1        unsigned char code str2[]="Please press any    key.....";
C51 COMPILER V8.02   REMOTE51                                                              02/24/2007 12:37:25 PAGE 2   

  56   1        
  57   1        //initTimer(D220U); //220us
  58   1        IT1=1;
  59   1        EX1=1;
  60   1        EA=0;rekey=0;
  61   1        key=0x10;
  62   1       // lcd_init();
  63   1       // lcd_string(str2);
  64   1        while(1){  
  65   2                //IRGND =0;
  66   2                k.r = readir();
  67   2                if (k.r ==0xffffffff) rekey++;                  
  68   2                else  rekey =0;
  69   2            P0 = zxm[key];                              
  70   2            P2 = seg[3];
  71   2                m=2;
  72   2                while(m--)
  73   2                {
  74   3                        if(k.r)
  75   3                        {     
  76   4                          if (!rekey) 
  77   4                              {
  78   5                                rdata = k;
  79   5                                  //k.r=0x12345678;
  80   5                                      str1[6]=0x30 | (k.led[0]&0xf0)>>4;
  81   5                                      str1[7]=k.led[0]&0x0f | 0x30;
  82   5      
  83   5                                      str1[8]=0x30 | (k.led[1]&0xf0)>>4;
  84   5                                      
  85   5                                      str1[9]=k.led[1]&0x0f+0x30;
  86   5      
  87   5                                      str1[10]=0x30 | (k.led[2]&0xf0)>>4;
  88   5                                      str1[11]=k.led[2]&0x0f | 0x30;
  89   5      
  90   5                                      str1[12]=0x30 | (k.led[3]&0xf0)>>4;
  91   5                                      str1[13]=k.led[3]&0x0f | 0x30;
  92   5                                      i=6;
  93   5                                      while(i<14)
  94   5                                      {
  95   6                                        if(str1[i]>0x39) str1[i] +=('A'-'9'-1);
  96   6                                        i++;
  97   6                                      }
  98   5                                      str1[24]=str1[6];
  99   5                                      str1[25]=str1[7];
 100   5                                      str1[34]=str1[10];
 101   5                                      str1[35]=str1[11];
 102   5      //                              lcd_init();
 103   5      //                              lcd_string(str1);
 104   5                                }
 105   4                        } 
 106   3                              i=0;
 107   3                          /*while(i<2)
 108   3                              {
 109   3                              P2 &= 0xe0;P0 = 0xff;
 110   3                              P0=zxm[(rdata.led[2*i]>>4 ) & 0x0f];                    
 111   3                              P2 |= seg[i*2];                 
 112   3                              n=100;while(n--);
 113   3                              P2 &= 0xe0;P0 = 0xff;
 114   3                          P0=zxm[rdata.led[2*i]  & 0x0f];
 115   3                              //P0=zxm[8];                    
 116   3                              //P2 = seg[2*i+1];                      
 117   3                              P2 |= seg[i*2+1];
C51 COMPILER V8.02   REMOTE51                                                              02/24/2007 12:37:25 PAGE 3   

 118   3                              i++;
 119   3                              n=100;while(n--);
 120   3                              P2 &= 0xe0;P0=0xff;
 121   3                              }
 122   3                              */
 123   3                              i=0;
 124   3                              P2 &=0xe0; 
 125   3                              while(i<16){
 126   4                                 if(remcode[i]==rdata.led[2]) {
 127   5                                        //Request(remotekey);//通过串口来查看解码是否正确
 128   5                                        key=i;
 129   5                                        i=22;
 130   5                                      }
 131   4                                 i++;
 132   4                              }
 133   3                    P0 = zxm[key];                              
 134   3                        P2 = seg[3];
 135   3                        n=100;while(n--);
 136   3                        //P2 &= 0xe0;P0=0xff;
 137   3                 } 
 138   2                 //IRGND=0;    
 139   2        }
 140   1      }
*** WARNING C280 IN LINE 55 OF REMOTE51.C: 'str2': unreferenced local variable
 141          
 142          void delay1(unsigned int nms)
 143          {
 144   1        while(nms--); 
 145   1      }
 146          
 147          // 24---220us, 06---250us
 148          void initTimer(unsigned char st0) 
 149          {
 150   1       TMOD=0x02;
 151   1       TH0=st0;
 152   1       TL0=st0; 
 153   1       TR0=1;
 154   1       ET0=0;
 155   1       ET1=0; 
 156   1      }
 157          
 158          void initTimer2() 
 159          {
 160   1       TMOD=0x01;
 161   1       TH0=0xfc;
 162   1       TL0=0x18; 
 163   1       TR0=1;
 164   1       ET0=0;
 165   1       ET1=0; 
 166   1      }
 167          
 168          unsigned long readir(void)
 169          {  unsigned char i;
 170   1         unsigned int delay;
 171   1         unsigned long rdata=0;
 172   1         union myd rem;
 173   1         IRIN = 1;   
 174   1         if(IRIN) return 0;
 175   1         EA=0;i=0;
 176   1         initTimer2();TF0=0;
 177   1         while(IRIN==0); 
 178   1       /*    {
C51 COMPILER V8.02   REMOTE51                                                              02/24/2007 12:37:25 PAGE 4   

 179   1                        while(TF0==0);
 180   1                        TF0=0;i++;
 181   1                        TH0=0xfc;TL0=0x18;  
 182   1               }
 183   1         TR0=0;
 184   1         if (i<6) return i;*/
 185   1         i=32;
 186   1         while(i--) //始接收
 187   1         {  
 188   2            delay =80;
 189   2                initTimer(D220U);
 190   2                while(delay--)  // 延时4.5ms~6.0ms
 191   2                  { 
 192   3                        while(TF0==0);
 193   3                        TF0=0;if(IRIN==0) delay = 0;
 194   3                      }
 195   2                TR0=0;                  
 196   2                while(IRIN==0) IRIN = 1; //等待高电平
 197   2            // 延时0.9ms      begin
 198   2                initTimer(D220U);
 199   2                delay=6;
 200   2                while(delay--)  
 201   2                  {while(TF0==0);TF0=0;}                
 202   2                TR0=0;
 203   2                // 延时0.9ms end
 204   2            rdata <<=1;
 205   2                IRIN =1;
 206   2                if(IRIN)
 207   2                   rdata |= 0x1;
 208   2         }
 209   1         rem.r = rdata;
 210   1         if(rem.r+1) {
 211   2             //if (((rem.led[0]+ rem.led[1])== 0xff) &&((rem.led[2]+ rem.led[3])== 0xff)) return rdata;          
 212   2                 if ((rem.led[2]+ rem.led[3])== 0xff) return rdata;      
 213   2                 else return 0;
 214   2         }
 215   1         else return rdata;   // 说明:rdata.led[0]是用户码,rdata.led[2]是当前按键的编码
 216   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    685    ----
   CONSTANT SIZE    =    118    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      80
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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