菜鸟求助高手 怎么用红外遥控解码的键值控制LED或者数码管

2019-07-15 20:35发布

假如遥控器按键1,2,3,4,5的键值分别是0x0c,0x0d,0x0e,0x10,0x11,怎么用这些键来控制P0口LED的亮灭或者数码管的亮灭
主程序要怎么写?另外程序要包括哪些部分?把定时器,中断和红外解码的那些复制就可以吗?需要修改哪些内容????求达人指教!!!!!!!



函数的功能:定时器0的初始化**************************************************************************/ void timer0init(){        TMOD=0x02;                        TH0=0x00;                TL0=0x00;                        ET0=1;                        TR0=1;                                EA=1;                }
/************************************************************************外部中断0的初始化***********************************************************************/ void int0init(){         IT0=1;                                                EX0=1;                                                EA=1;                                        }/**********************************************************************定时器0的功能函数,每中断一次irtime++,用于计时***********************************************************************/ void timer0() interrupt 1{        irtime++;                } /***********************************************************************外部中断0的处理函数,每当有低电平数据过来时,中断一次,(使用次中断的前提是,信号线必需接在外部中断0上面,也就是P3^2口),函数功能是,把信号从高低电平变成时间的代码放入irdata【】中 ************************************************************************/ void int0() interrupt 0                                        {        if(startflag)        {                if(irtime>40)                                        {                                                                           bitnum=0;                                        }                 irdata[bitnum]=irtime;                         irtime=0;                                                                  bitnum++;                 if(bitnum==33)                                         {                         bitnum=0;                                                irreceok=1;                                         }        }        else                                                 {                startflag=1;                                        irtime=0;                                                irreceok=1;                                        } }/*************************************************************************函数功能:把irdata【】中的时间代码转换成二进制代码存放在ircode【】中 **************************************************************************/ void irpros(){        uchar k=17,value,j,i;                         for(j=0;j<2;j++)                                {                for(i=0;i<8;i++)                                  {                        value=value>>1;                                              if(irdata[k]>6)                                           {                                value=value|0x80;                         }                         k++;                                         }                         ircode[j]=value;        }         irprosok=1; }/**************************************************************************** 函数的功能是:将ircode【】中的二进制代码转换成为16进制代码便于在数码管上显示 ***************************************************************************/ void irwork(){        display[0]=ircode[0]/16;        display[1]=ircode[0]%16;        display[2]=ircode[1]/16;        display[3]=ircode[1]%16;}/************************************************************************函数功能:用数码管显示解码结果************************************************************************/ void display1(){        uchar i        ;        for(i=0;i<2;i++)        {                P0=seg_du[display];                P2=seg_we ;                delay_50us(20);        }}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。