📄 k1-k4-test.asm
字号:
;********************************************************************
;* *
;* ME500单片机开发系统演示程序 - 按键扫描程序 *
;* *
;* 作者: 伟纳电子 - Freeman *
;* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
;* 邮箱: freeman@willar.com *
;* 日期: 2004-1-5 *
;* *
;* 改编: gguoqing *
;* 版本: V1.1 (2006/11/20) *
;* 作者: gguoqing (Email: gguoqing@willar.com) *
;* *
;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
;* *
;********************************************************************
;* *
;* 描述: *
;* 按键扫描程序 *
;* 上电时, 点亮P00口和P20口的LED *
;* 按下K1时, P0口LED向右移一位 *
;* 按下K2时, P0口LED向左移一位 *
;* 按下K1时, P2口LED向右移一位 *
;* 按下K2时, P2口LED向左移一位 *
;* *
;********************************************************************
KEY_S EQU 40H
KEY_V EQU 41H
K1 BIT P1.4 ;
K2 BIT P1.5 ;
K3 BIT P1.6
K4 BIT P1.7
ORG 0000H
JMP MAIN
ORG 0030H
;**********************************************************
; 主程序
;**********************************************************
MAIN:
MOV SP,#60H ; 设置栈指针
MOV P0,#0FEH ; 初始点亮LED P00
MOV P2,#0FEH ; 初始点亮LED P20
MOV KEY_V,#0FH ; 初始键值
KEY_CHKSW: ; 循环检测按键是否按下
ACALL SCAN_KEY ; 输入按键状态
MOV KEY_S,A
XRL A,KEY_V ; 检查按键值是否改变
JZ KEY_CHKSW ; 若无键被按,则跳回KEY_CHKSW
MOV R7,#10 ; 延时10ms
ACALL DELAYMS ; 延时去抖
ACALL SCAN_KEY ; 再次检查按键值
MOV KEY_S,A
XRL A,KEY_V
JZ KEY_CHKSW
MOV KEY_V,KEY_S ; 保存按键状态
ACALL PROC_KEY ;
SJMP KEY_CHKSW
;*********************************************************
; 扫描按键子程序
; 传入参数: 无
; 返回值: A --- 按键状态
;*********************************************************
SCAN_KEY:
CLR A
MOV C,K1
MOV ACC.0,C
MOV C,K2
MOV ACC.1,C
MOV C,K3
MOV ACC.2,C
MOV C,K4
MOV ACC.3,C
RET
;*********************************************************
; 按键处理子程序
; 传入参数: KEY_V --- 按键值
; 返回值: 无
;*********************************************************
PROC_KEY:
MOV A,KEY_V
JNB ACC.0,PROC_K1
JNB ACC.1,PROC_K2
JNB ACC.2,PROC_K3
JNB ACC.3,PROC_K4
RET
PROC_K1: ; 按键K1处理程序
MOV A,P0 ; 右移
RR A
MOV P0,A
RET
PROC_K2: ; 按键K2处理程序
MOV A,P0 ; 左移
RL A
MOV P0,A
RET
PROC_K3: ; 按键K3处理程序
MOV A,P2 ; 右移
RR A
MOV P2,A
RET
PROC_K4: ; 按键K4处理程序
MOV A,P2 ; 左移
RL A
MOV P2,A
RET
;*********************************************************
; 延时子程序
; 传入参数:R7 --- 延时值(MS)
; 返回值: 无
;*********************************************************
DELAYMS:
MOV A,R7
JZ END_DLYMS
DLY_LP1:
MOV R6,#185
DLY_LP2:
NOP
NOP
NOP
DJNZ R6,DLY_LP2
DJNZ R7,DLY_LP1
END_DLYMS:
RET
;*********************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -