标题:
51单片机矩阵键盘程序
[打印本页]
作者:
51黑bing
时间:
2016-3-23 00:23
标题:
51单片机矩阵键盘程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define KEY P1 //用P1口控制4*4个矩阵键盘
//------------------------------------------------
uchar code duanma[17]={ //码表的定义
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
//------------------------------------------------
void delay(uchar x) //延时函数的定义
{
uchar y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
//------------------------------------------------
uchar kayscan() //按键检测函数的定义
{
uchar keyvalue=0; //键值的定义,并且用于返回
uchar temp;
uchar and;
temp=0x0f;
KEY=0x0f;
if(KEY != 0x0f) //检测按键是否被按下
{
delay(10); //延时10毫秒,以便消抖
if(KEY != 0x0f) //再次检测按键是否被按下
{
and = KEY & temp; //行检测
switch(and)
{
case(0x0e) : keyvalue=0 ; break; //第一行的按键被按下了
case(0x0d) : keyvalue=4 ; break; //第二行的按键被按下了
case(0x0b) : keyvalue=8 ; break; //第三行的按键被按下了
case(0x07) : keyvalue=12; break; //第四行的按键被按下了
}
temp=0xf0; //列检测
KEY=0xf0;
and = KEY & temp;
switch(and)
{
case(0xe0) : keyvalue=keyvalue+0; break; //第一列的按键被按下了
case(0xd0) : keyvalue=keyvalue+1; break; //第二列的按键被按下了
case(0xb0) : keyvalue=keyvalue+2; break; //第三列的按键被按下了
case(0x70) : keyvalue=keyvalue+3; break; //第四列的按键被按下了
}
}
}
return(keyvalue);
}
//------------------------------------------------
void main() //主函数
{
P0=0; //初始化,让所有led都灭
while(1)
{
P0=duanma[kayscan()]; //矩阵键盘的扫描,并且返回键值,赋值给P0
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1