×
单片机 > 单片机程序设计 > 详情

51单片机矩阵键盘响应程序

发布时间:2020-06-01 发布时间:
|

51单片机矩阵键盘响应程序

#include

// P0端口接LED
// P0端口接数码管
// P3端口接矩阵键盘


#define LED P0
#define KEY P3
#define DIG P0
unsigned char GetKey(void);
void delay10ms(void);
// 独立数码管的段码表
unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void main(void)
{
unsigned char key = 0;
while (1)
{
key = GetKey();
if (key != 0)
{
DIG = val[key];
}
}
}
unsigned char GetKey(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f;  // 从IO口输出,写IO口
if (KEY != 0x0f)// 从IO口输入,读IO口
{
// 读出的不是0x0f说明有按键被按下
// 第1回合第2步:读出端口从读出值来判断是哪一行
 delay10ms();
// 第一回合中算出行号
switch (KEY)
{
case 0x0e:hang = 1;break;
case 0x0d:  hang = 2; break;
case 0x0b:  hang = 3; break;
case 0x07:  hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
 switch (KEY)
{
case 0xe0:lie = 1;break;
case 0xd0:  lie = 2; break;
case 0xb0:  lie = 3; break;
case 0x70:  lie = 4; break;
default: break;
}
// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=248;a>0;a--);
}


关键字:51单片机  矩阵键盘  响应程序 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
LPC4350的功能特性和应用分析