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

📄 解码.lst

📁 单片机开发板配套52个程序(c语言源代码)
💻 LST
字号:
C51 COMPILER V7.06   解码                                                                  04/21/2011 22:06:50 PAGE 1   


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

stmt level    source

   1          /*-----------------------------------------------
   2            名称:21键遥控器红外解码数码管显示
   3            日期:2009.5
   4            修改:无
   5            内容:按配套遥控器上1-9会在数码管上对应显示
   6          ------------------------------------------------*/
   7          #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
   8          #include<stdio.h>
   9          #include<intrins.h>
  10          
  11          
  12          #define TURE 1
  13          #define FALSE 0
  14          
  15          
  16          sbit IR=P3^2;  //红外接口标志
  17          
  18          unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  19          
  20          /******************************************************************/
  21          /*                    变量声明                                    */
  22          /******************************************************************/
  23          
  24          unsigned char  irtime;//红外用全局变量
  25          
  26          bit irpro_ok,irok;
  27          unsigned char IRcord[4];
  28          unsigned char   irdata[33];
  29          
  30          /******************************************************************/
  31          /*                    函数声明                                    */
  32          /******************************************************************/
  33          
  34          void Delay(unsigned char mS);
  35          void Ir_work(void);
  36          void Ircordpro(void);
  37          
  38          /******************************************************************/
  39          /*                    定时器0中断服务函数                         */
  40          /******************************************************************/
  41          
  42          void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
  43          {
  44   1        irtime++;                             //用于计数2个下降沿之间的时间
  45   1      }
  46          
  47          /******************************************************************/
  48          /*                    外部中断0函数                               */
  49          /******************************************************************/
  50          void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
  51          {
  52   1        static unsigned char  i;             //接收红外信号处理
  53   1        static bit startflag;                //是否开始处理标志位
  54   1      
  55   1       if(startflag)                         
C51 COMPILER V7.06   解码                                                                  04/21/2011 22:06:50 PAGE 2   

  56   1       {
  57   2         
  58   2          if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
  59   2                  i=0;
  60   2           
  61   2                      irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
  62   2                      irtime=0;
  63   2                      i++;
  64   2                               if(i==33)
  65   2                              {
  66   3                                       irok=1;
  67   3                                       i=0;
  68   3                                      }
  69   2                }
  70   1               
  71   1               else
  72   1                      {irtime=0;startflag=1;}
  73   1      
  74   1      }
  75          
  76          /******************************************************************/
  77          /*                   定时器0初始化                                */
  78          /******************************************************************/
  79          void TIM0init(void)//定时器0初始化
  80          {
  81   1      
  82   1        TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
  83   1        TH0=0x00; //重载值
  84   1        TL0=0x00; //初始化值
  85   1        ET0=1;    //开中断
  86   1        TR0=1;    
  87   1      }
  88          /******************************************************************/
  89          /*                   外部中断初始化                               */
  90          /******************************************************************/
  91          void EX0init(void)
  92          {
  93   1       IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
  94   1       EX0 = 1;   //使能外部中断
  95   1       EA = 1;    //开总中断
  96   1      }
  97          /******************************************************************/
  98          /*                    红外键值处理                                */
  99          /******************************************************************/
 100          
 101            void Ir_work(void)//红外键值散转程序
 102            {
 103   1             switch(IRcord[2])//判断第三个数码值
 104   1                       {
 105   2                               case 0x16:P0=dofly[0];break;//0
 106   2                               case 0x0c:P0=dofly[1];break;//1 显示相应的按键值
 107   2                               case 0x18:P0=dofly[2];break;//2
 108   2                               case 0x5e:P0=dofly[3];break;//3
 109   2                               case 0x08:P0=dofly[4];break;//4
 110   2                               case 0x1c:P0=dofly[5];break;//5
 111   2                               case 0x5a:P0=dofly[6];break;//6
 112   2                               case 0x42:P0=dofly[7];break;//7
 113   2                               case 0x52:P0=dofly[8];break;//8
 114   2                               case 0x4a:P0=dofly[9];break;//9
 115   2      
 116   2                               }
 117   1      
C51 COMPILER V7.06   解码                                                                  04/21/2011 22:06:50 PAGE 3   

 118   1                        irpro_ok=0;//处理完成标志
 119   1      
 120   1        }
 121          /******************************************************************/
 122          /*                    红外解码函数处理                            */
 123          /******************************************************************/
 124          void Ircordpro(void)//红外码值处理函数
 125          { 
 126   1        unsigned char i, j, k;
 127   1        unsigned char cord,value;
 128   1      
 129   1        k=1;
 130   1        for(i=0;i<4;i++)      //处理4个字节
 131   1           {
 132   2            for(j=1;j<=8;j++) //处理1个字节8位
 133   2               {
 134   3                cord=irdata[k];
 135   3                if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
 136   3                          {
 137   4                   value=value|0x80;
 138   4                              }
 139   3                else 
 140   3                          {
 141   4                   value=value;
 142   4                              }
 143   3                if(j<8)
 144   3                          {
 145   4                               value=value>>1;
 146   4                              }
 147   3                 k++;
 148   3               }
 149   2           IRcord[i]=value;
 150   2           value=0;     
 151   2           } irpro_ok=1;//处理完毕标志位置1
 152   1          
 153   1      }
 154          
 155          
 156          
 157          
 158          /////////////////////////////////////////////////////////////////
 159          
 160          void main(void)
 161          {
 162   1       EX0init(); //初始化外部中断
 163   1       TIM0init();//初始化定时器
 164   1      
 165   1       P2=0x00;//1位数码管全部显示
 166   1      
 167   1       while(1)//主循环
 168   1         {
 169   2          if(irok)                        //如果接收好了进行红外处理
 170   2                {   
 171   3                 Ircordpro();
 172   3                 irok=0;
 173   3                }
 174   2      
 175   2          if(irpro_ok)                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
 176   2                {
 177   3                 Ir_work();
 178   3                }
 179   2         }
C51 COMPILER V7.06   解码                                                                  04/21/2011 22:06:50 PAGE 4   

 180   1      }
 181            
 182            


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