#include<reg52.h>    
 
/***************************************************************** 
                 宏定义字符型和整型 
*****************************************************************/ 
#define uchar unsigned char  
#define uint  unsigned int  
/***************************************************************** 
                           按键定义 
*****************************************************************/ 
uchar CNT1=0;//判断按键次数 
uchar CNT2=0;//判断按键次数 
uchar CNT3=0;//判断按键次数 
uchar CNT4=0;//判断按键次数 
uchar CNT5=0;//判断按键次数 
 
sbit KEY1=P2^0;         //按键1 
sbit KEY2=P2^1;         //按键2 
sbit KEY3=P2^2;         //按键3 
sbit KEY4=P2^3;         //按键4 
sbit KEY5=P2^4;         //按键5 
 
/******************************************************************** 
                            延时函数 
*********************************************************************/ 
void delay(uchar t) 
{ 
  uchar i,j; 
   for(i=0;i<t;i++) 
   { 
            for(j=13;j>0;j--); 
         { ; 
         } 
   } 
} 
 
/******************************************************************** 
                            按键扫描函数 
*********************************************************************/ 
void KEY() //按键扫描程序 
{ 
uchar i; 
i=20; 
 
if((CNT1==2)||(CNT2==2)||(CNT3==2)||(CNT4==2)||(CNT5==2)) {P1=0XFF;CNT1=0;CNT2=0;CNT3=0;CNT4=0;CNT5=0;} 
if(KEY1==0){delay(i);if(KEY1==0){CNT2=0;CNT3=0;CNT4=0;CNT5=0 1=0XFE;while(!KEY1);CNT1++;}} 
if(KEY2==0){delay(i);if(KEY2==0){CNT1=0;CNT3=0;CNT4=0;CNT5=0 1=0XFD;while(!KEY2);CNT2++;}} 
if(KEY3==0){delay(i);if(KEY3==0){CNT1=0;CNT2=0;CNT4=0;CNT5=0 1=0XFB;while(!KEY3);CNT3++;}} 
if(KEY4==0){delay(i);if(KEY4==0){CNT1=0;CNT2=0;CNT3=0;CNT5=0 1=0XF7;while(!KEY4);CNT4++;}} 
if(KEY5==0){delay(i);if(KEY5==0){CNT1=0;CNT2=0;CNT3=0;CNT4=0 1=0XEF;while(!KEY5);CNT5++;}} 
 
}         
/******************************************************************** 
                            按下次数判断函数 
*********************************************************************/ 
/*void jianzhi() 
{ 
switch(keycnt) //按下次数判断 
                        { 
                        case 0: OUT=1;break; //输出解锁 
                        case 1: OUT=0;break; //输出自锁 
                        case 2: OUT1=1;break; //输出解锁 
                        case 3: OUT1=0;break; //输出自锁 
                        } 
} 
/******************************************************************** 
                            定时中断服务函数 
*********************************************************************/ 
/*void t0(void) interrupt 1 using 0 //定时中断服务函数 
{ 
        TH0=0x06; //对TH0 TL0 赋值 
        TL0=0x06; 
        tcnt++; //每过250ust tcnt 加一 
        if(tcnt==400) //计满400 次(1/10 秒)时 
        { 
                tcnt=0; //重新再计 
                sec++; 
                if(sec==20) //定时2 秒,在从零开始计时 
                { 
                t=1; 
                //sec=0;           
                //t++; 
            //keycnt=t%2; 
            //if(t==100)t=0; 
                } 
        } 
} 
/******************************************************************** 
                            主函数 
*********************************************************************/ 
void main() 
 
{ 
        while(1) 
        { 
        KEY(); 
        } 
} 
/******************************************************************** 
                              结束 
*********************************************************************/ 
 
 
 
 |