微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机红外通信控制LED为什么控制不了

51单片机红外通信控制LED为什么控制不了

时间:10-02 整理:3721RD 点击:
代码如下:#include "reg52.h"                        typedef unsigned int u16;       
typedef unsigned char u8;

sbit led1=P2^0;
sbit led2=P2^1;
sbit IRIN=P3^2;
u8 IrValue[6];
u8 Time;
u8 DisplayData[8];
void delay(u16 i)
{
        while(i--);       
}
void control ()
{
        if(IrValue[2] = 0x44)
        led1 = 1;
        else if (IrValue[2] = 0x46)
                led1 =0;
}
void IrInit()
{
        IT0=1;//???μ??′¥·¢
        EX0=1;//′ò?a?D??0?êDí
        EA=1;        //′ò?a×ü?D??
        IRIN=1;//3?ê??ˉ???ú
}

void main()
{             
        IrInit();
        while(1)
        {       
                control ();
  }
}
void ReadIr() interrupt 0
{
        u8 j,k;
        u16 err;
        Time=0;                                         
        delay(700);        //7ms
        if(IRIN==0)                //è·è?ê?·???μ??óê?μ??yè·μ?D?o?
        {         
               
                err=1000;                                //1000*10us=10ms,3?1y?μ?÷?óê?μ?′í?óμ?D?o?
                /*μ±á???ì??t???a??ê??-?·£?è?1?óDò???ì??t?a?ùμ?ê±oòì?3??-?·£??aμ?3ìDò3?′íμ?ê±
                o?£?3ìDò?à?ú?aà?*/       
                while((IRIN==0)&&(err>0))        //μè′y?°??9msμ?μíμ???1y襠                
                {                       
                        delay(1);
                        err--;
                }
                if(IRIN==1)                        //è?1??yè·μèμ?9msμíμ???
                {
                        err=500;
                        while((IRIN==1)&&(err>0))                 //μè′y4.5msμ??eê???μ???1yè¥
                        {
                                delay(1);
                                err--;
                        }
                        for(k=0;k<4;k++)                //12óD4×éêy?Y
                        {                               
                                for(j=0;j<8;j++)        //?óê?ò?×éêy?Y
                                {
                                        err=60;               
                                        while((IRIN==0)&&(err>0))//μè′yD?o??°??μ?560usμíμ???1yè¥
                                        {
                                                delay(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))         //??????μ???μ?ê±??3¤?è?£
                                        {
                                                delay(10);         //0.1ms
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;         //k±íê?μú??×éêy?Y
                                        if(Time>=8)                        //è?1???μ???3???′óóú565us£????′ê?1
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                //ó?íêê±??òa??D??3?μ                                                       
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }                       
}
按下遥控的键没有任何反应,
如果control改为如下所示
void control ()
{
        led1=1;led2=1;
        if(IrValue[2] = 0x44)
        led1 = 0;
        else if (IrValue[2] = 0x46)
                led2 =0;
}
则LED1一开始就亮着而且按任何建LED1都会闪一下
是程序的问题吗?还是硬件的问题


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top