有沒有懂應廣單片機433解碼的大佬,幫忙改下小弟的代碼芯片是lgs152,接收芯片是rr285
#include "extern.h"
#define IR_KEY1 0x61
#define IR_KEY2 0x68
#define IR_KEY3 0x66
#define IR_KEY4 0x62
#define IR_KEY5 0x65
#define IR_KEY6 0x64
#define IR_LOCK 0X01 //接收鎖定
#define IR_DOWN 0X02 //接收完成
#define IR_UP 0X04 //按鍵釋放
LED_OUT => PA.7
RF => PA.0
Byte Timer_100us;
Byte js_1s;
Byte fg_500ms,fg_1s;
Byte fg_05s;
Byte fg_05s_old;
Byte LED_ON;
Byte LED_ON_CNT;
Byte Ir_Code;
Byte Ir_Status;
Byte Ir_Rx_Buf[3] = {0, 0, 0};
Byte Test_Buf[3] = {0x51, 0xAA, 0x46};
BIT fg_Rec_Start;
Byte QF_Fun(Byte dat)
{
Byte i=8,t=0;
Byte res = 0;
while(i--)
{
res <<= 1;
t = dat & 1;
res |= t;
dat >>= 1;
}
return res;
}
void IR_Receive() //100us
{
static Word Ir_H_Time = 0;
static Word Ir_L_Time = 0;
static Byte Ir_Bit_Cnt = 0;
if(RF)
{
Ir_H_Time++;
Ir_L_Time = 0;
if((Ir_Status & IR_LOCK) && (Ir_H_Time >= 500)) //50ms
{
Ir_Status &= ~IR_LOCK;
Ir_Status |= IR_UP;
fg_Rec_Start = 0;
}
if(Ir_H_Time >= 500){
Ir_H_Time = 500;
fg_Rec_Start = 0;
}
}
else
{
if(fg_Rec_Start == 0){
Ir_L_Time++;
if((Ir_L_Time>=100) && (Ir_L_Time<=130)) //起始碼
{
Ir_L_Time = 0;
Ir_Bit_Cnt = 0;
fg_Rec_Start = 1;
Ir_Rx_Buf[0] = 0;
Ir_Rx_Buf[1] = 0;
Ir_Rx_Buf[2] = 0;
}
}
else{
if(Ir_H_Time)
{
if(!(Ir_Status&IR_LOCK))
{
Ir_Rx_Buf[Ir_Bit_Cnt >> 3] >>= 1;
if((Ir_H_Time>=10) && (Ir_H_Time<=13)) //邏輯1
{
Ir_Rx_Buf[Ir_Bit_Cnt >> 3] |= 0x80;
}
Ir_Bit_Cnt++;
if(Ir_Bit_Cnt >= 24)
{
Ir_Bit_Cnt = 0;
fg_Rec_Start = 0;
Ir_Rx_Buf[0] = QF_Fun(Ir_Rx_Buf[0]);
Ir_Rx_Buf[1] = QF_Fun(Ir_Rx_Buf[1]);
Ir_Rx_Buf[2] = QF_Fun(Ir_Rx_Buf[2]);
//用戶碼和操作碼都正確
if((Ir_Rx_Buf[0] == 0x89) && (Ir_Rx_Buf[1] == 0xDC))
{
Ir_Code = Ir_Rx_Buf[2];
if((Ir_Code == IR_KEY1) || (Ir_Code == IR_KEY2) || (Ir_Code == IR_KEY3) || (Ir_Code == IR_KEY4) || (Ir_Code == IR_KEY5) || (Ir_Code == IR_KEY6))
{
Ir_Status |= IR_DOWN | IR_LOCK;
Test_Buf[0] = Ir_Rx_Buf[0];
Test_Buf[1] = Ir_Rx_Buf[1];
Test_Buf[2] = Ir_Rx_Buf[2];
Ir_Rx_Buf[0] = 0;
Ir_Rx_Buf[1] = 0;
Ir_Rx_Buf[2] = 0;
LED_ON = 1;
fg_05s = 1;
fg_05s_old = 1;
LED_ON_CNT = 0;
js_1s = 0;
}
}
}
}
}
}
Ir_H_Time = 0;
}
PAC |= 0B1111_1110; //PA0 : RF_IN
PAPH = 0B1000_0001;
}
void LED_Blink(byte cnt)
{
LED_OUT = 1;
if(fg_05s){
LED_OUT = 0;
}
if(fg_05s_old != fg_05s){
fg_05s_old = fg_05s;
if(!fg_05s){
LED_ON_CNT++;
if(LED_ON_CNT >= cnt){
LED_ON_CNT = 0;
LED_ON = 0;
}
}
}
}
void Timer2_Init(void)
{
tm2ct = 0;
tm2b = 4;
$ TM2C IHRC,Disable,Period;
$ TM2S 8bit,/64,/5;
INTRQ.TM2 = 0;
INTEN.TM2 = 1;
ENGINT;
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V,Init_RAM;
PAC = 0B1111_1110; //PA0 : RF_IN
PAPH= 0B1000_0001;
LED_OUT = 1;
Timer2_Init();
while (1)
{
if(LED_ON){
if(Ir_Code == IR_KEY1){
LED_Blink(1);
}
else if(Ir_Code == IR_KEY2){
LED_Blink(2);
}
else if(Ir_Code == IR_KEY3){
LED_Blink(3);
}
else if(Ir_Code == IR_KEY4){
LED_Blink(4);
}
else if(Ir_Code == IR_KEY5){
LED_Blink(5);
}
else if(Ir_Code == IR_KEY6){
LED_Blink(6);
}
}
else{
LED_OUT = 1;
LED_ON_CNT = 0;
}
}
}
void Interrupt (void)
{
pushaf;
if(Intrq.TM2)
{
//TM2 Trig 周期:100us
Timer_100us++;
if(Timer_100us>=200)
{
Timer_100us = 0;
js_1s++;
if(js_1s == 25){
if(fg_05s) fg_05s = 0;
else fg_05s = 1;
fg_500ms = 1;
}
else if(js_1s >= 50){
js_1s = 0;
fg_1s = 1;
if(fg_05s) fg_05s = 0;
else fg_05s = 1;
}
}
IR_Receive();
//-------------------
Intrq.TM2 = 0;
}
popaf;
}
|