访问电脑版页面

导航:老古开发网手机版51单片机51单片机键盘按键

干货!8051单片机的反转法扫描键盘

导读:
关键字:
单片机,

键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将它们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,它的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下:

KEY: MOV P2,#0FH ;用反转法查键

MOV A,P2

ANL A,#0FH

MOV B,A

MOV P2,#0F0H

MOV A,P2

ANL A,#0F0H

ORL A,B

CJNE A,#0FFH,KEY1

RET ;无键按下

KEY1: MOV B,A ;有键按下,存键码

MOV DPTR,#TABLE

MOV R3,#0FFH ;存顺序码单元初始化

KEY2: INC R3

MOV A,R3

MOVC A,@A+DPTR

CJNE A,B,KEY3 ;判键码,求顺序码

MOV A,R3 ;若找到键码,存顺序码

RET

KEY3: CJNE A,#0FFH,KEY2;判是否查完

RET ;已查完,键码未找到,以无按键处理

TABLE: DB 77H,7BH,0BBH ;按键特征码表

DB 0DBH,7DH,0BDH

DB 0DDH,7EH,0BEH

DB 0DEH,0B7H,0D7H

DB 0EEH,0EDH,0EBH

DB 0E7H,0C7H,0FFH

用C语言的写法

#include

#include

#include

#include

#include

#includeCC.h》

#define uchar unsigned char

#define uint unsigned int

keysCAN()

{

uchar i,h=0xfe;

for(i=4,P1=h;i》0;i--) //扫描

{

if((P1&0xf0)!=0xf0) //有键按下?

{

uchar a;

for(a=255;a》0;a--) //延时

{}

if((P1&0xf0)!=0xf0) //有键按下

{

uchar key,p;

p=P1;

for(key=0;key《16;key++) //查表

{

uchar code keytab[]={0xEE,0xDE,0xBE,0x7E, //键码表

0xED,0xDD,0xBD,0x7D,

0xEB,0xDB,0xBB,0x7B,

0xE7,0xD7,0xB7,0x77};

if(p==keytab[key]) //查到返回返回键号

{

P1=0xff;

return(key);

}

}

}

}

h=_crol_(h,1);

P1=h;

}

P1=0xff;

return(16); //没查到返回16

}

main()

{ while(1)

{P0=keyscan();

while(1)

;

}

}

来源:网络整理   作者:工程师2  2018/5/28 10:43:00
栏目: [ 51单片机键盘按键]

相关阅读

89C2051单片机在键盘显示装置中的应用

51单片机对矩阵键盘实现16个按键操作的电路设计

51单片机矩阵式键盘的编程方法

51单片机按键检测的实现方法及功能解析

51单片机 按键,键盘检测

51单片机键盘扫描程序解析

51单片机4个I/O口实现16个键盘原理的设计

AT89S51单片机对4×4矩阵键盘的控制设计

AT89S51单片机按键识别的过程和方法

51单片机矩阵键盘与8051连接设计

51单片机对4x4矩阵按键的驱动设计

51单片机对矩阵键盘实现16个按键操作的设计

51单片机之矩阵键盘的驱动实现

干货!8051单片机的反转法扫描键盘

C51单片机矩阵键盘扫描去抖程序

51单片机独立按键与矩阵按键的工作原理

三分钟让你掌握51单片机的4×4键盘识别与74LS164驱动数码显示

基于51单片机的4*4矩阵键盘字符输入

51单片机 矩阵按键的扫描、消抖、动作分离

51单片机按键检测的方法解析