最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 音响DIY > 功放DIY > 前级DIY >

单片机的应用例子--多功能红外线遥控前级(3)

时间:2012-10-04 16:08来源:hifidiy.net论坛 作者:JiangWZ 点击:
ldx T1H,#%0 ; 定时器重新置零 orx _ir_flag,#1 ; 标记收到红外线信号 c3_x iret ;============================================================= vector TIMER1=_isr_T1 ;23.52mS _isr_T1: ; ldx _step_ctr,#0 ;

        ldx                T1H,#%0                        ; 定时器重新置零
        orx                _ir_flag,#1                ; 标记收到红外线信号
c3_x
        iret


;=============================================================

vector        TIMER1=_isr_T1                        ;23.52mS
_isr_T1:                ;
        ldx                _step_ctr,#0        ; 无红外线信号空挡,步骤置零
        iret                                       


//C 语言部分
////////////////////////////////////////////////////////
// NEC uPD6121 波形 红外线读码 2007-08-23 江文正
// 方法 : 接收管输出下降沿触发中断子程序,读取下降沿之间的时间 width 后把定时器重新置零
// width 单位= 92.23uS, 前提是 定时器时钟 = 5.5296 MHz, prescale = 2
// 两个下降沿之间时段: 引导码, >11.81mS : width=128
// 重复码, >9mS : width=97
// >1.69mS : width=18 = 高电平数据,  <1.69mS : width=18 = 低电平数据


IR_decode()
{       
char rcv_8bit=0;
int rcv_16bit=0;

        ir_flag &= 0xFE;        //标记已处理
        if (step_ctr ==0)
        {
                step_ctr=1;        //开始
        }
        else
        {
                if (width > 128)        //引导码
                {
                        step_ctr=2;
                        user_code=0;        // 清0
                        cmd_code=0;        // 清0
                }
                else
                {
                        if (width > 97)        //重复码
                        {
                                step_ctr=34;        //
                        }
                    else
                        {
                                if (width > 18)        //高电平
                                {
                                        rcv_8bit=1;
                                        rcv_16bit=1;
                                }

                                if (step_ctr<18)        //用户码
                                        {
                                                rcv_16bit = rcv_16bit << (step_ctr-1);
                                                user_code |= rcv_16bit;
                                        }
                                else
                                {
                                        if (step_ctr<26)        //控制码
                                        {
                                                rcv_8bit = rcv_8bit << (step_ctr-17);
                                                cmd_code |= rcv_8bit;
                                        }
                                }
                                if (step_ctr>25)                //反码
                                {
                                        rcv_8bit = rcv_8bit << (step_ctr-25);
                                        comp_code |= rcv_8bit;
                                }
                       
                                step_ctr++;
                                if (step_ctr>33)                //有效码
                                {
                                        comp_code ^= 0xFF;        //2反位,2'complement
                                        comp_code--;
                                    if (cmd_code != comp_code)
                                        {
                                                step_ctr = 0;        //错码,无效
                                        }
                                }
                        }
                }
        }
}




大部分国内生产的遥控器都使用NEC码,你先按照提示找出你手中遥控器的用户码,然后再找出你所想使用的那几个按键的功能码,再把这些码取代以下的部分

//所用遥控器的控制码, 不同遥控器的码会不一样
#define user         0xFF00;// 用户码
#define vol_up         0x58;        // 增音量 <vol +> 按键
#define vol_dn         0x59;        // 减音量 <vol -> 按键
#define ch_up         0x4A;        // 下一个切换位置 <tune +> 按键
#define ch_dn         0x1E;        // 前一个切换位置 <tune -> 按键
#define mute         0x46;        // 静音 <mute> 按键
#define pwr                 0x40;        // 电源开关 <pwr> 按键 (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容