矩阵键盘是一种把所有按键排列成行列矩阵的键盘。一介M*N的行列式非编码键盘只需要M条行线和N条列线,共占用M+N条单片机的I/O的端口线。
以下是电路图
C语言
#define <reg51.h>
#define uchar unsigned char
uchar keyvalue ;存储键值
uchar row ;存储行值
uchar scancode ;扫描值
uchar tempcode ;存储列值
void delay20ms( ) ;延时20ms
{
uchar i,j,
for(i=0;i<100;i++)
for (j=0;j<1200;j++);
}
void keyscan() //按键扫描函数
{
P0=0X00; //全“0”列扫描
If ((P1&0x0f)!=0x0f ) //判断有无按键
{
delay20ms() //有键按下,延时去抖动
If ((P1&0x0f)!=0x0f ) //判断键值
{
scancode=0xfe; //从第0列开始扫描
whilewhile((scancode&0x80)!=0) //开始循环列扫描8次
{
P0=scancode;
if ((P1&0x0f)!=0x0f )
{
P1=P1&0x0f
switch(P1)
{
case 14: row=0; break; //* 按键在第0行*
case 13: row=1; break; //* 按键在第1行*
case 11: row=2; break; //* 按键在第2行*
case 7: row=3; break; //* 按键在第3行*
default break;
}
tempcode=!scancode; //获得列键值
keyvalue=row+tempcode ; //获得按键代码值
}
else scancode= (scancode<<1)
}
}
}
keyvalue=0xff; //没有按键,返回键值0xff
} |