#include<reg51.h> sbit op1=P0^0; sbit op2=P0^1; sbit op3=P0^2; sbit op4=P0^3; int c; void delay(void)//delay .5 second { int d; for(d=0;d<10;d++) { TF1=0;//clear overflow flag TL1=0xB0; TH1=0x3C; TR1=1; //start timer while(TF1==0) TR1=0; //stop timer } } void intr1(void) interrupt 2 //external interrupt1 function { EX1=0; //disable all interrupts TH0=0x00; //reset counter TL0=0x00; TR0=1; //start counter delay(); TR0=0; //stop counter c=TL0; //store count EX1=1; //enable all interrupts } void main() { TMOD=0x25; //initialize T0 as 16bit counter and T1 as 16bit timer IE=0x84; //enable external interrupt 1 if((c>=0x73)&&(c<=0x7D)) { if(op1==0) { op1=1; } else { op1=0; } } else if((c>=0x5F)&&(c<=0x69)) { if(op2==0) { op2=1; } else { op2=0; } } else if((c>=0x4B)&&(c<=0x55)) { if(op3==0) { op3=1; } else { op3=0; } } else if((c>=0x37)&&(c<=0x41)) { if(op4==0) { op4=1; } else { op4=0; } } }