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

📄 yaokongcebianma.lst

📁 测遥控器编码
💻 LST
字号:
C51 COMPILER V7.50   YAOKONGCEBIANMA                                                       09/29/2007 21:03:29 PAGE 1   


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

line level    source

   1          //本程序是用来识别 不同的遥控器的按键编码的,对于我们拿到的一块遥控器,
   2          //想用它来做实验,但是又不知道对应按键的编码,那是一件很恼火的事情,
   3          //作者就是为了解决这个问题而特意把一个遥控程序经过修攺而得此功能
   4          #include <reg51.h>
   5          #define N 3
   6          
   7          sbit Led  = P1 ^ 7;
   8          sbit P3_2 = P3 ^ 2;
   9          sbit P1_0 = P1 ^ 0;
  10          sbit P1_2 = P1 ^ 2;
  11          sbit P1_1 = P1 ^ 1;
  12          sbit P1_3 = P1 ^ 3;
  13          sbit P2_0 = P2 ^ 0;
  14          sbit P2_1 = P2 ^ 1;
  15          sbit P2_2 = P2 ^ 2;
  16          
  17          static unsigned char data IRCode[3],IRCON,IRCON2;
  18          static unsigned char data DT;
  19          unsigned char i;
  20                                                                  
  21          unsigned char SEG_TAB1[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
  22                                      0xa0, 0x83, 0xc6, 0xa1,0x84, 0x8e };//0-f十六进制数数字
  23          unsigned int code daima[] = {  0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,0X0E,
             -0X0F
  24          /*定义一个数组0~255*/         ,0X10,0X11,0X12,0X13,0X14,0X15,0X16,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,0X1E,
             -0X1F
  25                                                                ,0X20,0X21,0X22,0X23,0X24,0X25,0X26,0X27,0X28,0X29,0X2A,0X2B,0X2C,0X2D,0X2E,0X2F
  26                                                                ,0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,0X3A,0X3B,0X3C,0X3D,0X3E,0X3F
  27                                                                ,0X40,0X41,0X42,0X43,0X44,0X45,0X46,0X47,0X48,0X49,0X4A,0X4B,0X4C,0X4D,0X4E,0X4F
  28                                                                ,0X50,0X51,0X52,0X53,0X54,0X55,0X56,0X57,0X58,0X59,0X5A,0X5B,0X5C,0X5D,0X5E,0X5F
  29                                                                ,0X60,0X61,0X62,0X63,0X64,0X65,0X66,0X67,0X68,0X69,0X6A,0X6B,0X6C,0X6D,0X6E,0X6F
  30                                                                ,0X70,0X71,0X72,0X73,0X74,0X75,0X76,0X77,0X78,0X79,0X8A,0X7B,0X7C,0X7D,0X7E,0X7F
  31                                                                ,0X80,0X81,0X82,0X83,0X84,0X85,0X86,0X87,0X88,0X89,0X8A,0X8B,0X8C,0X8D,0X8E,0X8F
  32                                                                ,0X90,0X91,0X92,0X93,0X94,0X95,0X96,0X97,0X98,0X99,0X9A,0X9B,0X9C,0X9D,0X9E,0X9F
  33                                                                ,0XA0,0XA1,0XA2,0XA3,0XA4,0XA5,0XA6,0XA7,0XA8,0XA9,0XAA,0XAB,0XAC,0XAD,0XAE,0XAF
  34                                                                ,0XB0,0XB1,0XB2,0XB3,0XB4,0XB5,0XB6,0XB7,0XB8,0XB9,0XBA,0XBB,0XBC,0XBD,0XBE,0XBF
  35                                                                ,0XC0,0XC1,0XC2,0XC3,0XC4,0XC5,0XC6,0XC7,0XC8,0XC9,0XCA,0XCB,0XCC,0XCD,0XCE,0XCF
  36                                                                ,0XD0,0XD1,0XD2,0XD3,0XD4,0XD5,0XD6,0XD7,0XD8,0XD9,0XDA,0XDB,0XDC,0XDD,0XDE,0XDF
  37                                                                ,0XE0,0XE1,0XE2,0XE3,0XE4,0XE5,0XE6,0XE7,0XE8,0XE9,0XEA,0XEB,0XEC,0XED,0XEE,0XEF
  38                                                                ,0XF0,0XF1,0XF2,0XF3,0XF4,0XF5,0XF6,0XF7,0XF8,0XF9,0XFA,0XFB,0XFC,0XFD,0XFE,0XFF};
  39          /*******************************************************************************************/
  40          void Delay(unsigned char a) //延时子程序     
  41          {
  42   1          unsigned char j;                                                                                      
             -       
  43   1              while(a-- != 0)                                              
  44   1              {
  45   2                   for (j = 0; j < 100; j++);                                                             
  46   2              }                                                                                           
  47   1      }
  48          /*******************************************************************************************/ 
  49          void Disp(void)
  50          {   
  51   1                      P2_0= 0;//第7个数码管显示十六进制的十位
  52   1                      P0 = SEG_TAB1[ (i / 16 )];      
C51 COMPILER V7.50   YAOKONGCEBIANMA                                                       09/29/2007 21:03:29 PAGE 2   

  53   1                      Delay(N);       
  54   1                      P2_0 = 1;               
  55   1      
  56   1                      P2_1 = 0;//第8个数码管显示十六进制的个位
  57   1                      P0 = SEG_TAB1[ i % 16 ];        
  58   1                      Delay(N);       
  59   1                      P2_1 = 1;
  60   1      }
  61          /*******************************************************************************************/
  62          void timeint(void) interrupt 1 using 2//定时器0中断处理
  63          {
  64   1              TH0=0XFD;     //12M: TH0=0XFC;TL0=0XE0;11.0592:TH0=0XFD;TL0=0X1E;
  65   1              TL0=0X1E;     // 设定时值为800us  500:FE0C
  66   1      
  67   1              if (IRCON<4)
  68   1              {
  69   2                      if (IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
  70   2                      {
  71   3                              IRCON2++;
  72   3                              IRCode[IRCON]=IRCode[IRCON]<<1;     //每读一次放入变量中的二进制的一个位,每次左移一位
  73   3                              IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
  74   3                      }
  75   2                      else
  76   2                      {
  77   3                              IRCON++;  //填满一个字节,指向下一个变量
  78   3                              IRCON2=0; //计数清零
  79   3                      }
  80   2              }
  81   1              else
  82   1              {
  83   2                      TR0 = 0; //关闭定时器
  84   2                      ET0 = 0; //定时器0中断关闭
  85   2                      if ((IRCode[1] != 0xFF) && (IRCode[2] != 0xFF))
  86   2                      {
  87   3                              if (IRCode[1] == 0x55)
  88   3                              {   
  89   4                                 DT = 1;                      
  90   4                              }
  91   3                      }
  92   2              }
  93   1      }
  94          
  95          /***********************************************************************************/
  96          void INT0Fun(void) interrupt 0 using 2//INT0中断
  97          {
  98   1              EX0 = 0; //外部中断0关闭
  99   1              ET0 = 1; //定时器0中断打开
 100   1              TH0=0XFD;
 101   1              TL0=0X1E; //设定时值为800us
 102   1      
 103   1              for (IRCON=0; IRCON<3; IRCON++)
 104   1                       IRCode[IRCON] = 0;
 105   1      
 106   1              IRCON = 0;
 107   1              IRCON2 = 0; //计数清零
 108   1              TR0 = 1;//开始计数
 109   1      }
 110          /************************************************************************************/
 111          void main(void)
 112          {
 113   1              unsigned int de;
 114   1              TMOD = 0x01; //定时器0方式1
C51 COMPILER V7.50   YAOKONGCEBIANMA                                                       09/29/2007 21:03:29 PAGE 3   

 115   1              EA = 1;      //允许CPU中断
 116   1              IT0 = 1;     //INT0下降沿有效
 117   1              EX0 = 1;     //开INT0中断
 118   1              P1 =  0xff;
 119   1              do
 120   1              {       
 121   2                  Disp();Led = 1; Disp();    //LED点亮     //调用显示程序
 122   2                      Disp();Led = 0; Disp();    //LED熄灭     //调用显示程序
 123   2                      if (DT)
 124   2                      {
 125   3                              EX0=0;  //关闭外中断
 126   3                              for (de=0; de<30000; de++) //这里起到按键值正确后会有一个延时,防止重复按键
 127   3                                   Led = 1;
 128   3                              for (de=0; de<30000; de++)
 129   3                                   Led = 0;
 130   3                                   DT = 0;
 131   3                      for (i=0; i<256; i++)
 132   3                              {
 133   4                      if(daima[i] ==  IRCode[2])
 134   4                                      {
 135   5                                          P1_3 = 0; 
 136   5                          Disp();
 137   5                                              break;//当daima[i]=IRCode[2]时跳出循环
 138   5                                      }
 139   4                              }
 140   3                      }
 141   2                      EX0 = 1;//开中断
 142   2                      Disp();     //调用显示程序
 143   2              }while(1);
 144   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    309    ----
   CONSTANT SIZE    =    512    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23    ----
   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 + -