4X4矩阵键盘扫描程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
unsigned char codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char temp;
unsigned char key;
unsigned chari,j;
void main(void)
{
while(1)
{
P3=0xff;P3_4=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
switch(temp)
{
case 0x0e: key=3;break;
case 0x0d: key=2;break;
case 0x0b: key=1;break;
case 0x07: key=0;break;
}
temp=P3;temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
}
P0=table[key];
}
}
///////////////////////////////////////////////////
P3=0xff;P3_5=0;
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
switch(temp)
{
case 0x0e:key=7;break;
case 0x0d:key=6;break;
case 0x0b:key=5;break;
case 0x07:key=4;break;
}
temp=P3;temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
}
P0=table[key];
}
}
/////////////////////////////////////////////////////////
P3=0xff;P3_6=0;
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
switch(temp)
{
case 0x0e: key=11;break;
case 0x0d: key=10;break;
case 0x0b: key=9;break;
case 0x07: key=8;break;
}
temp=P3;temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
}
P0=table[key];
}
}
P3=0xff;P3_7=0;
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;temp=temp&0x0f;
switch(temp)
{
case 0x0e: key=15;break;
case 0x0d: key=14;break;
case 0x0b: key=13;break;
case 0x07: key=12;break;
}
temp=P3;temp=temp&0x0f;
while(temp
!=0x0f)
{
temp=P3;temp=temp&0x0f;
}
P0=table[key];
}
}
}
}
/*****************说明(仅作参考)********************************/
首先,给P1赋值0xf0,
这时P1^4,P1^5,P1^6,P1^7为高电平,
P1^0,P1^1,P1^2,P1^3为低电平。
如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。
因此P1的值就不等于0xf0,这是就可以判断有按键按下。
然后延时一段时间去抖动,
然后给P1赋值0xfe,也就是P1^0为低电平,其他为高电平,
这时如果有在P1^0线上的P1^4,P1^5,P1^6,P1^7有按键按下,
那么就会出现低电平,从而判断哪个按键按下;
如果没有那么就给P1赋值0xfd,也就是P1^1为低电平,其他为高电平.,
相同方法判断是否有按键按下;
如果没有那么就给P1赋值0xfb·····
如此类推,一共四次检测。
/*************************************************/