当前位置:文档之家› 51单片机4x4按键程序

51单片机4x4按键程序

/*51单片机4*4矩阵按键程序*/

#include //加载头文件

sbit LED0=P0^0; //定义8个LED灯I/O口
sbit LED1=P0^1;
sbit LED2=P0^2;
sbit LED3=P0^3;

sbit LED4=P0^4;
sbit LED5=P0^5;
sbit LED6=P0^6;
sbit LED7=P0^7;

sbit BUZZ=P1^1; //定义蜂鸣器I/O口

void KEY(); //声名按键驱动子函数
void Delay(unsigned int i); //声名延时子函数

void main()
{
while(1) //死循环执行按键子函数
{
KEY();
}
}

void KEY()
{
unsigned char i=0; //定义变量
unsigned char j=0;
unsigned char k=0;
unsigned char KEY_VALUE=0;
P2=0x0f; //P2设为0000 1111
i=P2;
if(i!=0x0f) //检测是否有按键按下
{
Delay(1000); //延时10ms
P2=0X0F;
i=P2;
if(i!=0x0f) //再次检测是否有按键按下
{
P2=0X0F;
i=P2;
P2=0XF0;
j=P2;
P2=0xff;
k=i|j; //通过反转,得出按下按键的键值
switch(k) //将得到的键值定义出16个按键
{
case 0xee:
{
KEY_VALUE=1;
break;
}
case 0xde:
{
KEY_VALUE=2;
break;
}
case 0xbe:
{
KEY_VALUE=3;
break;
}
case 0x7e:
{
KEY_VALUE=4;
break;
}
case 0xed:
{
KEY_VALUE=5;
break;
}
case 0xdd:
{
KEY_VALUE=6;
break;
}
case 0xbd:
{
KEY_VALUE=7;
break;
}
case 0x7d:
{
KEY_VALUE=8;
break;
}
case 0xeb:
{
KEY_VALUE=9;
break;
}
case 0xdb:
{
KEY_VALUE=10;
break;
}
case 0xbb:
{
KEY_VALUE=11;
break;
}
case 0x7b:
{
KEY_VALUE=12;
break;
}
case 0xe7:
{
KEY_VALUE=13;
break;
}
case 0xd7:
{
KEY_VALUE=14;
break;
}
case 0xb7:
{
KEY_VALUE=15;
break;
}
case 0x77:
{
KEY_VALUE=16;
break;
}

}
P2=0X0F; //以下为按键消抖
i=P2;
P2=0XF0;
j=P2;
P2=0XFF;
k=i|j;
while(k!=0xff) //按键松开则结束死循环
{
P2=0X0F;
i=P2;
P2=0XF0;
j=P2;
P2=0X00;
k=i|j;
}

}

}
switch(KEY_VALUE) //定义按键要执行的命令
{
case 1: //灯亮/灯灭
{
LED0=~LED0;break;
}
case 2:
{
LED1=~LED1;break;
}
case 3:
{
LED2=~LED2;break;
}
case 4:

{
LED3=~LED3;break;
}
case 5:
{
LED4=~LED4;break;
}
case 6:
{
LED5=~LED5;break;
}
case 7:
{
LED6=~LED6;break;
}
case 8:
{
LED7=~LED7;break;
}



case 9: //灯亮,蜂鸣器开/灯灭,蜂鸣器关
{
LED0=~LED0;BUZZ=~BUZZ;break;
}
case 10:
{
LED1=~LED1;BUZZ=~BUZZ;break;
}
case 11:
{
LED2=~LED2;BUZZ=~BUZZ;break;
}
case 12:
{
LED3=~LED3;BUZZ=~BUZZ;break;
}
case 13:
{
LED4=~LED4;BUZZ=~BUZZ;break;
}
case 14:
{
LED5=~LED5;BUZZ=~BUZZ;break;
}
case 15:
{
LED6=~LED6;BUZZ=~BUZZ;break;
}
case 16:
{
LED7=~LED7;BUZZ=~BUZZ;break;
}
}
}

void Delay(unsigned int i) //延时
{
while(--i);
}

相关主题
文本预览
相关文档 最新文档