菜鸟求助高手 怎么用红外遥控解码的键值控制LED或者数码管
时间:10-02
整理:3721RD
点击:
假如遥控器按键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); }}
主程序要怎么写?另外程序要包括哪些部分?把定时器,中断和红外解码的那些复制就可以吗?需要修改哪些内容?求达人指教!
函数的功能:定时器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); }}
主函数检测按键并取值,然后P0口直接赋值就好了吧,数码管看看管脚图共阴共阳也很容易控制的
能否详细说下我上面的程序要怎么写啊 我51菜鸟刚入门