矩阵键盘多键按下的单片机(51)程序及电路

发布网友 发布时间:2022-04-22 04:59

我来回答

4个回答

热心网友 时间:2023-08-08 00:25

加二极管可以的 要加在选通线上(如低电平选通)4选通1 这时可以读 4 个键的状态,循环一次
16 键的状态 都有了 最后看有 几个键按下 就可以了。加二极管 是为了4 选通线互相不干扰。

对了 不加二极管 应该 也可以的,我加二极管 是选通线 还要去驱动数码管 的选通。追问加二极管的我有试过,但当有多个键按下时还有读数不对的情况出现,也许是我编程不对,高手能写个示例给我吗

追答不好意思 我的程序 是用汇编做的,贴一段汇编做的
; / *** *** *** *** *** / 扫描显示子程序
; / *** *** *** *** *** / 14 位 P2

PXS000: CJNE R6, #00H, PXS002 ; T0 2.5MS
MOV R6, #07H ; 工作寄存器 2 区
MOV R5, #0FEH
MOV R0, #XSWC6
MOV R1, #XSWCD
JMP PXS010 ; 键盘扫描
PXS002: CJNE R6, #01H, PXS003
ORL P2,#7FH
MOV A, @R0
ACALL CHK000
MOV A, @R1
ACALL CHK000
JMP PXS005
PXS003: MOV DPTR, #PXSM01
ORL P2,#7FH
MOV A, @R0
MOVC A, @A+DPTR
ACALL CHK000
MOV DPTR, #PXSM02
MOV A, @R1
MOVC A, @A+DPTR
ACALL CHK000
PXS005: MOV A, R5
ANL P2, A
PXS006: RL A
MOV R5, A
DEC R0
DEC R1
DEC R6
RET
PXS010: ORL P2,#7FH ; 键盘扫描测试开始
CLR A
ACALL CHK000
ACALL CHK000
MOV A, R5
PXS014: ORL P2,#7FH
ANL P2, A
NOP
NOP
ANL JPWC0, A ; 键盘扫描测试
JB CHKDAT, PXS016 ; 测有压键否
CPL A
ORL JPWC0, A
CPL A
PXS016: RL A
DJNZ R6, PXS014
MOV R6, #07H ; 工作寄存器 1 区
PXS018: RET

PXSM01: DB 0FAH,082H,0B9H,09BH,0C3H, 5BH, 7BH,092H ;显示字符表1 YZKZ05A
; ---贴不下
; / *** *** *** *** *** / 模拟串行口

CHKDAT BIT P0.6
CHKCLK BIT P0.7

CHK000: MOV R2, #08H
CHK002: RRC A
MOV CHKDAT, C
NOP
NOP
CLR CHKCLK
NOP
NOP
SETB CHKCLK
DJNZ R2, CHK002
SETB CHKDAT
RET

热心网友 时间:2023-08-08 00:25

16个键同时按下也得一个个处理,单片机处理速度也算比较快,查询或者中断都可以

热心网友 时间:2023-08-08 00:26

设计这个,有个思想。在每个按键上接入一个不同电阻,然后用AD芯片读取按键值,可以减少I/O口。你要是想多个按键一起检测。有个数学问题,是关于数学建模。请你加下QQ聊。709508171.我在这个问题上请教了数学院的教授。

热心网友 时间:2023-08-08 00:26

如果按键少的话可以一个按键接一个IO口,按下哪几个键直接查询就行了,如果建比较多,可以用数据选择器加锁存器的组合扩展IO口,方法相相同,给你个电路图

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com