最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

無(wú)線遙控EV1527解碼源碼分享

2023-05-13 21:25 作者:若水魚(yú)閣  | 我要投稿

U8 code WirelessButtonValue[12]={0x03,0x0C,0x0F,0x30,0x33,0x3C,0x3F,0xC0,0xC3,0xCC,0xCF,0xF0};//無(wú)線遙控器碼值1-12,

U8 code WirelessButtonValue_EV1527[12]={0xB1,0xBC,0xB5,0xB2,0xBA,0xB3,0xB4,0xB9,0xBB,0xB8,0xB6,0xBE};//無(wú)線遙控器碼值1-12,

void Decode()? //Decode是無(wú)線解碼函數(shù)

{?

I=0;//用來(lái)記錄位數(shù),正常會(huì)收到24位。見(jiàn)78行定義

if(TimeCount > 0)? //當(dāng)按鍵按下釋放后該值不再賦值,就通過(guò)遞減直到該值等于0

{

TimeCount--; //超時(shí)變量自減,等于0后表示按鍵釋放

}

while(WuXian_IN == 0)//如果無(wú)線輸入信號(hào)為0一直等待,等待高電平出現(xiàn)

{

Time_out++;//超時(shí)變量自增

if(Time_out>=25000)//超時(shí)退出

{ //Uart1Send(1);

Time_out=0;//超時(shí)變量清零

TR0 = TH0 = TL0 = 0;//關(guān)閉定時(shí)器T0,并重置TH0、TL0

EX0 = 1; //開(kāi)啟外部中斷0

return;

}

}//無(wú)線輸入的while結(jié)束

??

Time_out=0;//超時(shí)變量清零

while(I < 24) //共接收24位,大于等于24位跳出while循環(huán)

{

while(WuXian_IN == 0)? ? //無(wú)線輸入信號(hào)等于0,等待高電平到來(lái)

{

Time_out++; //超時(shí)變量自增

if(Time_out>=25000)? //超時(shí)退出

{//Uart1Send(2);

Time_out=0;//超時(shí)變量清零

TR0 = TH0 = TL0 = 0;? //關(guān)閉定時(shí)器T0,并重置TH0、TL0

EX0 = 1;? ? ? ?//開(kāi)啟外部中斷0

return;//返回值,????

}//while無(wú)線信號(hào)輸入判斷結(jié)束

} //while位判定結(jié)束?

? ??

Time_out=0;//超時(shí)變量清零

TL = TL0;//定時(shí)器低8位清零

TH = TH0;//定時(shí)器高8位清零

TH0 = TL0 = 0; //記錄低電平長(zhǎng)度

L = TH;//高8位賦值給L

L = ((L << 8) + TL); //將計(jì)時(shí)器的高低8位合并

if(I == 0) //處理同步位

{

if(L > 1400)? //確認(rèn)是引導(dǎo)頭(判斷同步位低電平時(shí)長(zhǎng)31a)2360

{

M = L / 31;//M即4a亦即是窄電平的時(shí)長(zhǎng) M=4CLK

}

else? //不符合規(guī)則(出錯(cuò))

{

I = TR0 = TH0 = TL0 = 0;//記錄位、定制器控制位、定時(shí)器初始值等清零

err = 1;//報(bào)錯(cuò)

break;

}//不合規(guī)報(bào)錯(cuò)花

}//同步處理if花

else

{

//短555 長(zhǎng)1666

//4.7M的振蕩電阻時(shí)同步位的低電平時(shí)長(zhǎng)為L(zhǎng)=15378uS;即31a

//4.7M的振蕩電阻時(shí)窄電平時(shí)長(zhǎng)為M=492uS;即4a

//4.7M的振蕩電阻時(shí)寬電平時(shí)長(zhǎng)為1488uS即12a

//以下語(yǔ)句即判斷窄電平與寬電平的寬度是否合格

?/*

窄電平時(shí)長(zhǎng)為M即 M=4a;a為一個(gè)振蕩頻率, fosc=(2x1000x16/Rosc(KΩ))KHz,

fosc單位為KHz, (Rosc為振蕩電阻,單位為KΩ),則一個(gè)振蕩周期T=1/fosc

例如常用振蕩電阻為4.7M;則振蕩頻率a=fosc=1/(2x1000x16/4700)=6.8KHz,

則振蕩周期T=1/6.8K=147uS,即窄電平M=a=4T=588us;則寬電平3xM=3a=1764us;

程序中窄電平的誤差范圍為正(M+M/4)負(fù)(M-M/4)一個(gè)振蕩周期a=M/4;

程序中寬電平的誤差范圍為正(M * 3 + M / 2)負(fù)(M * 3 - M / 2) 兩個(gè)振蕩周期2a=M/2;

*/

//如果窄電平小于4a與大于4a或?qū)掚娖叫∮?2a與大于12a則表示出錯(cuò)

if(((L < M - M / 4) && (L > M + M / 4)) || ((L < M * 3 - M / 2) && (L > M * 3 + M / 2)))??

{? ?//窄電平的誤差范圍為正(M+M/4)負(fù)(M-M/4)一個(gè)振蕩周期a=M/4;

? I = TR0 = TH0 = TL0 = 0; //寬電平的誤差范圍為正(M * 3 + M / 2)負(fù)(M * 3 - M / 2) 兩個(gè)振蕩周期2a=M/2;

? err = 1;//報(bào)錯(cuò)

? break;//跳出

}//報(bào)錯(cuò)判斷


}//處理同步位if 記錄位不等于0花


while(WuXian_IN == 1) //若是無(wú)線輸入等于1,等待低電平到來(lái)

? ? {

Time_out++;//超時(shí)變量自增

if(Time_out>=25000) //超時(shí)退出

{//Uart1Send(3);

Time_out=0;//超時(shí)變量清零

TR0 = TH0 = TL0 = 0; //關(guān)閉定時(shí)器T0,并重置TH0、TL0

EX0 = 1;//開(kāi)啟外部中斷0

return;//返回值

}

}//判定無(wú)線信號(hào)不等于1結(jié)束

Time_out=0;//超時(shí)變量清零

TH = TH0;//定時(shí)器0賦初值高8位

TL = TL0;//定時(shí)器0賦初值低8位

TH0 = TL0 = 0;//定時(shí)器初值清零

L = TH;//高8位賦值給L

L = ((L << 8) + TL); //將計(jì)時(shí)器的高低8位合并

/*以下語(yǔ)句即判斷是窄電平是否合格(4.7M的振蕩電阻時(shí)窄電平時(shí)長(zhǎng)為492uS即4a) */

if(((L > (M - M / 4)) && (L < (M + M / 4))))//如果此時(shí)為4a則本位為0? 短492uS

{? //窄電平的誤差范圍為正(M+M/4)負(fù)(M-M/4)一個(gè)振蕩周期a=M/4;

I++; //記錄位變量自增

MA1 <<= 1;//本位置0

}

/*以下語(yǔ)句即判斷寬電平是否合格(4.7M的振蕩電阻時(shí)寬電平時(shí)長(zhǎng)為1488uS即12a)? ? */

else if(((L > (M * 3 - M / 2)) && (L < (M * 3 + M / 2)))) //如果此時(shí)為12a則本位為1 長(zhǎng)1488uS

{? //寬電平的誤差范圍為正(M * 3 + M / 2)負(fù)(M * 3 - M / 2) 兩個(gè)振蕩周期2a=M/2;

I++;//記錄位變量自增

MA1 <<= 1;//

MA1++; //本位置1

}

else //已不是4a也不是12a則不符合規(guī)表示出錯(cuò)

{

I = 0;//對(duì)I進(jìn)行清零

TR0 = TH0 = TL0 = 0;//關(guān)閉定時(shí)器T0,初始值清零

err = 1;//把1賦值給錯(cuò)誤標(biāo)志

break;

}

if(I == 8) //? MA3、MA2、MA1是用來(lái)記錄地址碼(占16位)和鍵碼(占8位)(MA1、MA2、MA3各8個(gè)bit位)

{??

MA3 = MA1;?

//P1 = MA3;? //送P1口顯示方便調(diào)試,P1中間變量

}

if(I == 16)

{

MA2 = MA1;??

//P0 = MA2;? //送P1口顯示方便調(diào)試

}

if(I == 24) //24位已收完則解碼結(jié)束

{

if(TimeCount == 0)? //超時(shí)為0表示是新的一次按下對(duì)其進(jìn)行處理,如果該值大于0表示已經(jīng)按下不再處理

{??

? ? // Uart1Send(MA1);

// Uart1Send(MA2);

// Uart1Send(MA3);

? if(WirelessButtonValue[da_index-1]==MA1)Flag_ok=1;? //Flag_ok是到位標(biāo)志位

if(MA1==WirelessButtonValue_EV1527[da_index-1])Flag_ok=1;//WirelessButtonValue_EV1527是無(wú)線遙控器碼值1-12,

// Time_an=0;

// switch(MA1)

// {

// case 0xC0:??

// Uart1Send(10);

// break;

// case 0x30:? ?

// Uart1Send(11);

// break;

// case 0x0C:? ??

// Uart1Send(12);

// break;

// case 0x03:? ?

// Uart1Send(13);

// break;

//

// }

}

// OK_LED = !OK_LED;? ? //解碼正確后取反一次

// ? Time_an++;

if(Flag_SW==1)? //開(kāi)關(guān)標(biāo)志等于1

{

Flag_SW=0;//開(kāi)關(guān)標(biāo)志清零

switch(MA1)//用來(lái)記錄地址碼(占16位)和鍵碼(占8位)(MA1、MA2、MA3各8個(gè)bit位)

{

//若MA1等于0x03,則對(duì)MA1清零;da_index賦值1;P1等于取商,P2取余;調(diào)用E2prom寫(xiě)入;

case? 0x03:MA1=0;da_index=1;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x0C:MA1=0;da_index=2;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x0F:MA1=0;da_index=3;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x30:MA1=0;da_index=4;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x33:MA1=0;da_index=5;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x3C:MA1=0;da_index=6;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0x3F:MA1=0;da_index=7;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xC0:MA1=0;da_index=8;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xC3:MA1=0;da_index=9;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xCC:MA1=0;da_index=10;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xCF:MA1=0;da_index=11;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xF0:MA1=0;da_index=12;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB1:MA1=0;da_index=1;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xBC:MA1=0;da_index=2;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB5:MA1=0;da_index=3;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB2:MA1=0;da_index=4;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xBA:MA1=0;da_index=5;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB3:MA1=0;da_index=6;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB4:MA1=0;da_index=7;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB9:MA1=0;da_index=8;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xBB:MA1=0;da_index=9;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB8:MA1=0;da_index=10;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xB6:MA1=0;da_index=11;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

case? 0xBE:MA1=0;da_index=12;P1=num[da_index/10];P2=num[da_index%10];EEprom_Write();break;

}//SWitch判定結(jié)束

}//開(kāi)關(guān)標(biāo)志置1處理函數(shù) ?

TimeCount =4;

}//24位接受完畢花

}//判定接受位while結(jié)束

TR0 = TH0 = TL0 = 0;? //關(guān)閉定時(shí)器T0,并重置TH0、TL0

EX0 = 1; //開(kāi)啟外部中斷0

}//解碼函數(shù)花


無(wú)線遙控EV1527解碼源碼分享的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平凉市| 儋州市| 博罗县| 太白县| 科尔| 东海县| 惠来县| 上饶县| 龙里县| 务川| 山东省| 广平县| 承德县| 赤峰市| 柯坪县| 洮南市| 曲麻莱县| 扶绥县| 包头市| 陵川县| 从江县| 凯里市| 武乡县| 刚察县| 醴陵市| 五莲县| 怀集县| 抚远县| 利津县| 昌都县| 潮州市| 伽师县| 福州市| 民丰县| 肥乡县| 梁山县| 海兴县| 霍山县| 金乡县| 泊头市| 昭觉县|