保證可用,你只要把0x...換成你要到按鍵值,當然可以用2,8,10,16進制都行
這是程序:
#include<reg51.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit IR=P3^2;
#define led P1
sbit light1=P1^0;
sbit light2=P1^1;
sbit light3=P1^2;
sbit light4=P1^3;
sbit light5=P1^4;
sbit light6=P1^5;
sbit fu=P3^0;
unsigned char irtime;
bit irpro_ok,irok;
char i,a;
unsigned char IRcord[4];
unsigned char irdata[33];
void Ir_work(void);
void Ircordpro(void);
void tim0_isr (void) interrupt 1 using 1
{
irtime++;
}
void EX0_ISR (void) interrupt 0
{
static unsigned char i;
static bit startflag;
if(startflag)
{
if(irtime<63&&irtime>=33)
i=0;
irdata[i]=irtime;
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
startflag=1;
}
}
void TIM0init(void)
{
TMOD=0x02;
TH0=0x00;
TL0=0x00;
ET0=1;
TR0=1;
}
void EX0init(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
void delay(u16 i)
{
while(i--);
}
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
void Ir_work(void)
{
switch(IRcord[2])
{
case 0x0c:light1=~light1;break;//1
case 0x18:light2=~light2;break;//2
case 0x5e:light3=~light3;break;//3
case 0x08:light4=~light4;break;//4
case 0x1c:light5=~light5;break;//5
case 0x5a:light6=~light6;break;//6
////////////////////////ÅÜÂí
case 0x07: //×óÒÆ
{
IT0 = 1;
EX0 = 1;
EA = 1;
led=0x01;
a=0;
delay(50000);
while(1)
{
if(a==1)
{
break;
}
while(1)
{
if(a==0)
{
for(i=0;i<8;i++)
{
led=_cror_(led,1);
delay(50000);
}
break;case 0x15:a=1;
}
if(a==1)
{
break;
}
}
}
}
break;
case 0x09: //ÓÒÒÆ
{
led=0x01;
delay(50000);
while(1)
{
for(i=0;i<8;i++)
{
led=_crol_(led,1);
delay(50000);
}
}
}
break;
case 0x40: //Íâ
P1=0;
while(1)
{
light3=1;light4=1;delay(10000);
light3=0;light4=0;delay(10000);
light2=1;light5=1;delay(10000);
light2=0;light5=0;delay(10000);
light1=1;light6=1;delay(10000);
light1=0;light6=0;delay(10000);
}
break;
case 0x19: //Àï
P1=0;
while(1)
{
light1=1;light6=1;delay(10000);
light1=0;light6=0;delay(10000);
light2=1;light5=1;delay(10000);
light2=0;light5=0;delay(10000);
light3=1;light4=1;delay(10000);
light3=0;light4=0;delay(10000);
}
break;
///////////////////////ÅÜÂí
case 0x42: //7
P1=0;
light1=1;delay(30000);light3=1;delay(30000);light5=1;delay(10000);
light2=1;delay(30000);light4=1;delay(30000);light6=1;break;
case 0x52: //8
P1=0;
light2=1;delay(30000);light4=1;delay(30000);light6=1;delay(10000);
light1=1;delay(30000);light3=1;delay(30000);light5=1;break;
case 0x4a://9
P1=0xFF;delay(50000);P1=0x00;;delay(50000); break;
case 0x43: //·µ»Ø
P1=0;
{
light1=1;light6=1;delay(10000);
light1=0;light6=0;delay(10000);
light2=1;light5=1;delay(10000);
light2=0;light5=0;delay(10000);
light3=1;light4=1;delay(10000);
light3=0;light4=0;delay(10000);
light2=1;light5=1;delay(10000);
light2=0;light5=0;delay(10000);
light1=1;light6=1;delay(10000);
light1=0;light6=0;delay(10000);
}
break;
case 0x16: //0
IR=0;
break;
case 0x0d: //C
P1=0;
light1=1;delay(30000);light1=0;delay(30000);
light6=1;delay(30000);light6=0;delay(30000);
light5=1;delay(30000);light5=0;delay(30000);
light2=1;delay(30000);light2=0;delay(30000);
light3=1;delay(30000);light3=0;delay(30000);
light4=1;delay(30000);light4=0;delay(30000);
break;
case 0x45:P1=0x00;break;//È«¹Ø
case 0x47:P1=0xFF;break;//È«¿ª
case 0x44:fu=~fu;//¸´Î»
default:break;
}
irpro_ok=0;
}
void Ircordpro(void)
{
unsigned char i, j, k,cord,value;
k=1;
for(i=0;i<4;i++)
{
for(j=1;j<=8;j++)
{
cord=irdata[k];
if(cord>7)
value=value|0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;
}
void main(void)
{
P1=0x00;
fu=0;
a=0;
EX0init();
TIM0init();
while(1)
{
if(irok)
{
Ircordpro();
irok=0;
}
if(irpro_ok)
{
Ir_work();
}
}
} |