start:
MOV R0, #0 ; 清零R0-第一個鍵是key0
; 掃描 row0
SETB P0.3 ; 置1 row3
CLR P0.0 ; 清0 row0
CALL colScan ; 調用 column掃描子程序
JB F0, finish ; | 如果置1了F0,則跳到程序末尾
; | (因為找到了按下的鍵,其編號存儲在R0)
; 掃描 row1
SETB P0.0 ; 置1 row0
CLR P0.1 ; 清0 row1
CALL colScan ; 調用 column掃描子程序
JB F0, finish ; | 如果置1了F0,則跳到程序末尾
; | (因為找到了按下的鍵,其編號存儲在R0)
; 掃描 row2
SETB P0.1 ; 置1 row1
CLR P0.2 ; 清0 row2
CALL colScan ; 調用 column掃描子程序
JB F0, finish ; | 如果置1了F0,則跳到程序末尾
; | (因為找到了按下的鍵,其編號存儲在R0)
; 掃描 row3
SETB P0.2 ; 置1 row2
CLR P0.3 ; 清0 row3
CALL colScan ; 調用 column掃描子程序
JB F0, finish ; | 如果置1了F0,則跳到程序末尾
; | (因為找到了按下的鍵,其編號存儲在R0)
JMP start ; | 返回掃描row0
; | (這就是為什么在程序開始時置1row3,當程序跳回開始時,row3剛剛被掃描)
finish:
JMP $ ; 找到按鍵時程序執行到此處-不執行任何操作
; column掃描子程序
colScan:
JNB P0.4, gotKey ; 如果col0被清0-找到按鍵
INC R0 ; 否則移到下一個按鍵
JNB P0.5, gotKey ; 如果col1被清0-找到按鍵
INC R0 ; 否則移到下一個按鍵
JNB P0.6, gotKey ; 如果col2被清0-找到按鍵
INC R0 ; 否則移到下一個按鍵
RET ; 子程序返回-未找到按鍵
gotKey:
SETB F0 ; 找到按鍵-置1F0
RET ; 子程序返回
END
|