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

📄 gdram-wireless.lst

📁 无线解码,用12864显示解码结果,00表示0,11表示1,01表示悬空
💻 LST
字号:
C51 COMPILER V7.06   GDRAM_WIRELESS                                                        12/17/2008 09:23:00 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE GDRAM_WIRELESS
OBJECT MODULE PLACED IN GDram-Wireless.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE GDram-Wireless.c LARGE BROWSE DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1           /* 3.解码原理
   2              编码器PT2262发送的编码信号是由:地址码、数据码、同步码组成的一个完整码字,最多可以有
   3              12位(A0-A11)三态地址端引脚(悬空、高电平、低电平),任意组合可提供531441个地址码。
   4              将编码器PT2262的A8位拉高,D3拉高,D0拉高,D1拉低,其余悬空。截取一段接收信号输出波形
   5              如图3所示,PT2262每发射一次,至少发送4组相同编码字码。每组字码间隔(低电平)约14ms。
   6              将其截获波形每组字码放大,如图4所示,一组字码有12位A/D码,每个A/D位是由2个脉冲表示:
   7              2个窄脉冲则表示"0";2个宽脉冲表示"1";1个窄脉冲和一个宽脉冲表示"F",即地址码"悬空";
   8              除此之外,每组字码之间还有一个同步码隔开,所以每组字码共计有25个宽度不同的脉冲。
   9              窄脉冲宽为200us;宽脉冲宽为1200us;两个窄脉冲之间宽1200us;两个宽脉冲间宽200us;
  10              宽窄脉冲间宽为200us;在4组字码中,每组的字码间隔为4000us。因此,采用单片机软件解码时,
  11              只要判断出起始码,并且识别起后面的字码脉冲宽度即可。 
  12           4.抗干扰措施
  13              常用抗干扰措施,是在硬件电路中采用电源滤波、电源稳压、数字地与模拟地隔离。在设计中,
  14              除采用上述方法外,还根据干扰信号与有效信号波形特征异同点,采用软件识别干扰信号和有效信号,
  15              从而实现"抗干扰"目的。
  16              当遥控器不发射时,由于空气中各杂波干扰,接收模块的信号输出端仍然会有干扰信号,截获波形如图5所示。
  17              观察其特征,低电平最长为3000us,最短数十微秒;高电平最长500us,最短数微秒。与发射时接收到的规则
  18              波形(即非有效信号)相比较,低电平为1400us的信号,是有效信号,而不是干扰信号。并将A0-A3 
  19              4个地址焊接到高电平上作为发射编码信号的帧前码,可解决误码率和干扰问题。 
  20           5.软件解码
  21              步骤1:单片机循环记录接收模块信号电平脉冲的长度,高低电平都记录。
  22              步骤2:从记录高低电平组成的波形中,找出连续8个1200?s时长的脉冲信号为特征波形段,即帧前码。
  23               (A0-A3 4个地址焊接到高电平上作为发射编码信号的帧前码)
  24              步骤3:确认帧前码之间是否存在一个时长为14000us的低电平,如果有(则说明不是干扰码),
  25              将解码并储存结果,然后根据指令码执行相应控制功能。如没有,则放弃记录的数据,重复步骤1,
  26              直到满足条件为止。 */
  27          
  28          #include<STC2052.h>
  29          #include"LCM12864.h"
  30          #include <math.h>
  31          
  32          #define NBW       50    //窄脉冲位宽 
  33          #define STEP1     20  //宽脉冲位宽 
  34          #define WBW       150   //宽脉冲位宽 
  35          #define STEP3     40  //宽脉冲位宽 
  36          #define SBW       1200  //同步码低电平宽度
  37          #define STEP2     100 // 同步码低电平宽度误差
  38          #define PurseNum  100
  39          #define ValidNum  24
  40          
  41          unsigned int k,i=0,j;
  42          unsigned int bite_H[PurseNum];  //存高电平,至少接收2组
  43          unsigned int bite_L[PurseNum]; //存低电平
  44          unsigned char PurseH[PurseNum];
  45          sbit DIN = P3^2;    //无线信号接收端
  46          sbit LED = P3^7;    //驱动LED
  47          bit DisplayFlag = 0;
  48          
  49          void bianma() //记录高低电平脉宽
  50          {
  51   1        for(j=0;j<PurseNum;j++) { bite_H[j]=0;bite_L[j]=0; PurseH[j]=0; }
  52   1        for(j=0;j<PurseNum;j++) //用计数方式记录脉宽
  53   1        {
  54   2          while(DIN){ bite_H[j]++;}
  55   2          while(!DIN) {bite_L[j]++;}
C51 COMPILER V7.06   GDRAM_WIRELESS                                                        12/17/2008 09:23:00 PAGE 2   

  56   2        }
  57   1      }
  58          void yima()
  59          {
  60   1        for(j=0;j<PurseNum;j++)
  61   1        {
  62   2          if(abs(NBW-bite_H[j])<STEP1)
  63   2          {
  64   3            if((abs(SBW-bite_L[j])<STEP2))
  65   3            {
  66   4              if((abs(NBW-bite_H[j+1])<STEP1)|(abs(WBW-bite_H[j+1])<STEP3))
  67   4              {
  68   5              for(i=0;i<ValidNum;i++)
  69   5              {
  70   6                 if(bite_H[j+1+i]<NBW){ PurseH[i]= 0; }
  71   6                 else if(bite_H[j+1+i]<WBW){ PurseH[i]= 1; }
  72   6              }
  73   5              break; // 跳出for(j=0;j<PurseNum;j++) 
  74   5              }
  75   4            }
  76   3          }
  77   2        }
  78   1      }
  79          
  80          
  81          //unsigned char tab_dotH[8]={0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x00};
  82          //unsigned char tab_dotL[8]={0x00,0x00,0x00,0x00,0x08,0x04,0x02,0x01};
  83          bit UpDw=1; // 1:Up; 0:Down
  84          void LedFlash()
  85          {
  86   1        LED = 0; Delay(50);
  87   1        LED = 1; Delay(50);
  88   1      }
  89          void DrawSize()
  90          {
  91   1        Draw0(8,25,1);
  92   1        Draw2(8,17,1);
  93   1        Draw4(8,9,1);
  94   1        Draw6(8,1,1);
  95   1        Draw8(0,25,1);
  96   1        Draw10(0,17,1);
  97   1        Draw12(0,9,1);
  98   1        Draw14(0,1,1);
  99   1      }
 100          //------------------------------------------------------------------------------
 101          main()
 102          {  
 103   1        Clear_Gdram();
 104   1        Draw_Half_Rectangle();
 105   1        DrawSize();
 106   1        i=8; j=30; UpDw=1;
 107   1        P3M1 = 0x04; 
 108   1        P3M0 = 0x00;
 109   1        InitLcm();
 110   1        while(1)
 111   1        { 
 112   2          bianma();
 113   2          yima();
 114   2          WriteCom_Dat(0x80,0);                                
 115   2          for(i=0;i<ValidNum;i++) {if(PurseH[i]==1) DisplayFlag = 1;}
 116   2      //    if(DisplayFlag)
 117   2          { 
C51 COMPILER V7.06   GDRAM_WIRELESS                                                        12/17/2008 09:23:00 PAGE 3   

 118   3            for(i=0;i<16;i++) {WriteCom_Dat(StringDigit[PurseH[i]],1);} 
 119   3            for(i=16;i<24;i++) {WriteCom_Dat(StringDigit[PurseH[i]],1);} 
 120   3            DisplayFlag = 0;
 121   3          }
 122   2      /*    if(i==8)
 123   2          {
 124   2            Gdram_Write_Word(i,j,0xff,0xff);
 125   2            UpDw = 1; i=i+1; 
 126   2          }
 127   2          Gdram_Write_Word(i,j,0x80,0x00);
 128   2      //    for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
 129   2          if(UpDw){ j=j-1;}else{ j=j+1;}
 130   2          if((j==0)&&(UpDw))
 131   2          {
 132   2            if(i>=8){  Gdram_Write_Word(i,j,0x80,0x00); i=i-8; j=31;}
 133   2            else { Gdram_Write_Word(i,j,0xff,0xff); UpDw= 0;i=i+1;}
 134   2            if(i==8)
 135   2            {
 136   2              for(k=1;k<32;k++) Gdram_Write_Word(7,k,0x80,0x01); 
 137   2              for(k=0;k<31;k++) Gdram_Write_Word(15,k,0x80,0x01); 
 138   2              i=17;
 139   2            }
 140   2          }
 141   2          if((j==31)&&(!UpDw))
 142   2          {
 143   2            if(i<8){ Gdram_Write_Word(i,j,0x80,0x00); i=i+8; j= 0;}
 144   2            else { j=30;Gdram_Write_Word(i,j,0xff,0xff);  UpDw= 1; i=i+1; }
 145   2          }
 146   2          if(i>16)
 147   2          {
 148   2            Delay(5000);
 149   2            Clear_Gdram();
 150   2            Draw_Half_Rectangle();
 151   2            DrawSize();
 152   2            i=8; j=30; UpDw=1;
 153   2          } */
 154   2          LedFlash();                               
 155   2        }
 156   1      }
 157          //------------------------------------------------------------------------------
 158          
 159          /*
 160          //------------------------------------------------------------------------------
 161          main()
 162          {  
 163            Clear_Gdram();
 164            Draw_Half_Rectangle();
 165            DrawSize();
 166            i=8; j=30; UpDw=1;
 167            while(1)
 168            { 
 169              if(i==8)
 170              {
 171                Gdram_Write_Word(i,j,0xff,0xff);
 172                UpDw = 1; i=i+1; 
 173              }
 174              Gdram_Write_Word(i,j,0x80,0x00);
 175          //    for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
 176              if(UpDw){ j=j-1;}else{ j=j+1;}
 177              if((j==0)&&(UpDw))
 178              {
 179                if(i>=8){  Gdram_Write_Word(i,j,0x80,0x00); i=i-8; j=31;}
C51 COMPILER V7.06   GDRAM_WIRELESS                                                        12/17/2008 09:23:00 PAGE 4   

 180                else { Gdram_Write_Word(i,j,0xff,0xff); UpDw= 0;i=i+1;}
 181                if(i==8)
 182                {
 183                  for(k=1;k<32;k++) Gdram_Write_Word(7,k,0x80,0x01); 
 184                  for(k=0;k<31;k++) Gdram_Write_Word(15,k,0x80,0x01); 
 185                  i=17;
 186                }
 187              }
 188              if((j==31)&&(!UpDw))
 189              {
 190                if(i<8){ Gdram_Write_Word(i,j,0x80,0x00); i=i+8; j= 0;}
 191                else { j=30;Gdram_Write_Word(i,j,0xff,0xff);  UpDw= 1; i=i+1; }
 192              }
 193              if(i>16)
 194              {
 195                Delay(5000);
 196                Clear_Gdram();
 197                Draw_Half_Rectangle();
 198                DrawSize();
 199                i=8; j=30; UpDw=1;
 200              }
 201              LedFlash();                               
 202            }
 203          }
 204          //------------------------------------------------------------------------------
 205          main()
 206          {  
 207            Clear_Gdram();
 208            Draw_Half_Rectangle();
 209            DrawSize();
 210            i=0; j=31; UpDw=1;
 211            while(1)
 212            { 
 213              if(i==0)
 214              {
 215                Gdram_Write_Word(i,j,0xff,0xff);
 216                i=i+1; UpDw = 1;
 217              }
 218              Gdram_Write_Word(i,j,0x80,0x00);
 219          //    for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
 220              if(UpDw){ j=j-1;}else{ j=j+1;}
 221              if(j==0)
 222              {
 223                Gdram_Write_Word(i,j,0xff,0xff);
 224                i=i+1; UpDw = 0;
 225                if(i==8){for(k=1;k<31;k++) Gdram_Write_Word(7,k,0x80,0x01);} 
 226              }
 227              if(j==31)
 228              {
 229                Gdram_Write_Word(i,j,0xff,0xff);
 230                i=i+1; UpDw = 1;
 231              }
 232              if(i>8)
 233              {
 234                Delay(5000);
 235                Clear_Gdram();
 236                Draw_Half_Rectangle();
 237                DrawSize();
 238                i=0; j=31; UpDw=1;
 239              }
 240              LedFlash();                               
 241            }
C51 COMPILER V7.06   GDRAM_WIRELESS                                                        12/17/2008 09:23:00 PAGE 5   

 242          }
 243          
 244          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3637    ----
   CONSTANT SIZE    =      2    ----
   XDATA SIZE       =    517      46
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       9
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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