SYN480R模块解码EV1527教程
生活随笔
收集整理的這篇文章主要介紹了
SYN480R模块解码EV1527教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. EV1527幀結構
EV1527 每幀數據由同步碼和24位的數據碼組成,數據碼又分為地址碼(20位)和按鍵碼(4位)。
以我手頭上的433Mhz的EV1527遙控器為例,遙控波形如下。
bit0:400us高電平+800us低電平
bit1:1ms高電平+200us低電平
- 同步碼(黑色線條部分):高電平400us+低電平9ms。
- 地址碼(橙色線條部分):20個數據位,共24ms。
- 按鍵碼(紅色線條部分):4個數據位,共4.8ms。
2. 解碼原理
同步碼和bit1、bit0的低電平持續時間都不一樣。通過定時器計算低電平時間來判斷同步碼、bit1、bit0。
3. SYN480R解碼代碼
設置一個50us中斷一次的定時器,每次中斷調用soft_count()函數。
修改后面的數值就可以在其他不同的模塊上用
#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 8extern 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; //接收位數據的個數,數據 bit start_flag=0,IR_OVER; //檢測到碼頭start_flag置1,反之置0,接收完一組數據后IR_OVER置1,反之清0 bit Jump_flag; //電平跳變標志 uint release_key; //松手計數 uint Low; //低電平計數 uint RF_Value_Cnt; //長按計數/**----------------------------------------------------------------------------------------------****函數名 :低電平脈寬測量函數**功能說明:計算低電平時間(LOW),50us調用一次**----------------------------------------------------------------------------------------------**/ void soft_count()//接受碼計數函數 {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;}} } /**----------------------------------------------------------------------------------------------****函數名 :解碼函數**----------------------------------------------------------------------------------------------**/ void soft_decode()//接受碼處理函數 { // uchar i;if(start_flag==0){if(( Low > _start_us_min ) && ( Low < _start_us_max )) //同步碼{start_flag=1;cntint=0;//數據長度IR_Key=0;RF_data=0;LED=1;}else { // LED=!LED;//1khzRF_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 )) //數據 0 700us{RF_data=RF_data<<1;cntint++;}else if(( Low > _num1_us_min ) && ( Low < _num1_us_max )) //數據 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位數據Temp_addrl=(RF_data>>4)&0x000000ff; //地址共20位,只取16位。Temp_addrh=(RF_data>>12)&0x000000ff;IR_OVER=1; } }程序下載
總結
以上是生活随笔為你收集整理的SYN480R模块解码EV1527教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Surface Pro 4安装Ubunt
- 下一篇: 【dqmp项目笔记】