?? lcm-gdram.c
字號:
/* 3.解碼原理
編碼器PT2262發送的編碼信號是由:地址碼、數據碼、同步碼組成的一個完整碼字,最多可以有
12位(A0-A11)三態地址端引腳(懸空、高電平、低電平),任意組合可提供531441個地址碼。
將編碼器PT2262的A8位拉高,D3拉高,D0拉高,D1拉低,其余懸空。截取一段接收信號輸出波形
如圖3所示,PT2262每發射一次,至少發送4組相同編碼字碼。每組字碼間隔(低電平)約14ms。
將其截獲波形每組字碼放大,如圖4所示,一組字碼有12位A/D碼,每個A/D位是由2個脈沖表示:
2個窄脈沖則表示"0";2個寬脈沖表示"1";1個窄脈沖和一個寬脈沖表示"F",即地址碼"懸空";
除此之外,每組字碼之間還有一個同步碼隔開,所以每組字碼共計有25個寬度不同的脈沖。
窄脈沖寬為200us;寬脈沖寬為1200us;兩個窄脈沖之間寬1200us;兩個寬脈沖間寬200us;
寬窄脈沖間寬為200us;在4組字碼中,每組的字碼間隔為4000us。因此,采用單片機軟件解碼時,
只要判斷出起始碼,并且識別起后面的字碼脈沖寬度即可。
4.抗干擾措施
常用抗干擾措施,是在硬件電路中采用電源濾波、電源穩壓、數字地與模擬地隔離。在設計中,
除采用上述方法外,還根據干擾信號與有效信號波形特征異同點,采用軟件識別干擾信號和有效信號,
從而實現"抗干擾"目的。
當遙控器不發射時,由于空氣中各雜波干擾,接收模塊的信號輸出端仍然會有干擾信號,截獲波形如圖5所示。
觀察其特征,低電平最長為3000us,最短數十微秒;高電平最長500us,最短數微秒。與發射時接收到的規則
波形(即非有效信號)相比較,低電平為1400us的信號,是有效信號,而不是干擾信號。并將A0-A3
4個地址焊接到高電平上作為發射編碼信號的幀前碼,可解決誤碼率和干擾問題。
5.軟件解碼
步驟1:單片機循環記錄接收模塊信號電平脈沖的長度,高低電平都記錄。
步驟2:從記錄高低電平組成的波形中,找出連續8個1200?s時長的脈沖信號為特征波形段,即幀前碼。
(A0-A3 4個地址焊接到高電平上作為發射編碼信號的幀前碼)
步驟3:確認幀前碼之間是否存在一個時長為14000us的低電平,如果有(則說明不是干擾碼),
將解碼并儲存結果,然后根據指令碼執行相應控制功能。如沒有,則放棄記錄的數據,重復步驟1,
直到滿足條件為止。 */
#include<STC2052.h>
#include"LCM12864.h"
unsigned int k,i=0,j;
sbit DIN = P3^2; //無線信號接收端
sbit LED = P3^7; //驅動LED
//unsigned char tab_dotH[8]={0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x00};
//unsigned char tab_dotL[8]={0x00,0x00,0x00,0x00,0x08,0x04,0x02,0x01};
bit UpDw=1; // 1:Up; 0:Down
void LedFlash()
{
LED = 0; Delay(50);
LED = 1; Delay(50);
}
void DrawSize()
{
Draw0(8,25,1);
Draw2(8,17,1);
Draw4(8,9,1);
Draw6(8,1,1);
Draw8(0,25,1);
Draw10(0,17,1);
Draw12(0,9,1);
Draw14(0,1,1);
}
//------------------------------------------------------------------------------
main()
{
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=8; j=30; UpDw=1;
while(1)
{
if(i==8)
{
Gdram_Write_Word(i,j,0xff,0xff);
UpDw = 1; i=i+1;
}
Gdram_Write_Word(i,j,0x80,0x00);
// for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
if(UpDw){ j=j-1;}else{ j=j+1;}
if((j==0)&&(UpDw))
{
if(i>=8){ Gdram_Write_Word(i,j,0x80,0x00); i=i-8; j=31;}
else { Gdram_Write_Word(i,j,0xff,0xff); UpDw= 0;i=i+1;}
if(i==8)
{
for(k=1;k<32;k++) Gdram_Write_Word(7,k,0x80,0x01);
for(k=0;k<31;k++) Gdram_Write_Word(15,k,0x80,0x01);
i=17;
}
}
if((j==31)&&(!UpDw))
{
if(i<8){ Gdram_Write_Word(i,j,0x80,0x00); i=i+8; j= 0;}
else { j=30;Gdram_Write_Word(i,j,0xff,0xff); UpDw= 1; i=i+1; }
}
if(i>16)
{
Delay(5000);
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=8; j=30; UpDw=1;
}
LedFlash();
}
}
//------------------------------------------------------------------------------
/*
//------------------------------------------------------------------------------
main()
{
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=8; j=30; UpDw=1;
while(1)
{
if(i==8)
{
Gdram_Write_Word(i,j,0xff,0xff);
UpDw = 1; i=i+1;
}
Gdram_Write_Word(i,j,0x80,0x00);
// for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
if(UpDw){ j=j-1;}else{ j=j+1;}
if((j==0)&&(UpDw))
{
if(i>=8){ Gdram_Write_Word(i,j,0x80,0x00); i=i-8; j=31;}
else { Gdram_Write_Word(i,j,0xff,0xff); UpDw= 0;i=i+1;}
if(i==8)
{
for(k=1;k<32;k++) Gdram_Write_Word(7,k,0x80,0x01);
for(k=0;k<31;k++) Gdram_Write_Word(15,k,0x80,0x01);
i=17;
}
}
if((j==31)&&(!UpDw))
{
if(i<8){ Gdram_Write_Word(i,j,0x80,0x00); i=i+8; j= 0;}
else { j=30;Gdram_Write_Word(i,j,0xff,0xff); UpDw= 1; i=i+1; }
}
if(i>16)
{
Delay(5000);
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=8; j=30; UpDw=1;
}
LedFlash();
}
}
//------------------------------------------------------------------------------
main()
{
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=0; j=31; UpDw=1;
while(1)
{
if(i==0)
{
Gdram_Write_Word(i,j,0xff,0xff);
i=i+1; UpDw = 1;
}
Gdram_Write_Word(i,j,0x80,0x00);
// for(k=0;k<8;k++) Gdram_Write_Word(i,j,tab_dotH[k],tab_dotL[k]);
if(UpDw){ j=j-1;}else{ j=j+1;}
if(j==0)
{
Gdram_Write_Word(i,j,0xff,0xff);
i=i+1; UpDw = 0;
if(i==8){for(k=1;k<31;k++) Gdram_Write_Word(7,k,0x80,0x01);}
}
if(j==31)
{
Gdram_Write_Word(i,j,0xff,0xff);
i=i+1; UpDw = 1;
}
if(i>8)
{
Delay(5000);
Clear_Gdram();
Draw_Half_Rectangle();
DrawSize();
i=0; j=31; UpDw=1;
}
LedFlash();
}
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -