;有個題目,要求記錄按下的鍵的編號。
;使用器件:
;51微控制器,8個編號為「1~8」的數字鍵,1個功能鍵,1個數碼管,其他晶振電阻電容。
;實現功能:
;按下功能鍵後,10s內,檢測被按下的數字鍵,
;10s後,結束檢測,並用數碼管迴圈顯示被按下過的鍵編號。
;做而論道據此畫出的電路如下:
;電路中的數碼管,不僅用於顯示按下過的鍵編號,還能顯示 9~0 的倒計時。
;在電路中,還安裝了乙個 led,用來表示按鍵的狀態。
;當有鍵按下,10ms 後仍然按下時,led 將發光,表示按鍵確實按下了。
;當按鍵釋放後,再令 led 熄滅。
;另外,在顯示按下的按鍵編號時,也令 led 持續發光。
;當 led 熄滅後,再次按下 func 鍵,可以重新進行下一輪的按鍵記錄。
;組合語言編寫的程式如下:
org 0000h
sjmp start
org 000bh
sjmp t0_int
;---------------------------------------
start:
mov tmod, #01h
mov ie, #82h
mov dptr, #d_tab
wait_f:
jb p3.6, $ ;等待按下功能鍵
call delay10ms
jb p3.6, wait_f
clr p3.2 ;led發光
jnb p3.6, $ ;等待釋放
setb p3.2
;----------------------------------
mov r0, #30h
mov th0, #(65536 - 62500) / 256
mov tl0, #(65536 - 62500) mod 256
mov r7, #16
mov r6, #9
call display
setb tr0
;----------------------------------
wait_n: ;迴圈檢測按鍵
jnb tr0, stop ;到10s退出
call key_n
jz wait_n
mov b, a
call delay10ms ;延時
call key_n
cjne a, b, wait_n ;消抖
mov @r0, a ;儲存按鍵數值
inc r0
clr p3.2 ;led發光
wait_s:
call key_n
jnz wait_s ;等待釋放
setb p3.2
sjmp wait_n ;迴圈檢測按鍵
;----------------------------------
stop:
mov a, r0
clr c
subb a, #30h
mov r2, a
clr p3.2 ;led發光
mov r0, #30h
echo:
mov a, @r0
inc r0
mov r6, a
call display ;回放
mov r3, #100
call delay10ms
djnz r3, $ - 2
djnz r2, echo ;迴圈
setb p3.2
mov r6, #0
call display
sjmp wait_f
;---------------------------------------
t0_int:
mov th0, #(65536 - 62500) / 256
mov tl0, #(65536 - 62500) mod 256
djnz r7, t0_end
mov r7, #16
dec r6
cjne r6, #255, disp
clr tr0
reti
disp:
call display
t0_end:
reti
;---------------------------------------
display:
mov a, r6
movc a, @a + dptr
mov p2, a
retd_tab: ;共陽段碼
db 0c0h, 0f9h, 0a4h, 0b0h, 099h
db 092h, 082h, 0f8h, 080h, 090h
;---------------------------------------
key_n:
clr a
jnb p1.0, k1
jnb p1.1, k2
jnb p1.2, k3
jnb p1.3, k4
jnb p1.4, k5
jnb p1.5, k6
jnb p1.6, k7
jnb p1.7, k8
ret ;沒有按鍵,返回0
k8: inc a
k7: inc a
k6: inc a
k5: inc a
k4: inc a
k3: inc a
k2: inc a
k1: inc a
ret;---------------------------------------
delay10ms:
mov r4, #20
djnz r5, $
djnz r4, $ - 2
ret;---------------------------------------
end;經過**實驗證明,本程式可以穩定工作。
51微控制器按鍵燈實驗
要完成的效果是第一次按鍵燈快閃3次,第二次按鍵燈慢閃3次 定義了flag變數來標誌第一二次按鍵,這裡先給flag賦值1,用flag flag來表示一二次按鍵的變化 結果可行。然而用flag flag卻實現不了,按一次直接慢閃3次,按第二下沒有反應,再按一下又慢閃,求解 include define ...
51微控制器按鍵消抖
二 矩陣鍵盤 define key state 0 0 判斷按鍵是否按下 define key state 1 1 判斷按鍵是否抖動 define key state 2 2 判斷按鍵是否彈起 define key input p3 define key mask 0x0f void key rea...
51微控制器按鍵的掃瞄
include sbit addr0 p1 0 sbit addr1 p1 1 sbit addr2 p1 2 sbit addr3 p1 3 sbit enled p1 4 sbit key1 p2 4 sbit key2 p2 5 sbit key3 p2 6 sbit key4 p2 7 un...