在這個程序里有一條我不知道什么意思,看了好幾天也沒搞懂,請幫我解一下:Rem_Code[j]++;
; 效果:按手持式4鍵發射器上的任意按鍵,程序能解碼出來,并在發光管上顯示 ;======= 模擬 pt2272 接收========================= ************************************************/
#include"AT89x52.h" //#include"global.h" #include"intrins.h" #include"51hei.H"
#define uchar unsigned char #define uint unsigned int
uchar Rem_Code[3]; uint TimeCount; sbit Get_Rem=P3^2;
/* //延時函數 void Delay100us(void) { uchar i; for(i=0;i<55;i++) { _nop_(); } } */
void delay8(uint t) { while(--t); }
void Delay100us(void) { delay8(13); //8-18 }
//因為他的格式是00表示"0"11表示"1"01表示"F"所以我們要把12位乘以2等于24位剛好是3個字節 //第一二個字節是地址碼,第三個字節是數據碼 //發射芯片采用的是PT2262芯片用4.7M的震蕩電阻315M發射 //遙控我們全部默認地址碼是 FFFFFFFF 單片機解碼出來就是0x55 0x55 //遙控處理函數 void Remote_Process(void) { uchar i,j,Count=0; Delay100us(); if(TimeCount>0)//當按鍵按下釋放后該值不在賦值就同通過遞減直到該值等于0 {//等于0后表示按鍵釋放 TimeCount--; } if(Get_Rem==0)//如果有低電平就進入解碼 { for(Count=0;Count<100;Count++)//判斷12毫秒左右的引導碼 { Delay100us();//100us*100=10ms if(Get_Rem==1)//如果在延時10毫秒期間有高電平出現就是干擾信號退出解碼 { return; } } while(Get_Rem==0);//等待低電平結束 for(j=0;j<3;j++)//8位地址碼加4位數據碼 { for(i=0;i<8;i++) { Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒高電平還沒有結束認為是干擾退出解碼 {//理論上是1.2毫秒,我們2毫秒留有余量,防止遙控批量中的誤差 return; } }while(Get_Rem==1);//計算高平時間并等待結束 Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒低平還沒有結束認為是干擾退出解碼 { return; } }while(Get_Rem==0);//計算低電平時間并等待結束 Rem_Code[j]<<=1;//數據從高位開始接收所以每次向左移一位 if(Count<8)//如果低電平時間小于800毫秒認為該位為1 { Rem_Code[j]++; } } } //huqin ACC=Rem_Code[2]; if(ACC==0xc0) P0=0xef; if(ACC==0x30) P0=0xdf; if(ACC==0x0c) P0=0xbf; if(ACC==0x03) P0=0x7f;
if(TimeCount==0)//為0表示是新的一次按下對其進行處理 {//如過該值大于0表示已經按下不在處理,保證按下一次只做一次處理 // if((Rem_Code[0]==Addr_Code_H)&&(Rem_Code[0]==Addr_Code_L)) // { // if(Rem_Code[2]==Key_A)//如果數據與A鍵的值相等表示A鍵按下對其處理 // {//試驗用A鍵來控制繼電器的開關 // Com_Relay;//繼電器取反 // Nokia3310();//顯示繼電器的狀態 // Bz_Out();//蜂鳴器響一聲 // } // } //P2_2=0; } TimeCount=1000;//按鍵按下標志 } }
void main() { AUXR=0x01; P1_4=0; guandz(); guanled();
while(1) { Remote_Process();//遙控處理 }
} |