找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1093|回复: 3
打印 上一主题 下一主题
收起左侧

大佬们,求教下应广单片机的编程

[复制链接]
跳转到指定楼层
楼主
ID:1138032 发表于 2024-11-29 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有懂应广单片机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;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1091035 发表于 2025-2-20 17:01 | 只看该作者
大佬你这个程序是没有配对部分的吗
回复

使用道具 举报

板凳
ID:1138032 发表于 2025-3-29 11:51 | 只看该作者
Mrjork 发表于 2025-2-20 17:01
大佬你这个程序是没有配对部分的吗

没有,这是我之前用来测试的程序
回复

使用道具 举报

地板
ID:879809 发表于 2025-4-1 15:12 | 只看该作者
这么冷门的芯片上网大概率是问不到答案的,找原厂FAE咨询吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表