找回密码
 立即注册

QQ登录

只需一步,快速开始

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

红外接收接收不了,麻烦各位师兄帮忙看一下。

[复制链接]
跳转到指定楼层
楼主
ID:342739 发表于 2024-12-17 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*************  本程序功能说明  **************

单片机型号:STC89C52

晶振频率  :11.0592MHz

复位电路  :内部复位电路

功能描述  :演示红外接收点亮LED。

LED对应IO口:P1.0-P3.7-P3.6-P3.5-P3.4-P3.3-P3.2-P3.1

******************************************/

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit IR_INPUT=P3^2;               //红外接收引脚
bit IRflag=0;                                       //红外接收结束标志
uchar IRcode[4];                       //红外代码接收缓冲区
void Initinfrared();

void main()
{
        Initinfrared();  
  while(1)
  {
                switch(IRcode[2])
                {
                        case 0x15:P1=0x7f;break;
                        case 0x07:P1=0xbf;break;
                        default:P1=0xff;break;
                }
        }

}

void Initinfrared()
{
    IR_INPUT=1;
                TMOD=0x01;
                EA=1;
                ET0=0;   //打开T0中断
    EX0=1;         //打开外部中断0
    IT0=1;          //下降沿触发

}
/*获取当前高电平的结束时间*/
unsigned int GetHighTime()
{
                TH0=0;  
    TL0=0;
    TR0=1;
                while(IR_INPUT)
                {
                        if(TH0>=0x40)  //  12/11.0592*16384≈18mS
                        break;
                }
                TR0=0;
                return(TH0*256+TL0);
}
/*获取当前低电平的结束时间*/
unsigned int GetLowTime()
{
                TH0=0;  
    TL0=0;
    TR0=1;
                while(!IR_INPUT)
                {
                        if(TH0>=0x40)
                        break;
                }
                TR0=0;
                return(TH0*256+TL0);
}

void EXINT1_ISR() interrupt 0 // 外部中断服务程序
{
                uchar i,j;  
    uchar buf;
                uchar time;
                time=GetLowTime();
                if((time<7833)||(time>8755)) // 引导码9ms判断  12/11.0592*X≈8500 (8.5ms~9.5ms之间)
                {
                        EX0=1;
                        return;
                }
                time=GetHighTime();
                if((time<3686)||(time>4608)) // 引导码头4.5ms判断  12/11.0592*X≈4000 (4ms~5ms之间)
                {
                        EX0=1;         // 打开外部中断0
                        return;         // 返回
                }
                for(i=0;i<4;i++)                                                 // 接收4个字节处理程序
                {
                        for(j=0;j<8;j++)                                  // 接收8个位/字节,处理程序
                        {
                                time=GetLowTime();
                                if((time<313)||(time>718))  // 判断560us低电平  12/11.0592*X≈560us (500us~600us之间)
                                {
                                        EX0=1;
                                        return;
                                }
                                time=GetHighTime();
                                if((time>313)&&(time<718))        // 判断560us高电平  12/11.0592*X≈560us (500us~600us之间)
                                {
                                        buf>>=1;
                                }                        // 当确认是0时,把变量buf循环右移,将低位移到高位
                                else if((time>1345)&&(time<1751)) // 判断1.68ms高电平  12/11.0592*X≈1680us (1.46ms~1.9ms之间)
                                {
                                        buf>>=1;                       // 当确认是1时,右移1位
                                        buf|=0x80;
                                }
                                else
                                {
                                        EX0=1;
                                        return;
                                }
                        }
                        IRcode[i]=buf;  // 接收完数据后把数据传给数组对应的位置。
                }
                IRflag=1;                // 将结束标志位置1,代表接收完成,中断返回。
                EX0=1;

}

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

使用道具 举报

沙发
ID:57657 发表于 2024-12-18 11:13 | 只看该作者
遥控接收需要红外接收头,接收管没有解调放大电路用不了的,具体需要有原理图才知道是什么问题。
回复

使用道具 举报

板凳
ID:517951 发表于 2024-12-19 07:51 | 只看该作者
用示波器,或逻辑分析仪接到红外接收管输出脚量测一下有没有输出波形, 软件对应的IO端口有没有与红外端口正确对应.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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