2、4*4矩阵按键扫描
假设P3端口低四位是列线,高四位是行线;P0为数码管段码入口;
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar code table[][]={};
void delay();
uchar kbscan()
{
uchar hang,lie,key;
if(P3!=0x0f)
{
delays();
}
if(P3!=0x0f)
{
switch(P3^0x0f)
{
case 1:lie=0;break;
case 2:lie=1;break;
case 4:lie=2;break;
case 8:lie=3;break;
}
P3=0xf0;
switch(P3>>4^0x0f)
{
case 1:hang=0;break;
case 2:hang=1;break;
case 4:hang=2;break;
case 8:hang=3;break;
}
P3=0x0f;
while(P3!=0x0f);
key=table[hang][lie];
}
else key=0;
return(key);
}
void main()
{
uchar temp;
P3=0x0f;
P0=0xff;
while(1)
{
temp=kbscan();
if(temp!=0)
{
P0=temp;
.......
}
}
}
以上是我在学习51单片机过程中的一些子程序的总结,有些延时子程序没有写出,重点是按照自己的思路去理解按键是如何识别的,如有错误,请批评指正