|
发表于 2012-5-25 23:20:06
|
显示全部楼层
#include<reg52.h>
unsigned char delay=0;
sbit key=P3^5;
void init();
main()
{
unsigned char lp=0,time=0,num=0,flag=0,value=0,ldat=0,ndat=0;
init();
P0=0xfe;
P1=0;
while(1){
if(delay){
delay=0;
switch(lp)
{
case 0:P2=0xf0;if(P2!=0xf0)lp++;if(num++>40)ldat=0;break;
case 1:if(P2!=0xf0){ndat=P2;P2=ndat|0x0f;ndat=P2;lp++;}else lp=0;num=0;break;
case 2:if(P2==ndat){if(num++>99)P1=~ndat;}else lp++;break;
case 3:if(num>99);else{if(ldat!=ndat){ldat=ndat;}else{P0--;}P1=ndat;}num=0;lp=0;break;
}
}
}
}
void init()
{
EA=1;
RCAP2H=55536/256;
RCAP2L=55536%256;
TH2=RCAP2H;
TL2=RCAP2L;
ET2=1; //开启定时器2中断
TR2=1; //启动定时器
}
void timer()interrupt 5
{
TF2=0;
delay=1;
}
我感觉4步应该就能实现。具体连发和组合,在最后一步增加对ndat和ldat的判断就可以了 |
|