一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
楼主: 261307853

小白求一1602显示的红外线解码程

[复制链接]
 楼主| 发表于 2014-5-12 11:35 来自手机 | 显示全部楼层
s2z0g0 发表于 2014-5-12 09:30 static/image/common/back.gif
16楼的方法最直接,用那种USB saleae逻辑分析仪 24M采样8通道就可以,我有NEC的红外分析插件,有需要的话PM或留EMAIL地址。

业余玩玩,逻辑分析仪只有吃灰的份。261307853@qq.com

点评

插件在17楼  发表于 2014-5-13 18:55
回复

使用道具 举报

 楼主| 发表于 2014-5-12 11:36 来自手机 | 显示全部楼层
chenghj 发表于 2014-5-12 09:38 static/image/common/back.gif
没有遥控器需要做个摸拟遥控器发射的程序有么?

本坛就有
回复

使用道具 举报

发表于 2014-5-12 18:01 | 显示全部楼层
我也是逻辑分析仪抓的,和8楼xixi2006的按键码完全一样,不过貌似电视广播和返回这2个按键应该是 E4 1B  返回是E5 1A  不知对不对!
回复

使用道具 举报

 楼主| 发表于 2014-5-12 18:42 来自手机 | 显示全部楼层
本帖最后由 261307853 于 2014-5-12 18:47 编辑
静夜思月晖 发表于 2014-5-12 08:44
我也在做毕业设计用到这个,参考下这段语句

#include"reg51.h"


能否帮忙看一下我把楼上朋友给的红外码写到程序中就是不能控制呢,谢了!


#include "stc15f104e.h"
#define CPU_Fosc 12//12M晶振
#define M   1//定时器1T时钟
#define Tc 250 //250us采样
#define Th (65536-CPU_Fosc*Tc/M)/256
#define Tl (65536-CPU_Fosc*Tc/M)%256
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

#define ma1 0XE4EB //用户码/按键码

sbit K0=P3^4;        //1#
sbit K1=P3^5;        //3#
sbit K2=P3^0;  //5#
sbit K3=P3^3;  //8#
sbit K4=P3^1;        //6#
sbit IR=P3^2; //定义红外接收输入端口7#
bit  IR_ok,state;
ulong longcode;
uint OKCode;
uint Tick,step;
uchar  Count;
bit   IRsync;
bit   IRb,IRa,IR_ok;
void Delay(uint t);
uchar reverse8( uchar c );
void InitTimer();
void main()
{
    P3=0xff;
    InitTimer();
    while(1)
    {
        if(IR_ok)
        {
            if(OKCode==0XE4EB) //用户码/按键码
            {
                state=!state;
                K0=K1=0;
                Delay(3000);
                K0=K1=1;
                if(state)
                {
                    K3=K4=K2=0;
                }
                else
                {
                    K3=K4=K2=1;
                }
            }
            IR_ok=0;
        }
    }
}
void InitTimer()
{
    AUXR=0xc0;
    TMOD = 0x00;
    TH0=Th;
    TL0=Tl;
    EA=ET0=TR0=1;
}
void timer0() interrupt 1
{
    if(IR_ok)
    {
        return;
    }
    IRb = IRa;     //上次电位状态
    IRa = IR;     //当前电位状态
    ++step;
    if(IRb && !IRa)         //是否下降沿(上次高,当前低)
    {
        Tick = step;
        step=0;
        if(Tick>(14000/Tc))
        {
            IRsync=0;
        }
        else if(IRsync)
        {
            if(Tick>(3000/Tc))
            {
                IRsync=0;
            }
            else
            {
                longcode<<=1;
                if(Tick>(1500/Tc))
                {
                    longcode|=1;
                }
                if (--Count==0)
                {
                    uchar x,y;
                    x= longcode;
                    y= longcode>>8;
                    if(x=~y)
                    {
                        OKCode =longcode>>8;
                        OKCode=reverse8(OKCode/256)*256|reverse8(OKCode);
                        IRsync=0;
                        IR_ok=1;
                    }
                }
            }
        }
        else if(Tick>(13500/Tc-2)&&Tick<(13500/Tc+2))
        {
            IRsync=1;
            Count=32;
        }
    }
}
uchar reverse8( uchar c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA )>> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC )>> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 )>> 4;
    return c;
}
void Delay(uint t)
{
    uchar a,b;
    for(; t>0; t--)
        for(b=222; b>0; b--)
            for(a=12; a>0; a--)
            {
                ;
            }
}

