|
求指導(dǎo),想要實(shí)現(xiàn)按鍵4按下LED4延時(shí)0.5秒閃爍,按其他鍵或者再按一下熄滅;按鍵2按下LED2稍暗,按其他鍵或者再按一下熄滅,按鍵3按下LED2稍亮,按其他鍵或者再按一下熄滅,程序應(yīng)該怎么修改呢?程序及按鍵編碼值如下:按鍵編碼值:
按鍵1:00-FF-0C-F3
按鍵2:00-FF-18-E7
按鍵3:00-FF-5E-A1
按鍵4:00-FF-08-7F
按鍵5:00-FF-1C-E3
按鍵6:00-FF-5A-A5
按鍵7:00-FF-42-BD
按鍵8:00-FF-52-AD
程序:
#include <reg52.h>
#include <intrins.h>
#define NOP() _nop_()
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_()};
void delay(uchar x);
void delay1(int ms);
void delayms(uint);
void beep(void);
sbit IRIN = P3^2;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
sbit BEEP = P2^3;
uchar IRCOM[7];
unsigned char Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,i,j;
main()
{
IE = 0x81;
TCON = 0x01;
IRIN=1;
BEEP=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
LED6=1;
LED7=1;
LED8=1;
delay1(10);
while(1);
}
void IR_IN(void) interrupt 0
{
unsigned char j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1;
return;
}
while (!IRIN)
{delay(1);}
for (j=0;j<4;j++)
{
for (k=0;k<8;k++)
{
while (IRIN)
{delay(1);}
while (!IRIN)
{delay(1);}
while (IRIN)
{
delay(1);
N++;
if (N>=30)
{
EX0=1;
return;
}
}
IRCOM[j]=IRCOM[j] >> 1;
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
N=0;
}
}
if (IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
IRCOM[5]=IRCOM[2] & 0x0F;
IRCOM[6]=IRCOM[2] >> 4;
if(IRCOM[5]>9)
{ IRCOM[5]=IRCOM[5]+0x37;}
else IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{ IRCOM[6]=IRCOM[6]+0x37;}
else IRCOM[6]=IRCOM[6]+0x30;
Y1=Y2=Y3=Y4=Y5=Y6=Y7=Y8=Y9=0;
switch(IRCOM[2])
{
case 0x0C: Y1=0x01; break;
case 0x18: Y2=0x01; break;
case 0x5E: Y3=0x01; break;
case 0x08: Y4=0x01; break;
case 0x1C: Y5=0x01; break;
case 0x5A: Y6=0x01; break;
case 0x42: Y7=0x01; break;
case 0x52: Y8=0x01; break;
}
if(Y1&0xFF)LED1=0;
else LED1=1;
if(Y2&0xFF)LED2=0;
else LED2=1;
if(Y3&0xFF)LED3=0;
else LED3=1;
if(Y4&0xFF)LED4=0;
else LED4=1;
if(Y5&0xFF)LED5=0;
else LED5=1;
if(Y6&0xFF)LED6=0;
else LED6=1;
if(Y7&0xFF)LED7=0;
else LED7=1;
if(Y8&0xFF)LED8=0;
else LED8=1;
beep();
EX0 = 1;
}
void beep(void)
{
unsigned char i;
for (i=0;i<100;i++)
{
delay(4);
BEEP=!BEEP;
}
BEEP=1;
}
void delay(unsigned char x)
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
void delay1(int ms)
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
|
|