日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SYN480R模块解码EV1527教程

發(fā)布時間:2023/12/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SYN480R模块解码EV1527教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 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。
    2. 解碼原理
    同步碼和bit1、bit0的低電平持續(xù)時間都不一樣。通過定時器計算低電平時間來判斷同步碼、bit1、bit0。
    3. SYN480R解碼代碼
    設(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
    代碼注釋都非常詳細(xì),我就不再廢話了。如果有不懂的可以直接問我。

.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; //接收位數(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; //松手計數(shù) uint Low; //低電平計數(shù) uint RF_Value_Cnt; //長按計數(shù)/**----------------------------------------------------------------------------------------------****函數(shù)名 :低電平脈寬測量函數(shù)**功能說明:計算低電平時間(LOW),50us調(diào)用一次**----------------------------------------------------------------------------------------------**/ void soft_count()//接受碼計數(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;//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 )) //數(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; } }

程序下載

總結(jié)

以上是生活随笔為你收集整理的SYN480R模块解码EV1527教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。