回复

使用道具 举报

 楼主| 发表于 2014-5-12 18:48 来自手机 | 显示全部楼层
静夜思月晖 发表于 2014-5-12 08:47
看看这个我解码的某卫星接收机遥控键码,NEC

帮我看看程序怎么不能用呢,谢了!


#include "stc15f104e.h"
#define CPU_Fosc 12//12M晶振
#define M   1//定时器1T时钟
#define Tc 250 //250us采样
#define Th (65536-CPU_Fosc*Tc/M)/256
#define Tl (65536-CPU_Fosc*Tc/M)%256
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

#define ma1 0XE4EB //用户码/按键码

sbit K0=P3^4;        //1#
sbit K1=P3^5;        //3#
sbit K2=P3^0;  //5#
sbit K3=P3^3;  //8#
sbit K4=P3^1;        //6#
sbit IR=P3^2; //定义红外接收输入端口7#
bit  IR_ok,state;
ulong longcode;
uint OKCode;
uint Tick,step;
uchar  Count;
bit   IRsync;
bit   IRb,IRa,IR_ok;
void Delay(uint t);
uchar reverse8( uchar c );
void InitTimer();
void main()
{
    P3=0xff;
    InitTimer();
    while(1)
    {
        if(IR_ok)
        {
            if(OKCode==0XE4EB) //用户码/按键码
            {
                state=!state;
                K0=K1=0;
                Delay(3000);
                K0=K1=1;
                if(state)
                {
                    K3=K4=K2=0;
                }
                else
                {
                    K3=K4=K2=1;
                }
            }
            IR_ok=0;
        }
    }
}
void InitTimer()
{
    AUXR=0xc0;
    TMOD = 0x00;
    TH0=Th;
    TL0=Tl;
    EA=ET0=TR0=1;
}
void timer0() interrupt 1
{
    if(IR_ok)
    {
        return;
    }
    IRb = IRa;     //上次电位状态
    IRa = IR;     //当前电位状态
    ++step;
    if(IRb && !IRa)         //是否下降沿(上次高,当前低)
    {
        Tick = step;
        step=0;
        if(Tick>(14000/Tc))
        {
            IRsync=0;
        }
        else if(IRsync)
        {
            if(Tick>(3000/Tc))
            {
                IRsync=0;
            }
            else
            {
                longcode<<=1;
                if(Tick>(1500/Tc))
                {
                    longcode|=1;
                }
                if (--Count==0)
                {
                    uchar x,y;
                    x= longcode;
                    y= longcode>>8;
                    if(x=~y)
                    {
                        OKCode =longcode>>8;
                        OKCode=reverse8(OKCode/256)*256|reverse8(OKCode);
                        IRsync=0;
                        IR_ok=1;
                    }
                }
            }
        }
        else if(Tick>(13500/Tc-2)&&Tick<(13500/Tc+2))
        {
            IRsync=1;
            Count=32;
        }
    }
}
uchar reverse8( uchar c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA )>> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC )>> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 )>> 4;
    return c;
}
void Delay(uint t)
{
    uchar a,b;
    for(; t>0; t--)
        for(b=222; b>0; b--)
            for(a=12; a>0; a--)
            {
                ;
            }
}

回复

使用道具 举报

 楼主| 发表于 2014-5-12 18:50 来自手机 | 显示全部楼层
xixi2006 发表于 2014-5-11 22:34
开关  FF 00  1D CC
禁音  FE 01  1D CC
1      EE 11

你好,红外码代入到程序中怎么改不能用呢,是不是我这样写不正确,谢了!


#include "stc15f104e.h"
#define CPU_Fosc 12//12M晶振
#define M   1//定时器1T时钟
#define Tc 250 //250us采样
#define Th (65536-CPU_Fosc*Tc/M)/256
#define Tl (65536-CPU_Fosc*Tc/M)%256
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

