找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1311|回复: 7
打印 上一主题 下一主题
收起左侧

单片机学习红外遥控程序,求指导

[复制链接]
跳转到指定楼层
楼主
ID:437615 发表于 2019-10-22 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
学习红外线遥控好几天,看了很多教程,感觉还是一头雾水,最后自己估摸着写了一个最小发射程序,不出意外,没有任何动静,请大家帮忙看一下,这个程序错在哪儿,如果错的实在太多,能不能麻烦帮忙写一个这样的小程序,让我学习一下,谢谢!(不要写大的遥控器程序,我的智商,根本看不懂)
单片机源程序如下:
#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;
               
        }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:351421 发表于 2019-10-22 17:11 | 只看该作者
红外遥控的话,你具体想实现什么功能,比如要控制一款空调的开关,你要先让程序学习他的编码,然后发送正确的指令(包括格式和指令的内容),才能实现
回复

使用道具 举报

板凳
ID:149144 发表于 2019-10-22 19:21 | 只看该作者
谁来接收?要在接收端看数据啊,加个接收的,然后再串口里看数据
回复

使用道具 举报

地板
ID:437615 发表于 2019-10-22 20:37 来自手机 | 只看该作者
兄弟们我是问这个程序问题在什么地方,接收是连在电脑串口上自动的,现在接收不到数据
回复

使用道具 举报

5#
ID:650660 发表于 2019-11-27 11:27 | 只看该作者
没耐心 发表于 2019-10-22 17:11
红外遥控的话,你具体想实现什么功能,比如要控制一款空调的开关,你要先让程序学习他的编码,然后发送正确 ...

我想要做一个电视的遥控器怎么做?
回复

使用道具 举报

6#
ID:25310 发表于 2019-11-27 17:56 | 只看该作者
找个例程看看,正点原子也有,金沙滩哪个也不错。
回复

使用道具 举报

7#
ID:396245 发表于 2019-11-27 18:04 | 只看该作者
首先,引导码后面需要4个字节才能构成一个完整的数据(引导码  地址码  地址反码 数据码 数据反码)。
回复

使用道具 举报

8#
ID:396245 发表于 2019-11-27 18:07 | 只看该作者
首先,一个完整的数据帧应该是  引导码 地址码 地址反码 数据码 数据反码。你引导码后面只发送3个字节,接收端无法检验是否有数据错误,会被抛弃。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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