實驗參考: 笨笨工作室-實驗六、查詢方式按鍵。
實驗板: FB51A。
實驗?zāi)康? <1> 掌握讀取外部按鍵時候應(yīng)該注意的事項,掌握查詢方式響應(yīng)按鍵的方法。
<2> 掌握讀取按鍵去抖動的方法。
<3> 掌握判直接尋址位轉(zhuǎn)移指令jb,jnb的用法。
實驗現(xiàn)象: 最右面的數(shù)碼管初始顯示0,每次按下外部按鍵K1執(zhí)行加一,計數(shù)到9時重新回0。
單片機響應(yīng)外部按鍵的方式有兩種,一種是查詢方式,一種是中斷方式。
查詢方式:單片機不斷的查詢是否有按鍵按下,如果有按鍵按下的話,就執(zhí)行相應(yīng)的程序,否則繼續(xù)查詢。
中斷方式:單片機處理自己的工作,如果有按鍵按下,向單片機發(fā)出中斷請求。單片機停下現(xiàn)在正在處理的工作,轉(zhuǎn)去執(zhí)行中斷程序,執(zhí)行之后回來繼續(xù)剛才的工作。
本實驗是用查詢方式完成, 只用到一個鍵K1,每次按下,使第一位數(shù)碼管加1顯示,計數(shù)到9里重新回0。顯示部分電路及查表顯示方法參考
:【005】數(shù)碼管顯示數(shù)字 和
【006】多位數(shù)碼管動態(tài)顯示。本來想重畫個電路圖,在原來顯示部分的基礎(chǔ)上再把按鍵部分加上,但一來放在Blog上寬度有問題,再者還是不想畫了,所以偷個懶,鍵盤部分單獨拿出來吧。
顯示部分:

按鍵部分:

由原理圖知:當(dāng)按鍵k1按下的時候,對應(yīng)P1.0輸入低電平。因此,我們要查詢k1是否按下,只要檢測到p1.0是低電平即可。 在查詢鍵是否按下時,要注意按鍵的去抖動問題,關(guān)于鍵的消抖,見 【012】按鍵消抖 。
按上述方法編寫程序:
org 0000h
start: mov p0, #48h ; 段碼-顯示0
mov p2, #01h ; 位碼-選通第一位數(shù)碼管
main: mov r7, #0ffh ; 查表時偏移量,用來實現(xiàn)由0到9循環(huán)顯示
key: jb p1.0, key ; 如果P1.0為高電平,則繼續(xù)執(zhí)行此句查詢。
call del10ms ; 否則調(diào)用延時程序?qū)崿F(xiàn)軟件去抖
jb p1.0, key ; 再次查詢P1.0,如果是高電平,表示是抖動,繼續(xù)查詢
dis: ; 確定按鍵按下,開始執(zhí)行顯示程序
inc r7 ; 偏移量自加(第一次值為0)
mov a, r7
mov dptr, #tab ; 取表首址
movc a, @a+dptr ; 用查表指令獲取要顯示的數(shù)字
mov p0, a ; 得到該字段碼送入P0口顯示
cjne a, #48h, key ; 未顯示到最后一個數(shù), 繼續(xù)查詢按鍵狀態(tài)