?? presskey.txt
字號:
《多個按鍵的連按處理技巧》
在設(shè)計中,常常用UP鍵和DOEN來調(diào)節(jié)參數(shù)。這種鍵在處理時,要考慮連按的問題。而且希望鍵連續(xù)按下的時間越長,動作的響應(yīng)速度越快(即加速度處理)
在連按的處理過程中,要考慮3個時間常數(shù):
1、連按響應(yīng)時間常數(shù)(首次值),該值用于區(qū)分連按/單按。
a)當(dāng)按鍵閉和的時間<該參數(shù)時,判為單按;
b)當(dāng)按鍵閉和的時間>該參數(shù)時,判為連按;
2、連按緩沖時間常數(shù)(最大值)。
在連按操作剛開始時,按鍵響應(yīng)速度較慢,這個參數(shù)就是用于決定每次動作之間的最大時間。
3、連按緩沖時間常數(shù)(最小值)
在連按的過程中,響應(yīng)的速度越來越快,但也不能無限快。這個參數(shù)就是用于決定每次動作之間的最小時間。
還有一個要考慮的問題是,可能并不是所有按鍵都具有連按功能。這時,可用一個標(biāo)志位來區(qū)分。在讀鍵子程序中返回鍵值的同時,也返回這個標(biāo)志,告訴鍵盤監(jiān)控程序是否要做連按處理。
下面的一段例程中,可以識別單按/連按,并可處理加速度問題。只要在主程序中調(diào)用即可。程序中的延時用現(xiàn)實程序來代替。
;********************************
;按鍵處理模塊
;********************************
;時間常數(shù)定義
KEY_T == 250 ;連按響應(yīng)時間常數(shù)(首次值)
KEY_TMAX == 120 ;連按緩沖時間常數(shù)(最大值)
KEY_TMIN == 30 ;連按緩沖時間常數(shù)(最小值)
;********************************
KEYWK:
MOV A,@KEY_T
MOV KEY_JS,A ;連按計數(shù)器置初值
BC TT1,KEY ;清連按標(biāo)志
MOV A,@KEY_TMAX-KEY_TMIN
MOV KEY_JSJS,A ;連按加速計數(shù)器置初值
CALL READKEY ;讀鍵
JBS R3,C ;有鍵按下跳
RET
FCALL MOVLCD ;顯示延時
CALL READKEY ;讀鍵
JBS R3,C ;確實有鍵按下跳
RET
;====確實有鍵按下
MOV KEY_BUF,A ;保存鍵值
KEY1:
FCALL MOVLCD ;顯示延時
CALL READKEY ;讀鍵
JBS R3,C ;鍵未釋放跳
JMP KEY5
;====連按判斷
JBS TT1,KEY_EN ;連按功能有效跳
JMP KEY1 ;禁止連按跳
JBC TT1,KEY ;不是連按跳
JMP KEY2
DJZ KEY_JS ;連按計數(shù)器-1=0跳
JMP KEY1
BS TT1,KEY ;置連按標(biāo)志
JMP KEY1
;====連按處理
KEY2:
CALL DOKEY ;執(zhí)行按鍵功能
MOV WK_MODE,A ;刷新模式
;連按加速計數(shù)器-1
DJZ KEY_JSJS
JMP $+2
INC KEY_JSJS
;連按計數(shù)器置延時值
MOV A,@KEY_TMIN
ADD A,KEY_JSJS
MOV KEY_JS,A ;連按計數(shù)器置延時值
KEY4:
FCALL MOVLCD ;顯示延時
DJZ KEY_JS ;連按計數(shù)器-1=0跳
JMP KEY4
JMP KEY1
;====單按處理
KEY5:
FCALL MOVLCD ;顯示延時
CALL READKEY ;讀鍵
JBC R3,C ;鍵確實已釋放跳
JMP KEY1
JBC TT1,KEY ;不是連按跳
RET
;按鍵發(fā)聲
BS TT1,KEY_SP ;開蜂鳴器
FCALL MOVLCD
CALL DOKEY ;執(zhí)行按鍵功能
MOV WK_MODE,A ;刷新模式
BC TT1,KEY_SP ;關(guān)蜂鳴器
FCALL MOVLCD
RET
;********************************
;讀鍵子程序
;出口: A=鍵號值(0=無,1=K2定時,2=K3功率選擇,3=K4水溫上調(diào),4=K5水溫下調(diào),
; 5=K6時鐘上調(diào),6=K7時鐘下調(diào),7=K8時段設(shè)置)
; C: (0=無,1=有)
; TT1,KEY_EN: 當(dāng)前鍵連按有效標(biāo)志(0=禁止連按,1=可連按)
; (K4/K5/K6/K7有連按功能)
;********************************
READKEY:
BS R3,C
;不可連按的按鍵
BC TT1,KEY_EN
JBS R7,6 ;K2未閉合跳
RETL @01 ;返回A=01
JBS R7,0 ;K3未閉合跳
RETL @02 ;返回A=02
JBS R7,5 ;K8未閉合跳
RETL @07 ;返回A=07
;可連按的按鍵
BS TT1,KEY_EN
JBS R7,1 ;K4未閉合跳
RETL @03 ;返回A=03
JBS R7,2 ;K5未閉合跳
RETL @04 ;返回A=04
JBS R7,3 ;K6未閉合跳
RETL @05 ;返回A=05
JBS R7,4 ;K7未閉合跳
RETL @06 ;返回A=06
BC R3,C
RETL @00 ;返回A=00
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -