lurendezi 发表于 2011-9-27 15:52:27

红外发射必须加上载波吗,直接发射38khz的信息脉冲可以吗

用红外发射发射头发射脉冲,接收头记录脉冲个数,我买的板子接收头和发射头都没连接到外部中断上,现在的情况是用遥控器发射,接收头可以检测到低电平并且进行计数。但是用程序发射信号就行不通了,红外发射必须加上载波吗,直接发射38khz的信息脉冲可以吗?求解决

lurendezi 发表于 2011-9-27 16:18:52

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char


uchar num,aa;
sbit keysj=P3^0;
sbit key=P3^4;
sbit a=P2^5;
sbit b=P2^6;
sbit c=P2^7;
sbit wr=P3^6;
sbit ir_pin=P1^1;    //SM0038红外接口
sbit ir_out=P1^0;

uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void wela()
{
        c=1;
        b=1;
        a=0;       
        wr=0;
}

void dula()
{
        c=1;
        b=1;
        a=1;
        wr=0;
}

/*void deng()

{
        c=1;
        b=0;
        a=0;
        wr=0;
}*/

void display(uint tt)
{

        dula();
        P0=        table;
        wr=1;
        wela();
        P0=0x02;
        wr=1;
        delay(2);


        dula();
        P0=        table;
        wr=1;
        wela();
        P0=0x04;
        wr=1;
        delay(2);

        dula();
        P0=        table;
        wr=1;
        wela();
        P0=0x08;
        wr=1;
        delay(2);
}

/*clearmen()
{
        ir_out=0;         //关遥控输出
        TMOD=0x20;          //8位自由重复模式
        TH1=0xf3;          //40KHZ初值
        TL1=0xf3;
        ET1=1;
        EA=1;

}
/*************发射函数******************/
/*sed(uint s)
{   while(s--)
       {
      TR1=1;
                delay(1);
                TR1=0;
                ir_out=1;
          delay(2);

      TR1=1;
                delay(1);
                TR1=0;
                ir_out=0;
          delay(3);

      }         
       
//        delay(10);
}*/

/**************主函数*******************/
main()
{
//        keysj=0;
//        key=1;
//        clearmen();
                while(1)
                {
/*                        if(key==0)
                        {
                                  _nop_();_nop_();_nop_();_nop_();
                                        _nop_();_nop_();_nop_();_nop_();

                                if(key==0)
                                {
                                        while(!key);
                                 sed(3);
                                  }
                        }*/
                        if(ir_pin==0)        //接收
                                num++;
       
                        display(num);
                }
}
/***************40kHz发生器************/
//定时中断T1
/*void time_intt1(void) interrupt 3
{
        ir_out=~ir_out;
}*/

lurendezi 发表于 2011-9-28 13:35:41

请大侠们指点一下,菜鸟不胜感激,也许您的一句话将为像我这样的菜鸟节省一天的时间,谢谢

linminsong 发表于 2011-10-8 15:30:33

38khz 就是载波啊

linls 发表于 2011-10-9 08:47:45

看您买的接收头是不是带解调38khz的,一般是有的,那想要接收头收到发射信号,这个发射信号就要38Khz载波调制。

zspzwal 发表于 2011-10-9 16:00:29

编码中高电平发射38khz脉冲,低电平不发射

cjlong007 发表于 2014-12-12 23:00:39

发射函数有问题,在定时中断中高电平发射为脉冲(即不断取反),低电平发射为0即不发射

lxa0 发表于 2014-12-13 00:30:16

lurendezi 发表于 2011-9-27 16:18
#include
#include
#define uint unsigned int


在代码中
去控制发射与不发射就可以了
无须单独搞载波

xuanwozhe 发表于 2014-12-13 22:57:42

最近准备搞这个,先mark
页: [1]
查看完整版本: 红外发射必须加上载波吗,直接发射38khz的信息脉冲可以吗