#include <reg52.h>
//定义一下,方便使用
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^4; //按键1定义
sbit key2=P2^5; //按键2定义
sbit key3=P2^6; //按键3定义
sbit key4=P2^7; //按键4定义
sbit led1=P3^0; //led1端口
sbit led2=P3^1; //led2端口
sbit led3=P3^2; //led3端口
sbit led4=P3^3; //led4端口
/**************************临时变量定义****************************/
uchar keyflag_1=0; //按键标志位
uchar keyflag_2=0; //按键标志位
uchar keyflag_3=0; //按键标志位
uchar keyflag_4=0; //按键标志位
/*************************毫秒延时函数****************************/
void delayms(uint z)
{
uint x,y;
for(x=0;x<=76;x++)
for(y=0;y<=z;y++);
}
/**************************按键扫描子程序****************************/
void keyscan()
{
if(key1==0) //第一个按键按下
{
delayms(5); //进行短暂延时消除按键的抖动
if(key1==0) //第一个按键确实按下
{
keyflag_1++; //键一按下,标志位加一
while(!key1); //松手检测
}
}
if(keyflag_1==1){led1=0;} //点亮LED1
if(keyflag_1==2){led1=1;keyflag_1=0; } //关闭LED1
if(key2==0) //第二个按键按下
{
delayms(5); //进行短暂延时消除按键的抖动
if(key2==0) //第二个按键确实按下
{
keyflag_2++; //键一按下,标志位加一
while(!key2); //松手检测
}
}
if(keyflag_2==1){led2=0;} //点亮LED2
if(keyflag_2==2){led2=1;keyflag_2=0; } //关闭LED2
if(key3==0) //第三个按键按下
{
delayms(5); //进行短暂延时消除按键的抖动
if(key3==0) //第三个按键确实按下
{
keyflag_3++; //键一按下,标志位加一
while(!key3); //松手检测
}
}
if(keyflag_3==1){led3=0;} //点亮LED3
if(keyflag_3==2){led3=1;keyflag_3=0; } //关闭LED3
if(key4==0) //第四个按键按下
{
delayms(5); //进行短暂延时消除按键的抖动
if(key4==0) //第四个按键确实按下
{
keyflag_4++; //键一按下,标志位加一
while(!key4); //松手检测
}
}
if(keyflag_4==1){led4=0;} //点亮LED4
if(keyflag_4==2){led4=1;keyflag_4=0; } //关闭LED4
}
void main()
{
while(1) //程序循环执行
{
keyscan(); //按键扫描,子函数
}
}
|