#include <reg51.h>
unsigned char key=0xff;
unsigned char _tt1=0;
unsigned char _tt2=0;
unsigned char p1reg=0xff;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p37=P3^7;
/*TO中断服务子程序 */
void timer0(void) interrupt 1 using 2
{
TH0=-2000/256;
TL0=-2000%256;
if(P1^p1reg!=0)
{ if(_tt1=0) _tt1=1;
else { if(_tt1>20) /*防抖动*/
{ key=P1;
switch(key)
{ case 1:p20=!p20;break;
case 2:p21=!p21;break;
case 4:p22=!p22;break;
case 8:p23=!p23;break;
default :break;
}
}
_tt1=0;
}
p1reg=P1;
}
else if(_tt1>0) _tt1++;
_tt2++;
}
/*T0中断设置 2ms*/
void sett0()
{
TH0=-2000/256;
TL0=-2000%256;
TMOD=0x01; /*T0方式1*/
EA=1;
ET0=1;
TR0=1; /*启动订时器T0*/
}
/*指示灯子程序*/
void led()
{
if(_tt2>100)
{ p37=!p37;
_tt2=0;
}
}
/* 调用子程序*/
void main()
{
P1=0xff;
P2=0xff;
p37=1 ;
sett0();
while(1) led();
}