快捷搜索:  汽车  科技

51单片机的扫描方式(51单片机教程4x4矩阵键盘扫描)

51单片机的扫描方式(51单片机教程4x4矩阵键盘扫描){if(temp1!=0xf0)int temp1 temp2 hang lie;P1=0XF0;temp1=P1&0xf0;

首先,给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·····如此类推,一共四次检测。

51单片机的扫描方式(51单片机教程4x4矩阵键盘扫描)(1)

unsigned int scan()

{

int temp1 temp2 hang lie;

P1=0XF0;

temp1=P1&0xf0;

if(temp1!=0xf0)

{

delay_ms(10);

if(temp1!=0xf0)

{

temp1=P1&0xf0;

TEST=1;

switch(temp1)

{

case 0xe0:

lie=1;

break;

case 0xd0:

lie=2;

break;

case 0xb0:

lie=3;

break;

case 0x70:

lie=4;

break;

}

P1=0X0f;

temp2=P1&0x0f;

if(temp2!=0x0f)

{

delay_ms(10);

if(temp2!=0x0f)

{

temp2=P1&0x0F;

switch(temp2)

{

case 0x0e:

hang=1;

break;

case 0x0d:

hang=2;

break;

case 0x0b:

hang=3;

break;

case 0x07:

hang=4;

break;

}

}

}

}

}

if(hang==1&&lie==1)num=1;

if(hang==1&&lie==2)num=2;

if(hang==1&&lie==3)num=3;

if(hang==2&&lie==1)num=4;

if(hang==2&&lie==2)num=5;

if(hang==2&&lie==3)num=6;

if(hang==3&&lie==1)num=7;

if(hang==3&&lie==2)num=8;

if(hang==3&&lie==3)num=9;

if(hang==4&&lie==2)num=0;

if(hang==4&&lie==1)num='A';

return num;

}

猜您喜欢: