本帖最后由 dzfsy394168090 于 2013-5-29 08:16 编辑
程序如下 12M晶振
delaytime(1)测试延长时间:679us,
delaytime(2)测试延长时间:1332us
要实现目标:0x45键按下实现流水灯,按下0x46键关闭。其他键无反应。
不知道是测试的方法不对还是怎么的?求解
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar ram[4]={0,0,0,0};
sbit IRIN=P3^2;
uchar key,a[8];
void run();
void delaytime(uint t);
void delaytime(uint t)
{uint a,b;
for(a=t;a>0;a--)
for(b=80;b>0;b--);
}
void main()
{
T0=1;
EA=1;
EX0=1;
IRIN=1;
if(key==0x45)
{while(1)
run();
}
else
P1=0xff;
}
void run()
{uint i;
uchar a[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
for(i=0;i<8;i++)
{ P1=a;
delaytime(1700); }
}
void IR() interrupt 0
{ uchar m,n;
uint i;
for(i=0;i<1100;i++)
{if(IRIN)
return;
}
while(IRIN!=1);
while(IRIN);
for(m=0;m<4;m++)
{
for(n=0;n<8;n++)
{while(IRIN!=1);
delaytime(1);
if(IRIN)
{ram[m]=ram[m]|0x80;
delaytime(2);
}
else
ram[m]=ram[m]>>1;
}
}
if(ram[2]!=(~(ram[3]&0x7f)))
{ for(i=0;i<4;i++)
ram=0;
return;
}
key=ram[2];
}
一周热门 更多>