您的位置 首页 系统

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

干货!8051单片机的反转法扫描键盘-键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。

键盘扫描选用反转法读键:先从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)

;

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/347785.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部