标题: 该单片机汇编程序如何改成线反转法扫描键盘 [打印本页]

作者: BSq    时间: 2020-4-5 19:58
标题: 该单片机汇编程序如何改成线反转法扫描键盘
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





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1