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

📄 main.lst

📁 投影仪红外遥控解码C语言程序
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  08/04/2007 20:05:59 PAGE 1   


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

line level    source

   1          #include "STC89C51RC.H"
   2          #include "Mini51B.H"
   3          
   4          sbit DQ  = P4^3;
   5          sbit SPK = P1^0;
   6          
   7          unsigned char irm_code;
   8          unsigned char code ledmap[]=    //共阴LED数码管译码表
   9          {       
  10                  0x3f,0x06,0x5b,0x4f,0x66,       //0,1,2,3,4,
  11                  0x6d,0x7d,0x07,0x7f,0x6f,       //5,6,7,8,9,            
  12                  0x77,0x7C,0x39,0x5E,0x79,       //A,b,C,d,E,
  13                  0x71,                                           //F,
  14          };
  15          
  16          void delay(unsigned int t)
  17          {                          
  18   1              while(t--);     
  19   1      }
  20          void Sound(void)
  21          {
  22   1              SPK = 0;
  23   1              delay(10000);
  24   1              SPK = 1;
  25   1      }
  26          
  27          //STC单片机特有的外部中断INT2实现红外解码
  28          //解码结果由数据缓冲区返回
  29          void IRMint(void) interrupt 6
  30          {               
  31   1              unsigned int temp;
  32   1              unsigned char i,temp_buff[2];
  33   1      
  34   1              EA = 0;/*解码过程禁止其它中断发生*/
  35   1              temp = 0;
  36   1              while(!DQ) if(temp++>0x1000) goto return_main;//防止意外死机    
  37   1              if (temp < 0x0400) goto return_main;//Max=0x0457
  38   1              /*以上完成引导码9ms的低电平检测*/
  39   1              temp = 0;
  40   1              while(DQ) if(temp++>0x1000)goto return_main;
  41   1              if (temp < 0x0180) goto return_main;//Max=0x0227
  42   1              /*以上完成引导码4.5ms的高电平检测*/
  43   1              for(i=0;i<16;i++)//跳过2字节引导码
  44   1              {
  45   2                      temp = 0;
  46   2                      while(!DQ)if(temp++>0x1000) goto return_main;//通过编码低电平
  47   2                      temp = 0;
  48   2                      while(DQ) if(temp++>0x1000) goto return_main;
  49   2              }
  50   1      
  51   1          /*有效字节*/
  52   1              for(i=0;i<8;i++)
  53   1              { 
  54   2                      temp_buff[0]<<=1;
  55   2                      temp = 0;
C51 COMPILER V8.02   MAIN                                                                  08/04/2007 20:05:59 PAGE 2   

  56   2                      while(!DQ)if(temp++>0x1000) goto return_main;//通过编码低电平
  57   2                      temp = 0;
  58   2                      while(DQ) if(temp++>0x1000) goto return_main;
  59   2                      if(temp > 0x0080) temp_buff[0] |= 0x01;
  60   2              }
  61   1      
  62   1          /*校验字节*/
  63   1              for(i=0;i<8;i++)
  64   1              { 
  65   2                      temp_buff[1]<<=1;
  66   2                      temp = 0;
  67   2                      while(!DQ)if(temp++>0x1000) goto return_main;//通过编码低电平
  68   2                      temp = 0;
  69   2                      while(DQ) if(temp++>0x1000) goto return_main;
  70   2                      if(temp > 0x0080) temp_buff[1] |= 0x01;
  71   2              }
  72   1      
  73   1          /*校验*/
  74   1              if (temp_buff[0] == ~temp_buff[1]) 
  75   1              {
  76   2                      irm_code = temp_buff[0];
  77   2                      Sound();
  78   2              }       
  79   1              return_main:EA = 1;
  80   1      }
  81          
  82          void main()
  83          {
  84   1              unsigned char temp;
  85   1              EA = 1;
  86   1              IT2 = 1;//下降沿中断
  87   1              EX2 = 1;
  88   1              
  89   1              seg1 = 0xff;//熄灭                                                              
  90   1              while(1)
  91   1              {                               
  92   2                      if(irm_code!=temp)      
  93   2                      {
  94   3                              temp = irm_code;
  95   3                              seg2 = ~ledmap[temp/100];
  96   3                              seg3 = ~ledmap[temp/10%10];
  97   3                              seg4 = ~ledmap[temp%10];                        
  98   3                      }                               
  99   2              }
 100   1      }       


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    421    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       2
   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 + -