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

📄 解码.lst

📁 单片机c语言 用于DY500或同类型的开发板
💻 LST
字号:
C51 COMPILER V7.06   解码                                                                  08/18/2008 07:13:16 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 解码
OBJECT MODULE PLACED IN 解码.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE 解码.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*copyright 2007,ShangHai  HaoTun Electronic Technology co.,Ltd
   2           *
   3           *This sample is used for control light by infrared .
   4           *
   5           *write by Shifang
   6           *
   7           *V1.1
   8           */
   9           //使用12M晶振 适用于TC9012芯片,其他芯片请自行更改解码时序
  10          #include<reg52.h>
  11          #include<stdio.h>
  12          #include<intrins.h>
  13          
  14          ////////////////////////////////////////////////
  15          #define TURE 1
  16          #define FALSE 0
  17          
  18          ////////////////////////////////////////////////
  19          
  20          sbit IR=P3^2;//红外接口标志
  21          
  22          
  23          ////////////////////////////////////////////
  24          
  25          unsigned char  irtime;//红外用全局变量
  26          
  27          bit irpro_ok,irok;
  28          unsigned char IRcord[4];
  29          unsigned char   irdata[33];
  30          
  31          //////////////////////////////////////////////
  32          
  33          void Delay(unsigned char mS);
  34          void Ir_work(void);
  35          void Ircordpro(void);
  36          
  37          //////////////////////////////////////////////////////////////////  
  38          
  39          void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
  40          {
  41   1        irtime++;
  42   1      }
  43          
  44          ///////////////////////////////////////////////////////////////////////
  45          void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
  46          {
  47   1        static unsigned char  i;
  48   1        static bit startflag;
  49   1      
  50   1       if(startflag)
  51   1       {
  52   2         
  53   2          if(irtime<42&&irtime>=33)//引导码 TC9012的头码
  54   2                  i=0;
  55   2           
C51 COMPILER V7.06   解码                                                                  08/18/2008 07:13:16 PAGE 2   

  56   2                      irdata[i]=irtime;//一次存储32位电平宽度
  57   2                      irtime=0;
  58   2                      i++;
  59   2                               if(i==33)
  60   2                              {
  61   3                                       irok=1;
  62   3                                       i=0;
  63   3                                      }
  64   2                }
  65   1               
  66   1               else
  67   1                      {irtime=0;startflag=1;}
  68   1      
  69   1      }
  70          
  71          ////////////////////////////////////////////////////////////////////
  72          void TIM0init(void)//定时器0初始化
  73          {
  74   1      
  75   1        TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
  76   1        TH0=0x00;//reload value
  77   1        TL0=0x00;//initial value
  78   1        ET0=1;//开中断
  79   1        TR0=1;
  80   1      }
  81          ///////////////////////////////////////////////////////////////////
  82          void EX0init(void)
  83          {
  84   1       IT0 = 1;   // Configure interrupt 0 for falling edge on /INT0 (P3.2)
  85   1       EX0 = 1;   // Enable EX0 Interrupt
  86   1       EA = 1;  
  87   1      }
  88          /****************************************************************/
  89          
  90          /******************************************************************/
  91          
  92            void Ir_work(void)//红外键值散转程序
  93            {
  94   1             switch(IRcord[2])//判断第三个数码值
  95   1                       {
  96   2                               case 0:P0=0xf9;break;//1 显示相应的按键值
  97   2                               case 1:P0=0xa4;break;//2
  98   2                               case 2:P0=0xb0;break;//3
  99   2                               case 3:P0=0x99;break;//4
 100   2                               case 4:P0=0x92;break;//5
 101   2                               case 5:P0=0x82;break;//6
 102   2                               case 6:P0=0xf8;break;//7
 103   2                               case 7:P0=0x80;break;//8
 104   2                               case 8:P0=0x90;break;//9
 105   2      
 106   2                               }
 107   1      
 108   1         
 109   1      
 110   1                        irpro_ok=0;//处理完成标志
 111   1      
 112   1        }
 113          
 114          /*****************************************************************/
 115          void Ircordpro(void)//红外码值处理函数
 116          { 
 117   1        unsigned char i, j, k;
C51 COMPILER V7.06   解码                                                                  08/18/2008 07:13:16 PAGE 3   

 118   1        unsigned char cord,value;
 119   1      
 120   1        k=1;
 121   1        for(i=0;i<4;i++)//处理4个字节
 122   1           {
 123   2            for(j=1;j<=8;j++) //处理1个字节8位
 124   2               {
 125   3                cord=irdata[k];
 126   3                if(cord>7)//大于某值为1
 127   3                          {
 128   4                   value=value|0x80;
 129   4                              }
 130   3                else 
 131   3                          {
 132   4                   value=value;
 133   4                              }
 134   3                if(j<8)
 135   3                          {
 136   4                               value=value>>1;
 137   4                              }
 138   3                 k++;
 139   3               }
 140   2           IRcord[i]=value;
 141   2           value=0;     
 142   2           } irpro_ok=1;//处理完毕标志位置1
 143   1          
 144   1      }
 145          
 146          
 147          
 148          
 149          /////////////////////////////////////////////////////////////////
 150          
 151          void main(void)
 152          {
 153   1       EX0init(); // Enable Global Interrupt Flag
 154   1       TIM0init();//初始化定时器0
 155   1      
 156   1       P2=0x00;//8位数码管全部显示
 157   1      
 158   1       while(1)//主循环
 159   1         {
 160   2          if(irok)
 161   2                {   
 162   3                 Ircordpro();//码值处理
 163   3                 irok=0;
 164   3                }
 165   2      
 166   2          if(irpro_ok)//step press key
 167   2                {
 168   3                 Ir_work();//码值识别散转
 169   3                }
 170   2         }
 171   1      }
 172            


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    247    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.06   解码                                                                  08/18/2008 07:13:16 PAGE 4   

   DATA SIZE        =     39    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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