#define ma1 0XE4EB //用户码/按键码

sbit K0=P3^4;        //1#
sbit K1=P3^5;        //3#
sbit K2=P3^0;  //5#
sbit K3=P3^3;  //8#
sbit K4=P3^1;        //6#
sbit IR=P3^2; //定义红外接收输入端口7#
bit  IR_ok,state;
ulong longcode;
uint OKCode;
uint Tick,step;
uchar  Count;
bit   IRsync;
bit   IRb,IRa,IR_ok;
void Delay(uint t);
uchar reverse8( uchar c );
void InitTimer();
void main()
{
    P3=0xff;
    InitTimer();
    while(1)
    {
        if(IR_ok)
        {
            if(OKCode==0XE4EB) //用户码/按键码
            {
                state=!state;
                K0=K1=0;
                Delay(3000);
                K0=K1=1;
                if(state)
                {
                    K3=K4=K2=0;
                }
                else
                {
                    K3=K4=K2=1;
                }
            }
            IR_ok=0;
        }
    }
}
void InitTimer()
{
    AUXR=0xc0;
    TMOD = 0x00;
    TH0=Th;
    TL0=Tl;
    EA=ET0=TR0=1;
}
void timer0() interrupt 1
{
    if(IR_ok)
    {
        return;
    }
    IRb = IRa;     //上次电位状态
    IRa = IR;     //当前电位状态
    ++step;
    if(IRb && !IRa)         //是否下降沿(上次高,当前低)
    {
        Tick = step;
        step=0;
        if(Tick>(14000/Tc))
        {
            IRsync=0;
        }
        else if(IRsync)
        {
            if(Tick>(3000/Tc))
            {
                IRsync=0;
            }
            else
            {
                longcode<<=1;
                if(Tick>(1500/Tc))
                {
                    longcode|=1;
                }
                if (--Count==0)
                {
                    uchar x,y;
                    x= longcode;
                    y= longcode>>8;
                    if(x=~y)
                    {
                        OKCode =longcode>>8;
                        OKCode=reverse8(OKCode/256)*256|reverse8(OKCode);
                        IRsync=0;
                        IR_ok=1;
                    }
                }
            }
        }
        else if(Tick>(13500/Tc-2)&&Tick<(13500/Tc+2))
        {
            IRsync=1;
            Count=32;
        }
    }
}
uchar reverse8( uchar c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA )>> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC )>> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 )>> 4;
    return c;
}
void Delay(uint t)
{
    uchar a,b;
    for(; t>0; t--)
        for(b=222; b>0; b--)
            for(a=12; a>0; a--)
            {
                ;
            }
}

回复

使用道具 举报

发表于 2014-5-12 19:38 | 显示全部楼层
261307853 发表于 2014-5-12 18:50
你好,红外码代入到程序中怎么改不能用呢,是不是我这样写不正确,谢了!

友情提示:STC15F104这片子众所周知外部中断有问题,看下是不是这片子的问题吧!DATESHEET上也注明了建议不要使用!
回复

使用道具 举报

 楼主| 发表于 2014-5-12 20:10 来自手机 | 显示全部楼层
nonoge 发表于 2014-5-12 19:38 static/image/common/back.gif

友情提示:STC15F104这片子众所周知外部中断有问题,看下是不是这片子的问题吧!DATESHEET上也注明了建议不要使用!

我用这片子烧一自学习的一路控制,一点问题也没有
回复

使用道具 举报

发表于 2014-5-12 21:27 | 显示全部楼层
261307853 发表于 2014-5-12 20:10
我用这片子烧一自学习的一路控制,一点问题也没有

你这个不是中断的问题,104E只有用外部中断时才有问题,你的程序中没用到外部中断,用的是定时器中断

11.jpg
回复

使用道具 举报

 楼主| 发表于 2014-5-12 21:50 来自手机 | 显示全部楼层
ain365 发表于 2014-5-12 21:27 static/image/common/back.gif

你这个不是中断的问题,104E只有用外部中断时才有问题,你的程序中没用到外部中断,用的是定时器中断

能帮忙改一下程序吗???谢了!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-22 07:37 , Processed in 0.049625 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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