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

📄 hongwai.lst

📁 此程序是有关红外的程序 mcu用啊他89c52 采用外部中断0接一体化红外接受头038 (就是影碟机上拆得的) P0 P2接数码管 P0数据 P2位选 能显示遥控器的系统码及其反码 数据及
💻 LST
字号:
C51 COMPILER V7.50   HONGWAI                                                               07/08/2007 15:24:16 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE HONGWAI
OBJECT MODULE PLACED IN hongwai.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE hongwai.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          
   5          sbit RST=P1^4;
   6          sbit OUT=P3^7;
   7          
   8          uchar   TH0_BUF=0;     //定义定时器时间缓冲
   9          uchar   TL0_BUF=0;
  10          uchar   INT0_TIMES=0;  //定义中断次数
  11          uchar   RCV_NUM=0;     //接收的数据是第几位
  12          uint    RH_CODE=0;         //定义接收码高位
  13          uint    RL_CODE=0;         //定义接收码低位
  14          bit   START_FLAG=0;    //定义接收数据开始标志位
  15          bit   RCV_BIT_FLAG=0;  //定义位接收标志位 1 表示接收成功
  16          bit   RCV_SUS_FLAG=0;  //定义字接收标志位 1 表示接收成功
  17          
  18          //char code disp[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1};
  19          char code disp[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0x30,0x25,0x67,0x23,0x64,0x74};
  20          //                  0    1    2    3    4    5    6    7    8    9    a    b   c    d    e    f    
  21          
  22          //char code disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x8e,0xff,0x00};
  23          //                  0    1    2    3    4    5    6    7    8    9   -    f    空   显
  24          
  25          //char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //显示缓冲 其中i0为虚拟位 
  26          char i1,i2,i3,i4,i5,i6,i7,i8;
  27          /*
  28          void RESET(void)//软件复位子程序 
  29                  {
  30                          uchar code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};
  31                          (*((void(*)(void))(rst)))();                            
  32                                                                                                                                  }
  33          
  34          */
  35          delay(uint t)
  36          { char a;
  37   1        while(t--)
  38   1        for(a=100;a>0;a--);  }
  39          
  40          
  41          void initial(void)
  42          {   TMOD=0x01;
  43   1              IT0=1;         //外部中断0采用高到低的跳变有效
  44   1              IE=0x81;       //开外部中断0 和两个定时器中断
  45   1              TH0=0;
  46   1              TL0=0;
  47   1              TR0=0;
  48   1              START_FLAG=0;
  49   1              TH0_BUF=0;     //定义定时器时间缓冲
  50   1              TL0_BUF=0;
  51   1          INT0_TIMES=0;  //定义中断次数
  52   1          RCV_NUM=0;     //接收的数据是第几位
  53   1              RH_CODE=0;         //定义接收码高位
  54   1              RL_CODE=0;         //定义接收码低位
  55   1          START_FLAG=0;    //定义接收数据开始标志位
C51 COMPILER V7.50   HONGWAI                                                               07/08/2007 15:24:16 PAGE 2   

  56   1          RCV_BIT_FLAG=0;  //定义位接收标志位 1 表示接收成功
  57   1          RCV_SUS_FLAG=0;  //定义字接收标志位 1 表示接收成功
  58   1          
  59   1              }
  60                  
  61          display(t)
  62          {while(t--)
  63   1       {
  64   2        P0=disp[i8];
  65   2        P2=0x7f;
  66   2        delay(1); 
  67   2        P2=0xff;
  68   2        P0=disp[i7];
  69   2        P2=0xbf;
  70   2        delay(1);
  71   2        P2=0xff;
  72   2        P0=disp[i6];
  73   2        P2=0xdf;
  74   2        delay(1);
  75   2        P2=0xff;
  76   2        P0=disp[i5];
  77   2        P2=0xef;
  78   2        delay(1);
  79   2        P2=0xff;
  80   2        P0=disp[i4];
  81   2        P2=0xf7;
  82   2        delay(1);
  83   2        P2=0xff;
  84   2        P0=disp[i3];
  85   2        P2=0xfb;
  86   2        delay(1);
  87   2        P2=0xff;
  88   2        P0=disp[i2];
  89   2        P2=0xfd;
  90   2        delay(1);
  91   2        P2=0xff;
  92   2        P0=disp[i1];
  93   2        P2=0xfe;
  94   2        delay(1);
  95   2        P2=0xff;}     }
  96          
  97          
  98          void RCV_SUS(void)
  99          {   
 100   1              if(1)
 101   1          {
 102   2          i8=RH_CODE/4096%16;i7=RH_CODE/256%16;i6=RH_CODE/16%16;i5=RH_CODE%16;
 103   2              i4=RL_CODE/4096%16;i3=RL_CODE/256%16;i2=RL_CODE/16%16;i1=RL_CODE%16;
 104   2              P2=0xff;
 105   2              delay(50);
 106   2              initial();
 107   2                                      }
 108   1              else  initial(); //注意 此句作用很大 这是我调试很长时间才调试出来的 说明以后编程序时要严密
 109   1              
 110   1                                                                              }
 111          void RCV_BIT(void)
 112          {       uint time0=TH0_BUF*256+TL0_BUF;
 113   1              uint KEY_BIT;                         //当前的键值 为0或1
 114   1              if(START_FLAG==0)
 115   1                      {   if( time0>12000 && time0<15000 )
 116   2                              { START_FLAG=1;  }         //开始 
 117   2                                                                                                      }
C51 COMPILER V7.50   HONGWAI                                                               07/08/2007 15:24:16 PAGE 3   

 118   1              else if(START_FLAG==1)
 119   1                      {       
 120   2                              if( time0> 2000 && time0<2400 )  KEY_BIT=0;
 121   2                              else if( time0> 900 && time0<1300 )  KEY_BIT=0x8000;
 122   2                              else initial(); //错误
 123   2                                                              
 124   2                              if(RCV_NUM<16) 
 125   2                              {       RH_CODE=RH_CODE>>1; 
 126   3                                      RH_CODE^=KEY_BIT;               }
 127   2                              else  
 128   2                              {       RL_CODE=RL_CODE>>1;
 129   3                                      RL_CODE^=KEY_BIT;               }
 130   2                              
 131   2                              RCV_NUM++;
 132   2      
 133   2                              if(RCV_NUM==32) 
 134   2                                      {   
 135   3                                              RCV_NUM=0;       RCV_SUS();     }               
 136   2                                                                                                                      }
 137   1                      RCV_BIT_FLAG=0; 
 138   1                                                                                                                      }
 139          
 140          main()
 141          { display(60);
 142   1        delay(400);
 143   1        initial();
 144   1        while(1)
 145   1        { 
 146   2              display(1);  }
 147   1                             }
 148          
 149          void ex_input(void) interrupt 0   //外部中断 
 150          {   
 151   1              INT0_TIMES++;
 152   1          
 153   1              if(TR0==0) TR0=1;                
 154   1              else if(TR0==1) 
 155   1              {       
 156   2                  TH0_BUF=TH0;
 157   2                      TL0_BUF=TL0;
 158   2                      TH0=0;
 159   2                      TL0=0;
 160   2                  //RCV_BIT_FLAG=1;        //置标志位
 161   2              TR0=1;               //开始下一个脉冲的检测
 162   2              
 163   2                      RCV_BIT();
 164   2                                                      }
 165   1                                                              }
 166          
 167          
 168          //void Time0(void) interrupt 1
 169          //{   
 170              //RH_CODE=INT0_TIMES+(START_FLAG==1)*256*16;
 171                  
 172          //    INT0_TIMES=0;
 173            //  RCV_BIT_FLAG=0;
 174          //      TH0=0;
 175          //      TL0=0;
 176          //      TR0=0; 
 177          //      RCV_SUS();
 178          //                              }

C51 COMPILER V7.50   HONGWAI                                                               07/08/2007 15:24:16 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    668    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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