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

📄 +

📁 51单片机配套C程序
💻
字号:
C51 COMPILER V7.50   IR                                                                    09/09/2010 18:00:01 PAGE 1   


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

line level    source

   1          /********************************************************************************
   2          *  描述:                                                                       *
   3          *         lcd1602显示 遥控键值读取器                                           *
   4          *         lcd1602显示 遥控器接p3.2                                             *
   5          *         喇叭接p1.5  继电器接p1.4                                             *
   6          *         17(40h)键按下,继电器吸合。19(04h)键按下,继电器关闭。               *
   7          *         连接方法:使用红外功能时 J1跳线短接                                                             
             -           *
   8          *******************************************************************************/
   9          #include <reg51.h>
  10          
  11          sbit IRIN = P3^2;         //红外接收器数据线
  12          sbit RELAY= P1^4;         //继电器驱动线
  13          sbit BEEP = P1^5;         //蜂鸣器驱动线
  14          
  15          void IRdelay(char x);  //x*0.14MS
  16          void beep();
  17          
  18          unsigned char  IRCOM[7];
  19          extern unsigned char Y0;
  20          /*******************************************************************/
  21          void IRInit()
  22          {
  23   1          IE |= 0x81;                 //允许总中断中断,使能 INT0 外部中断
  24   1          TCON |= 0x01;               //触发方式为脉冲负边沿触发
  25   1          
  26   1          IRIN=1;                    //I/O口初始化
  27   1          RELAY=1;    
  28   1      } 
  29          
  30          /**********************************************************/
  31          void IR_IN(void) interrupt 0 
  32          {
  33   1        unsigned char j,k,N=0;
  34   1           EX0 = 0;   
  35   1               IRdelay(15);
  36   1               if (IRIN==1) 
  37   1           { EX0 =1;
  38   2                 return;
  39   2                } 
  40   1                                 //确认IR信号出现
  41   1        while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
  42   1          {IRdelay(1);}
  43   1      
  44   1       for (j=0;j<4;j++)         //收集四组数据
  45   1       { 
  46   2        for (k=0;k<8;k++)        //每组数据有8位
  47   2        {
  48   3         while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
  49   3           {IRdelay(1);}
  50   3          while (!IRIN)          //等 IR 变为高电平
  51   3           {IRdelay(1);}
  52   3           while (IRIN)           //计算IR高电平时长
  53   3            {
  54   4          IRdelay(1);
C51 COMPILER V7.50   IR                                                                    09/09/2010 18:00:01 PAGE 2   

  55   4          N++;           
  56   4          if (N>=30)
  57   4               { EX0=1;
  58   5               return;}                  //0.14ms计数过长自动离开。
  59   4            }                        //高电平计数完毕                
  60   3           IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
  61   3           if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
  62   3           N=0;
  63   3        }//end for k
  64   2       }//end for j
  65   1         
  66   1         if (IRCOM[2]!=~IRCOM[3])
  67   1         { EX0=1;
  68   2           return; }
  69   1      
  70   1         IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
  71   1         IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位
  72   1      
  73   1         if(IRCOM[5]>9)
  74   1          { IRCOM[5]=IRCOM[5]+0x37;}
  75   1         else
  76   1                IRCOM[5]=IRCOM[5]+0x30;
  77   1      
  78   1         if(IRCOM[6]>9)
  79   1          { IRCOM[6]=IRCOM[6]+0x37;}
  80   1         else
  81   1                IRCOM[6]=IRCOM[6]+0x30;
  82   1      
  83   1               if(IRCOM[2]==0x4c) RELAY=0; //打开继电器
  84   1               else RELAY=1;               //关闭继电器
  85   1      
  86   1                beep();
  87   1      
  88   1      /*
  89   1      ;================================
  90   1      ;******  红外遥控器键值表  ******
  91   1      
  92   1      ;  4c     0e      4d      0d
  93   1      ;  0f     4f      4e      0c
  94   1      ;  0b     4b      4a      08
  95   1      ;  48     12      16      4C
  96   1      ;  40     48      04      00
  97   1      ;  02     05      54      4D
  98   1      ;  0A     1E      0E      1A
  99   1      ;  1C     14      0F      0C
 100   1      ;================================  */
 101   1      
 102   1               Y0=0;
 103   1               switch(IRCOM[2])
 104   1               {
 105   2                 case 0x0C: Y0=1; break;
 106   2                 case 0x18: Y0=2; break;
 107   2                 case 0x5E: Y0=3; break;
 108   2                 case 0x08: Y0=4; break;
 109   2                 case 0x1C: Y0=5; break;
 110   2                 case 0x5A: Y0=6; break;
 111   2                 case 0x42: Y0=7; break; 
 112   2                 case 0x52: Y0=8; break;
 113   2                 case 0x4A: Y0=9; break;
 114   2                 case 0x16: Y0=0; break;                 
 115   2         
 116   2               } 
C51 COMPILER V7.50   IR                                                                    09/09/2010 18:00:01 PAGE 3   

 117   1      
 118   1           EX0 = 1;   
 119   1      } 
 120          
 121          
 122          /**********************************************************/
 123          void IRdelay(unsigned char x)    //x*0.14MS
 124          {
 125   1       unsigned char i;
 126   1        while(x--)
 127   1       {
 128   2        for (i = 0; i<13; i++) {}
 129   2       }
 130   1      }
 131          
 132          
 133          
 134          
 135          void beep()
 136          {
 137   1        unsigned char i;
 138   1        for (i=0;i<100;i++)
 139   1         {
 140   2         IRdelay(4);
 141   2         BEEP=!BEEP;                 //BEEP取反
 142   2         } 
 143   1        BEEP=1;                      //关闭蜂鸣器
 144   1      }


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