这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机MCU制作学习红外遥控,但无法工作。。。

共6条 1/1 1 跳转至

单片机MCU制作学习红外遥控,但无法工作。。。

工程师
2019-11-27 17:00:55     打赏

学习红外线遥控好几天,看了很多教程,感觉还是一头雾水,最后自己估摸着写了一个最小发射程序,不出意外,没有任何动静,请大家帮忙看一下,这个程序错在哪儿,如果错的实在太多,能不能麻烦帮忙写一个这样的小程序,让我学习一下,谢谢!(不要写大的遥控器程序,我的智商,根本看不懂)


单片机源程序如下:


#include <stc52.h>
#include <intrins.h> 

#define u8 unsigned char
#define u16 unsigned int

sbit plflag=P1^0;        //定义红外发射口                                
sbit key=P1^1;                //定义一个发射开关

void time_init();        //定时器初始化,
void s0();                //发射一位0,
void s1();                //发射一位1,


void main()
        
{        
        plflag=0;        //P1.0口先置0,
        time_init();
        while(1)
        {
                if(key==0)
                {
                
                TL1 = 0x9A;                //定时器1延时9毫秒设定,
                TH1 = 0xDF;                //
                TR0 = 1;                //打开定时器0,
                TR1 = 1;                //打开定时器1,
                while(!TF1);                //等待9毫秒
                TR0 = 0;                //关闭定时器0
                TR1 = 0;                //关闭定时器1,
                plflag=0;                //P1.0口归0,
                        
                        
                TL1 = 0xCD;                //定时器一延时4.5毫秒,
                TH1 = 0xEF;                //
                TF1 = 0;                //清空定时器1标志位,
                TR1 = 1;                //打开定时器1,
                while(!TF1);                //等待4.5毫秒,
                TR1 = 0;                //关闭定时器1,

                
                s0();s0();s0();s0();s0();s0();s0();s0();        //测试写三个字节,0x00,0xff,0xff
                s1();s1();s1();s1();s1();s1();s1();s1();
                s1();s1();s1();s1();s1();s1();s1();s1();
                }
                
        }
        
}

void s0()                                //写一位0的函数,
        {
                TL1 = 0xFC;                //定时560微秒设置,
                TH1 = 0xFD;
                TF1 = 0;
                TR0 = 1;
                TR1 = 1;
                while(!TF1);
                TR0 = 0;
                TR1 = 0;
                plflag=0;
                
                TL1 = 0xFC;        
                TH1 = 0xFD;
                TF1 = 0;
                TR1 = 1;
                while(!TF1);
                TR1 = 0;
                
        }
        
void s1()                                //写一位1的函数,
        {
                TL1 = 0xFC;                //定时560微秒设置,
                TH1 = 0xFD;
                TF1 = 0;
                TR0 = 1;
                TR1 = 1;
                while(!TF1);
                TR0 = 0;
                TR1 = 0;
                plflag=0;
                
                TL1 = 0xEF;                //定时器1.685毫秒设置,
                TH1 = 0xF9;
                TF1 = 0;
                TR1 = 1;
                while(!TF1);
                TR1 = 0;
        }        

void time_init()                        定时器初始化函数,定时器零产生38khz
{
        
        TMOD = 0x11;                        //定时器0定时器1,设置为工作模式1,
        TL0 = 0xF4;                        //
        TH0 = 0xFF;
        
        TF0 = 0;
        TF1 = 0;
        ET0 = 1;
        EA = 1;
}

void Timer0() interrupt 1                //定时器0中断服务函数
        {

                TL0 = 0xf4;
                TH0 = 0xFF;
                plflag=~plflag;
                
        } 





关键词: 红外遥控     学习红外遥控     51单片机     遥控    

高工
2019-11-27 17:10:30     打赏
2楼

可以用手机摄像头对准红外头,看看有没有红外发出


工程师
2019-11-27 21:59:58     打赏
3楼

建议结合示波器得到的时间参数(长、短脉冲的时间),把你MCU得到的测量参数做对比,看看相差多少,就好调整程序了。


工程师
2019-11-27 22:06:26     打赏
4楼

先不要实现“学习”功能,先要把“遥控解码”调试出来。。。


工程师
2019-11-27 22:10:31     打赏
5楼

我的个人经验是,结合串口,把要观察的参数或数据通过串口发送给PC,这样调试和排除较快


工程师
2019-11-28 22:07:06     打赏
6楼

代码还是有问题 好好检查一下啊


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]