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

📄 红外解码.lst

📁 单片机项目24-基于VB的上位机程序设计
💻 LST
字号:
C51 COMPILER V8.02   红外解码                                                              04/07/2012 09:00:23 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          uchar code bit_ser[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; 
   5          uchar code seven_seg[] = {0xf9,0x8e,0xc0};      //1,f,0依次表示高电平,悬空,低电平
   6          uchar code address[]={1,1,1,1,1,1};     //存放预设的地址码高电平为2,低电平为0,悬空为1
   7          uchar disbuffer[6];        //数据显示缓冲区
   8          uchar DATEA[25];           //接收的信息
   9          uchar DATE[12];            //解码得到的数据
  10          bit dateflag;              //接收数据时的标记
  11          char num,i,j;              //用于接收和显示时计数
  12          sbit DATE_IN = P2^7;   //数据的接收端
  13          //定时器初始化函数
  14          void Timer_init()
  15          {
  16   1              TMOD = 0x11;
  17   1              TH0 = 0xFA;
  18   1              TL0 = 0x00;
  19   1              EA = 1;
  20   1              ET0 = 1; 
  21   1              TL1 = (65536-5000) % 256;
  22   1              TH1 = (65536-5000) / 256;
  23   1              ET1 = 1;
  24   1              TR1 = 1;
  25   1      }
  26          //Timer1中断处理函数,用于显示接收到的数据
  27          void time1_interrupt() interrupt 3
  28          {
  29   1              TL1 = (65536-5000) % 256;
  30   1              TH1 = (65536-5000) / 256;
  31   1              P0 = 0xff;
  32   1              P2 = bit_ser[i];
  33   1              P0 = seven_seg[disbuffer[i]];
  34   1              i ++;
  35   1              if(i >= 6)
  36   1                      i = 0;
  37   1      }
  38          //Timer0中断处理函数
  39          void timer0_interrupt() interrupt 1
  40          {
  41   1              if(dateflag)            //如果dateflag为高,说明是需要检测数据了,否则说明是同步码或误码(周期过长)
  42   1              {
  43   2                      dateflag = 0;
  44   2                      DATEA[num] = DATE_IN;
  45   2                      num ++;
  46   2                      TR0 = 0;
  47   2                      TH0 = 0xFA;
  48   2                      TL0 = 0x00;
  49   2                      TR0 = 1;
  50   2              }
  51   1              else                     
  52   1              {
  53   2                      num = 0;
  54   2              }
  55   1      }
C51 COMPILER V8.02   红外解码                                                              04/07/2012 09:00:23 PAGE 2   

  56          //数据接收函数
  57          void jieshou_date()
  58          {
  59   1              if(!dateflag)
  60   1              {
  61   2                      TR0 = 0;
  62   2                      TH0 = 0xFA;
  63   2                      TL0 = 0x90;                                                                                                                                                                                                       
  64   2                      TR0 = 1;
  65   2                      dateflag = 1;                                   
  66   2              }       
  67   1      }
  68          //从接收到的信息中提取数据
  69          void huoqu_date()
  70          {
  71   1              for(j = 0;j < 12;j ++)  //将接收到的24位电平信号转换成数据
  72   1              {
  73   2                      DATE[j] = DATEA[j + j] + DATEA[j + j + 1];
  74   2                      if(DATE[j] && ! DATEA[j + j])    //如果接收到的两位数据是0,1说明是误码
  75   2                      {
  76   3                              break;
  77   3                      }
  78   2              }
  79   1              num = 0;
  80   1              if(j == 12)
  81   1              {
  82   2                      if(DATE[0] == address[0] && DATE[1] == address[1]&& DATE[2] == address[2] &&
  83   2                              DATE[3] == address[3] && DATE[4] == address[4] && DATE[5] == address[5])
  84   2                      {                //如果解码得到的地址码和预设的地址码相同,就将解码得到的数据放入显示缓冲区
  85   3                              for(j = 0;j < 6; j++)
  86   3                              {
  87   4                                      disbuffer[j] = DATE[6 + j];
  88   4                              }       
  89   3                      }
  90   2              }       
  91   1      }
  92          //主函数
  93          void main()
  94          {
  95   1              Timer_init();
  96   1              while(1)
  97   1              {
  98   2                      if(!DATE_IN)             //说明有信号输入
  99   2                      {
 100   3                              jieshou_date();  //接收信息
 101   3                      } 
 102   2                      if(num >= 25)            //说明已经接收到了一组完整数据
 103   2                      {
 104   3                              huoqu_date();    //从接收的信息中提取数据                       
 105   3                      }                                       
 106   2              }
 107   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    328    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
C51 COMPILER V8.02   红外解码                                                              04/07/2012 09:00:23 PAGE 3   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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