打印

红外遥控使小灯亮为啥不成功,内容中有出现的具体问题

[复制链接]
1877|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
q1074926748|  楼主 | 2012-5-9 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我这个红外解码程序无法实现按下遥控器1则小灯全亮,这个解码程序没问题,我用这个程序用uart通信发送能实现。但是实现小灯不行,而且用uart发送,设置的波特率不同,串口调试助手显示的也不同,用9600出现四个十六进制数,分别是用户吗,用户吗,数据吗和数据反码,但是用2400波特率时就出现一个十六进制,我和9600的对照了一下,没有相同的,这是为啥??我看有的程序例程里还要把数据吗加上0x37,0x30这样的东西,另外,红外遥控键值吗到底是怎么出来的,红外遥控键值吗是数据吗还是数据反码??问题 有点多,呵呵呵
/*
* 红外接收数据,查询方式,并通过串口发送
*
* 晶振:11.0592M
*/

#include <reg52.h>

typedef unsigned char uint8;

sbit Ir_Pin = P3^2;

uint8 Ir_Buf[4]; //用于保存解码结果

unsigned int Ir_Get_Low()
{
        TL0 = 0;
        TH0 = 0;
        TR0 = 1;
        while (Ir_Pin ==0); //一直计到Ir_Pin不等0与计到大于1.085*32768=35553.28us
              
        TR0 = 0;           
        return (TH0 * 256 + TL0);
}

/*
* 获取高电平时间
*/
unsigned int Ir_Get_High()
{
        TL0 = 0;
        TH0 = 0;
        TR0 = 1;
        while (Ir_Pin ==1);

        TR0 = 0;
        return (TH0 * 256 + TL0);
}


main()
{
        unsigned int temp;
        char i,j;       
        while (1)
        {
start:
                while (Ir_Pin);

                temp = Ir_Get_Low();
                if ((temp < 7833) || (temp > 8755))  //引导脉冲低电平8500~9500us
                        goto start;
                temp = Ir_Get_High();
                if ((temp < 3686) || (temp > 4608))  //引导脉冲高电平4000~5000us
                        goto start;

                for (i=0; i<4; i++) //4个字节
                {
                        for (j=0; j<8; j++) //每个字节8位
                        {
                                temp = Ir_Get_Low();
                                if ((temp < 184) || (temp > 737)) //200~800us
                                        goto start;

                                temp = Ir_Get_High();
                                if ((temp < 184) || (temp > 1843)) //200~2000us
                                        goto start;

                                Ir_Buf[i] >>= 1;
                                if (temp > 1032) //1120us
                                        Ir_Buf[i] |= 0x80;
                        }
                }
                if(Ir_Buf[2]!=~Ir_Buf[3])
                {
                   return ;
                }
                else
                {
                     if(Ir_Buf[2]==0x4f)//遥控器1的键值
                        P0=0x00;
                }

        }
}


相关帖子

沙发
q1074926748|  楼主 | 2012-5-9 20:25 | 只看该作者
自己顶一个,求教!!!!!!:)

使用特权

评论回复
板凳
lyjian| | 2012-5-9 21:14 | 只看该作者
又是一个莫名其妙的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:郭强

0

主题

58

帖子

1

粉丝