《《《《《正文》》》》》
《EV1527 幀結(jié)構(gòu)》
EV1527 每幀數(shù)據(jù)由同步碼和 24 位的數(shù)據(jù)碼組成,數(shù)據(jù)碼又分為地址碼(20 位)和按鍵碼(4 位)。以 433Mhz EV1527 遙控器為例,遙控波形如下。
bit0:400us 高電平+800us 低電平 bit1:1ms 高電平+200us 低電平 同步碼(黑色線條部分):高電平 400us+低電平 9ms。 地址碼(橙色線條部分):20 個數(shù)據(jù)位,共 24ms。 按鍵碼(紅色線條部分):4 個數(shù)據(jù)位,共 4.8ms。
《解碼原理》
同步碼和 bit1、bit0 的低電平持續(xù)時間都不一樣。通過定時器計(jì)算低電平時間來判斷同步碼、bit1、bit0。
《遠(yuǎn)-R1 解碼代碼》
設(shè)置一個 50us 中斷一次的定時器,每次中斷調(diào)用 soft_count()函數(shù)。修改后面的數(shù)值就可以在其他不同的模塊上用.
#define _start_us_min 160 #define _start_us_max 200 #define _num0_us_min 10 #define _num0_us_max 20 #define _num1_us_min 0 #define _num1_us_max 8
.h 文件
#ifndef _SOFT_DECODE_ #define _SOFT_DECODE_ #include "N76E003.h" #define uint unsigned int #define uchar unsigned char #define ulong unsigned long //50us #define _start_us_min 160 #define _start_us_max 200 #define _num0_us_min 10 #define _num0_us_max 20 #define _num1_us_min 0 #define _num1_us_max 8 extern uchar IR_Key; extern uchar Temp_addrl; extern uchar Temp_addrh; extern uchar Address_l; extern uchar Address_h; extern uint RF_Value_Cnt; extern uint release_key; extern bit IR_OVER; void soft_count(); void soft_decode(); #endif
.c 文件
#include "SOFT_DECODE.h" sbit RF_Dat = P1^7; //接收引腳 ulong RF_data; uchar Temp_addrl,Temp_addrh,Address_l,Address_h;//地址碼 uchar cntint,IR_Key; //接收位數(shù)據(jù)的個數(shù),數(shù)據(jù) bit start_flag=0,IR_OVER; //檢測到碼頭 start_flag 置 1,反之置 0,接收完一組數(shù)據(jù) 后 IR_OVER 置 1,反之清 0 bit Jump_flag; //電平跳變標(biāo)志 uint release_key; //松手計(jì)數(shù) uint Low; //低電平計(jì)數(shù) uint RF_Value_Cnt; //長按計(jì)數(shù) /**---------------------------------------------------------------------------- ------------------** **函數(shù)名 :低電平脈寬測量函數(shù) **功能說明:計(jì)算低電平時間(LOW),50us 調(diào)用一次 **---------------------------------------------------------------------------- ------------------**/ void soft_count()//接收碼計(jì)數(shù)函數(shù) { if(RF_Dat==0) //低電平 { Low++; if(Jump_flag)Jump_flag=0; //Jump_flag 由 0→1 代表 低→高 跳變 } else if(RF_Dat==1) //高電平 { if(!Jump_flag) { Jump_flag=1; //Jump_flag 由 1→0 代表 高→低 跳變 soft_decode(); Low=0; } } } /**---------------------------------------------------------------------------- ------------------** **函數(shù)名 :解碼函數(shù) **---------------------------------------------------------------------------- ------------------**/ void soft_decode()//接收碼處理函數(shù) { // uchar i; if(start_flag==0) { if(( Low > _start_us_min ) && ( Low < _start_us_max )) // 同 步 碼 { start_flag=1; cntint=0;//數(shù)據(jù)長度 IR_Key=0; RF_data=0; LED=1; } else { // LED=!LED;//1khz RF_Value_Cnt=0; // long_key_flag=0; release_key++; if(release_key>500)release_key=500; } } else if((start_flag==1)&&(cntint<24)) { if(( Low > _num0_us_min ) && ( Low < _num0_us_max )) // 數(shù)據(jù) 0 700us { RF_data=RF_data<<1; cntint++; } else if(( Low > _num1_us_min ) && ( Low < _num1_us_max )) // 數(shù)據(jù) 1 120-200us { RF_data=RF_data<<1; RF_data|=1; cntint++; } else { start_flag=0; cntint=0; } } if(cntint==24) { release_key=0; RF_Value_Cnt++; if(RF_Value_Cnt>500)RF_Value_Cnt=500; cntint=0; start_flag=0; IR_Key=RF_data&0x0000000f; //取 4 位數(shù)據(jù) Temp_addrl=(RF_data>>4)&0x000000ff; //地址共 20 位,只取 16 位。 Temp_addrh=(RF_data>>12)&0x000000ff; IR_OVER=1; } }
審核編輯:湯梓紅
-
C代碼
+關(guān)注
關(guān)注
1文章
89瀏覽量
14297 -
幀結(jié)構(gòu)
+關(guān)注
關(guān)注
0文章
13瀏覽量
10662 -
eV1527
+關(guān)注
關(guān)注
2文章
9瀏覽量
25718
原文標(biāo)題:用遠(yuǎn)-R1 接收模塊解碼 EV1527 的C代碼
文章出處:【微信號:airX嵌入式,微信公眾號:airX嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論