
定义一个按键缓冲区
用普通的按键扫描程序,当扫描到有按键按下的时候。按键键的值写入缓冲区。继续扫描直到完成。
然后返回缓冲区地址就可以得到多个按键的数据了。
这样只要定义16字节的缓冲区全部按键都能检测到。(一般不需要那么多6个足够)
还有一种方式 是 如果只返回2个按键的话。
可以这样
常规按键扫描 返回范围在0-15也就是0-F
读取到一个值后把这个值左移4位
再继续读取。当读取到第二个值的时候与上第一个值。就能获取2个按键的值了。
四个按键,定义如下:
KEY1 BIT P30
KEY2 BIT P31
KEY3 BIT P32
KEY4 BIT P33
按键处理程序:
;-----------------------------------
READ_KEY:
JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $
PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC
JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $
PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC
JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $
PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC
JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $
PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC
K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------
这个一般是经验值,可这样判断:连续两次击键间隔时间超过500ms,则视为单击,否则视为双击按键。去抖动时间一般使用30ms。如果按键质量不太好,时间可以加倍。可以选择几组参数
然后实践一下看看手感。
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。
程序中使用了P10到P13作为控制灯的引脚,P32作为按键的引脚。每当按下按键时,通过判断状态值来切换不同的灯亮灭模式。定时器中断函数用来实现灯的闪烁,可根据需求自行调整闪烁频率。
编程不易,忘采纳
这个容易,判断按键按下了,这个会吧。
先定义一个变量,每当这个按键接下一次,变量加1,当变量超过最大值后,回最小值,最大值是5,超过5,就回1。
接下来就是判断,变量值分别为1,2,3,。。。时,都要执行什么程序了。这个应该会做吧,用if 语句,或用case语句。
如果不执行什么,只是显示,就更简单了,不需要判断了,直接把变量显示出来就行了。
以上就是关于51单片机矩阵键盘如何实现两个键同时按下的时候显示其他数字,用c语言程序实现,全部的内容,包括:51单片机矩阵键盘如何实现两个键同时按下的时候显示其他数字,用c语言程序实现,、51单片机汇编语言编程独立按键、如何用单片机判断按键单击双击等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)