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

📄 intctrl.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   INTCTRL                                                               06/30/2005 14:02:57 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE INTCTRL
OBJECT MODULE PLACED IN IntCtrl.OBJ
COMPILER INVOKED BY: C:\Keil51\C51\BIN\c51.exe IntCtrl.c DB OE SMALL ROM(LARGE)

line level    source

   1          #include "reg52.h"
   2          #include "intrins.h"
   3          #include "..\..\inc\globedef.h"
   4          #include "..\..\inc\intctrl.h"
   5          #include "..\..\inc\keyproc.h"
   6          #include        "..\..\inc\tuner.h"
   7          
   8          /*====================================================
   9          外部中断1, 用来接收遥控信号,和Timer0配合使用
  10          ====================================================*/
  11          void RemoteInt(void) interrupt 2
  12          {
  13   1              WORD IRTimeCount;
  14   1              BYTE temp1,temp2;
  15   1              IRTimeCount = (WORD)Timer0_CntH*256+(WORD)Timer0_CntL;
  16   1              Timer0_CntH =0;
  17   1              Timer0_CntL = 0;
  18   1              Start_Timer0;
  19   1              switch(IrState)
  20   1              {
  21   2                      case  IR_READY:
  22   2                              IRDataTemp=0;
  23   2                              IRDataCount=0;
  24   2                              IrState=IR_HEAD;
  25   2                              break;
  26   2                      case  IR_HEAD:
  27   2                              if((IRTimeCount<IR_HEAD_MAX)&&(IRTimeCount>IR_HEAD_MIN))
  28   2                              {
  29   3                                      IRDataCount=0;
  30   3                                      IrState=IR_OFFCODE;
  31   3                                      IRDataTemp=0;
  32   3                                      RepCount = 0;
  33   3                                      Current_Remote_In = 0;
  34   3                              }
  35   2                              else if((IRTimeCount>IR_REP_MIN) && (IRTimeCount<IR_REP_MAX))
  36   2                              {
  37   3                                      //是重复信号
  38   3      #ifdef  IRRepEnable
  39   3                                      if(1 == Current_Remote_In)
  40   3                                      {               
  41   4                                              if( (Remote_value == 18)     //FM/AM 和AUTO_SCAN_KEY复用
  42   4                                                          || (Remote_value == 7)   //STEPR和FB复用

  43   4                                                          || (Remote_value == 8))  //STEPF和FF复用

  44   4                                              {
  45   5                                                      FMAM_PRESSED = 1;
  46   5                                                      RepCount++;
  47   5                                              }
  48   4                                              if( (Remote_value  == 19)                       //IR_KEY_TBL[2] = VOLUME_UP_KEY;
  49   4                                                 ||(Remote_value == 2)                        //IR_KEY_TBL[6] = VOLUME_DOWN_KEY;
  50   4                                                 ||(Remote_value == 12)                       //IR_KEY_TBL[5] = BASS_PLUS_KEY;
  51   4                                                 ||(Remote_value == 14))                      //IR_KEY_TBL[9] = CENTER_MINUS_KEY;
  52   4                                                 //||(Remote_value == 0x7) )          //IR_KEY_TBL[7] = CENTER_PLUS_KEY;
  53   4                                              {
  54   5                                                              //当遥控输入是以上按键时,才有重复功能                                  
  55   5                                                      RepCount++;     
C51 COMPILER V7.20   INTCTRL                                                               06/30/2005 14:02:57 PAGE 2   

  56   5                                                      if(RepCount > 3)
  57   5                                                              IR_KeyAct = 1;  //当重复计数值超过设定值时,重复有效
  58   5                                              }
  59   4                                      }
  60   3      #endif
  61   3                                      IrState = IR_READY;
  62   3                              }
  63   2                              else
  64   2                              {
  65   3                                      //是杂波
  66   3                                      IR_KeyAct = 0;
  67   3                                      IrState = IR_READY;
  68   3                                      Current_Remote_In = 0;
  69   3                              }
  70   2                              break;
  71   2                      case  IR_OFFCODE:
  72   2                              //地址码检测
  73   2                              IRDataTemp<<=1;
  74   2                              if(((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
  75   2                                      || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
  76   2                              {
  77   3                                      IRDataCount++;
  78   3                                      if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
  79   3                                              IRDataTemp |= 0x1;//检测"1
  80   3                                      if(IRDataCount >= 16)
  81   3                                      {
  82   4                                              IRDataCount=0;
  83   4                                              if((IRDataTemp==IR_SYSTEM_CODE))
  84   4                                              {
  85   5                                                      //是正确的地址码
  86   5                                                      IrState=IR_ADDRESS;
  87   5                                                      IRDataTemp=0;   
  88   5                                                      
  89   5                                                      
  90   5                                              }
  91   4      
  92   4                                              else
  93   4                                              {
  94   5                                                      //错误的地址码
  95   5                                                      IR_KeyAct=0;
  96   5                                                      Current_Remote_In = 0;
  97   5                                                      IrState=IR_READY;
  98   5                                              }
  99   4                                      }
 100   3                              }
 101   2                              else
 102   2                              {
 103   3                                      //是杂波
 104   3                                      IR_KeyAct = 0;
 105   3                                      Current_Remote_In = 0;
 106   3                                      IrState = IR_READY;
 107   3                              }
 108   2                              break;
 109   2                      case  IR_ADDRESS:
 110   2                              //数据码检测
 111   2                              IRDataTemp>>=1;
 112   2                              if(((IRTimeCount < CODE_1_MAX)&&(IRTimeCount > CODE_1_MIN)) 
 113   2                                      || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
 114   2                              {
 115   3                                      IRDataCount++;
 116   3      
 117   3                                      if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
C51 COMPILER V7.20   INTCTRL                                                               06/30/2005 14:02:57 PAGE 3   

 118   3                                              IRDataTemp |= 0x8000;   //检测到“1”
 119   3                              
 120   3                                  if(IRDataCount >= 16)
 121   3                                      {
 122   4                                              //判断检测到的数据码是否正确
 123   4                                              IRDataCount=0;
 124   4                                              temp1 = (BYTE)(IRDataTemp%256);
 125   4                                              temp2 = (BYTE)(IRDataTemp/256);
 126   4                                              temp2 = ~temp2;
 127   4                                              if(temp1 == temp2)
 128   4                                              {                                       
 129   5                                                      Remote_value = temp1;
 130   5                                                      if(Remote_value > 0x1f)
 131   5                                                              Remote_value -= 0x20;
 132   5                                                      Current_Remote_In = 1;
 133   5                                                      if( (Remote_value == 18)     //FM/AM 和AUTO_SCAN_KEY复用
 134   5                                                          || (Remote_value == 7)   //STEPR和FB复用

 135   5                                                          || (Remote_value == 8))  //STEPF和FF复用

 136   5                                                              FMAM_PRESSED = 1;
 137   5                                                      else
 138   5                                                              IR_KeyAct = 1;
 139   5                                              }
 140   4                                              IrState = IR_READY;
 141   4                                              IRDataCount = 0;
 142   4                                      }
 143   3                          }
 144   2                              else
 145   2                              {
 146   3                                          //无效键
 147   3                                              IR_KeyAct = 0;

⌨️ 快捷键说明

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