找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手求助,单片机红外遥控控制led程序不稳定

[复制链接]
跳转到指定楼层
楼主
ID:779880 发表于 2020-6-15 13:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
//最近学了红外遥控,然后想用红外遥控控制led,发现按下去有时候亮,有时候不亮,为什么啊?
//下面这是单片机代码;


#include "reg52.h"                        

typedef unsigned int u16;         
typedef unsigned char u8;

sbit IRIN=P3^2;
sbit led=P2^1;
u8 IrValue[6];
u8 Time;


void delay(u16 i)
{
        while(i--);        
}



void IrInit()
{
        IT0=1;
        EX0=1;
        EA=1;        

        IRIN=1;
}

void main()
{ IrInit();
        if(IrValue[2]==0x45)
        {
                led=~led;
  }

}

void ReadIr() interrupt 0
{
        u8 j,k;
        u16 err;
        Time=0;                                         
        delay(700);        
        if(IRIN==0)               
        {         
               
                err=1000;                                
                while((IRIN==0)&&(err>0))                        
                {                        
                        delay(1);
                        err--;
                }
                if(IRIN==1)                        
                {
                        err=500;
                        while((IRIN==1)&&(err>0))               
                        {
                                delay(1);
                                err--;
                        }
                        for(k=0;k<4;k++)               
                        {                                
                                for(j=0;j<8;j++)        
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0))
                                        {
                                                delay(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))        
                                        {
                                                delay(10);        
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;         
                                        if(Time>=8)                        
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                                
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }                        
}

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

使用道具 举报

板凳
ID:389488 发表于 2020-9-15 08:36 | 只看该作者
中断函数里面有2个return
回复

使用道具 举报

沙发
ID:123289 发表于 2020-6-16 15:50 | 只看该作者
你能用框图画出你的思路吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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