📄 gdram-wireless.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 + -