1 引言 键盘电路是单片机应用系统最常用的人机接口,往往要占用较多的I/O端口, 现在有些很节约I/O资源的键盘电路, 但它在键盘上使用的二极管较多,或有些使用的编码芯片。利用本文介绍的电路,可以最大限度地减少键盘电路对I/O端口的点用 和器件。本电路特别适合一些直接搭焊、或需要导线延长键盘(如密码锁) 其节省宝贵的延长线数量。 2 硬件原理 这里以4根I/O线为例,普通接法只能接4个键,本文介绍的电路是在组合接法的基础上增加了4个二极管。其软件处理使用了端口扫描检测方法,从而使按键数可达到12个,同时由于采用了组合逻辑来直接对端口进行读取,因此极大地简经了程序的处理过程。下图是该电路的电路原理图。 也可以根据此原理图类是做3线、5线等的键盘。 3 软件过程和程序 检测过程:先将口1执低电平,然后读取口2、3、4,如有低电平则端口对应的按键被按下;如都是高电平,则将口2执低,然后读取口1、3、4,以此类推。 程序如下: ;端口定义 K1 BIT P1.0 K2 BIT P1.1 K3 BIT P1.2 K4 BIT P1.3 ;****************************************** ; 键盘扫描 ;****************************************** KEY: SETB K2 ;一行 SETB K3 SETB K4 CLR K1 JB K2,KEY1 LCALL T1MS JB K2,KEY1 MOV KEYZ,#01H KT1: JNB K2,KT1 LJMP KEYOUT KEY1: JB K3,KEY2 LCALL T1MS JB K3,KEY2 MOV KEYZ,#02H KT2: JNB K3,KT2 LJMP KEYOUT KEY2: JB K4,KEY3 LCALL T1MS JB K4,KEY3 MOV KEYZ,#03H KT3: JNB K4,KT3 LJMP KEYOUT KEY3: SETB K1 ;二行 CLR K2 JB K1,KEY4 LCALL T1MS JB K1,KEY4 MOV KEYZ,#04H KT4: JNB K1,KT4 LJMP KEYOUT KEY4: JB K3,KEY5 LCALL T1MS JB K3,KEY5 MOV KEYZ,#05H KT5: JNB K3,KT5 LJMP KEYOUT KEY5: JB K4,KEY6 LCALL T1MS JB K4,KEY6 MOV KEYZ,#06H KT6: JNB K4,KT6 LJMP KEYOUT KEY6: SETB K2 ;三行 CLR K3 JB K1,KEY7 LCALL T1MS JB K1,KEY7 MOV KEYZ,#07H KT7: JNB K1,KT7 LJMP KEYOUT KEY7: JB K2,KEY8 LCALL T1MS JB K2,KEY8 MOV KEYZ,#08H KT8: JNB K2,KT8 LJMP KEYOUT KEY8: JB K4,KEY9 LCALL T1MS JB K4,KEY9 MOV KEYZ,#09H KT9: JNB K4,KT9 LJMP KEYOUT KEY9: SETB K3 ;四行 CLR K4 JB K1,KEY10 LCALL T1MS JB K1,KEY10 MOV KEYZ,#0AH KT10: JNB K1,KT10 LJMP KEYOUT KEY10: JB K2,KEY11 LCALL T1MS JB K2,KEY11 MOV KEYZ,#0BH KT11: JNB K2,KT11 LJMP KEYOUT KEY11: JB K3,KEY LCALL T1MS JB K3,KEY MOV KEYZ,#0CH KT12: JNB K3,KT12 KEYOUT: RET
;******************************************** ; 延时 ;******************************************** T1MS: MOV R4,#0FEH ;1ms延时 T1MS0: NOP NOP DJNZ R4,T1MS0 RET |