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

📄 irm.lst

📁 基于Mini51板的数字示波器设计
💻 LST
字号:
C51 COMPILER V8.02   IRM                                                                   01/31/2009 14:04:30 PAGE 1   


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

line level    source

   1          #include "osc.h"
   2          #include "irm.h"
   3          #include "number.h"
   4          #include "common.h"
   5          
   6          unsigned char irm_code;//红外解码键值返回全局变量
   7          bit  flag  ;// 上一位编码位
   8          
   9          
  10          void extern2_init(void)
  11          {
  12   1              EA = 1;
  13   1              IT2 = 1;//下降沿中断
  14   1              EX2 = 1;
  15   1      }
  16          
  17          static unsigned char check_bit(unsigned char bit_num)
  18          {
  19   1          //最大检测7位    
  20   1              unsigned char irm_code0 = 0;
  21   1              unsigned char i ;
  22   1              unsigned int  count ;
  23   1              #define  ERROR  0x10;
  24   1              for(i=0;i<bit_num;i++)
  25   1               {
  26   2                  count = 0 ;
  27   2                      irm_code0 = irm_code0<<1 ;
  28   2                  if(flag)
  29   2                      {
  30   3                         while(IRM_DQ)if(count++>10000) return ERROR;
  31   3                         if(count>150)
  32   3                         {
  33   4                            flag = 0  ;//  结束码为 10                                          
  34   4                         }
  35   3                         else
  36   3                         {
  37   4                            flag = 1  ;//  结束码为 01
  38   4                                irm_code0 |= 0x01;
  39   4                                while(!IRM_DQ)if(count++>10000) return ERROR;
  40   4                         }
  41   3                      }
  42   2                      else   //  结束码为 10
  43   2                      {
  44   3                         while(!IRM_DQ)if(count++>10000) return ERROR;
  45   3                         if(count>150)
  46   3                         {
  47   4                            flag = 1  ;//  结束码为 01
  48   4                                irm_code0 |= 0x01;
  49   4                         }
  50   3                         else
  51   3                         {
  52   4                            flag = 0  ;//  结束码为 10
  53   4                                while(IRM_DQ)if(count++>10000) return ERROR;                    
  54   4                         }
  55   3                      }  
C51 COMPILER V8.02   IRM                                                                   01/31/2009 14:04:30 PAGE 2   

  56   2                }       
  57   1                return irm_code0  ;  //解码成功 !!
  58   1      }                                         
  59          
  60          
  61          //STC单片机特有的外部中断INT2实现红外解码
  62          //解码结果由数据缓冲区返回
  63          void IRMint(void) interrupt 6
  64          {               
  65   1              unsigned int  count;
  66   1              unsigned char temp_code[2];
  67   1              
  68   1              EA = 0;/*解码过程禁止其它中断发生*/
  69   1          IRM_DQ = 1 ;
  70   1              /*跳过1.5bit 起始码*/    
  71   1              {
  72   2               count = 0;
  73   2               while(!IRM_DQ)if(count++>1000) goto return_main;
  74   2               count = 0;
  75   2               while(IRM_DQ)if(count++>1000) goto return_main;
  76   2              }
  77   1              /*跳过1bit控制码和5bit用户码*/  
  78   1          {
  79   2               flag = 0 ;  //起始码以10结束
  80   2               temp_code[0] = check_bit(6);    
  81   2              } 
  82   1              /*数据码*/
  83   1               temp_code[1] = check_bit(6);    
  84   1              irm_code = temp_code[1] ; //返回键值
  85   1              IE2 = 0 ;
  86   1              EX2 = 0;
  87   1              return_main:    
  88   1              EA = 1; 
  89   1      }
  90          
  91          
  92          /*按键扫描*/
  93          void key_scan(void)
  94          {       
  95   1              unsigned int code timeH [] = {111,254,253,248,241,183};//{50,5000,2500,1000,500,100};
  96   1              unsigned int code timeL [] = {255,143, 30,204,153,255};//{50,5000,2500,1000,500,100};
  97   1      
  98   1              if(irm_code!=0) {
  99   2                      switch (irm_code)
 100   2                      {
 101   3                              case 30: acdc_flag ^= 0x01;     break;  
 102   3                              case 31: run_flag  ^= 0x01;     break;  
 103   3                              case 34: if(pointxA > 0      )                  pointxA--; break;       
 104   3                              case 35: if(pointxA < WIDTH-2)                  pointxA++; break;       
 105   3                              case 42: if(pointxB > 0      )                  pointxB--; break;       
 106   3                              case 43: if(pointxB < WIDTH-2)                  pointxB++; break;       
 107   3                              case 45: if(pointyA > ZEROY-HEIGHT+1)   pointyA--; break;       
 108   3                              case 44: if(pointyA < ZEROY-2       )   pointyA++; break;
 109   3                              case 47: if(pointyB > ZEROY-HEIGHT+1)   pointyB--; break;       
 110   3                              case 46: if(pointyB < ZEROY-2       )   pointyB++; break;
 111   3                              case 48: if(val_tdiv > 0) val_tdiv--; break;    
 112   3                              case 49: if(val_tdiv < 4) val_tdiv++; break;
 113   3                              case 54: if(val_vdiv > 0) val_vdiv--; break;
 114   3                              case 58: if(val_vdiv < 5) val_vdiv++; break;
 115   3                              case 55: if(movx > -(WIDTH/2-1)) movx--; break;
 116   3                              case 56: if(movx <  (WIDTH/2-1)) movx++; break;
 117   3                              case 63: if(movy > -(HEIGHT/2)) movy--; break;
C51 COMPILER V8.02   IRM                                                                   01/31/2009 14:04:30 PAGE 3   

 118   3                              case 57: if(movy <  (HEIGHT/2)) movy++; break;
 119   3                              default: break;
 120   3                      }
 121   2                      
 122   2                      RCAP2H = timeH[val_tdiv];
 123   2                      RCAP2L = timeL[val_tdiv];               
 124   2        
 125   2                      irm_code=0;
 126   2                      BEEP_ON();
 127   2                      disp_vdiv();
 128   2                      disp_ypoint(); 
 129   2                      delay_ms(200);
 130   2                      BEEP_OFF();
 131   2                      delay(10000);
 132   2                      EX2 = 1;                
 133   2              }
 134   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    621    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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