📄 k1-k4-test.lst
字号:
A51 MACRO ASSEMBLER K1_K4_TEST 12/21/2006 15:16:33 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN K1-K4-TEST.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE K1-K4-TEST.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************
2 ;* *
3 ;* ME500单片机开发系统演示程序 - 按键扫描程序 *
4 ;* *
5 ;* 作者: 伟纳电子 - Freeman *
6 ;* 邮箱: freeman@willar.com *
7 ;* 作者: gguoqing (Email: gguoqing@willar.com) *
8 ;* 日期: 2004-1-5 *
9 ;* *
10 ;* 改编: gguoqing *
11 ;* 版本: V1.0 (2006/11/20) *
12 ;* 作者: gguoqing (Email: gguoqing@willar.com) *
13 ;* 时间: 2006/10/15 *
14 ;* *
15 ;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
16 ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
17 ;* *
18 ;********************************************************************
19 ;* *
20 ;* 描述: *
21 ;* 按键扫描程序 *
22 ;* 上电时, 点亮P00口和P20口的LED *
23 ;* 按下K1时, P0口LED向右移一位 *
24 ;* 按下K2时, P0口LED向左移一位 *
25 ;* 按下K1时, P2口LED向右移一位 *
26 ;* 按下K2时, P2口LED向左移一位 *
27 ;* *
28 ;********************************************************************
29
0040 30 KEY_S EQU 40H
0041 31 KEY_V EQU 41H
32
0094 33 K1 BIT P1.4 ;
0095 34 K2 BIT P1.5 ;
0096 35 K3 BIT P1.6
0097 36 K4 BIT P1.7
37
0000 38 ORG 0000H
0000 802E 39 JMP MAIN
0030 40 ORG 0030H
41
42 ;**********************************************************
43
44 ; 主程序
45
46 ;**********************************************************
47
0030 48 MAIN:
0030 758160 49 MOV SP,#60H ; 设置栈指针
0033 7580FE 50 MOV P0,#0FEH ; 初始点亮LED P00
0036 75A0FE 51 MOV P2,#0FEH ; 初始点亮LED P20
0039 75410F 52 MOV KEY_V,#0FH ; 初始键值
53
003C 54 KEY_CHKSW: ; 循环检测按键是否按下
003C 1157 55 ACALL SCAN_KEY ; 输入按键状态
003E F540 56 MOV KEY_S,A
0040 6541 57 XRL A,KEY_V ; 检查按键值是否改变
0042 60F8 58 JZ KEY_CHKSW ; 若无键被按,则跳回KEY_CHKSW
A51 MACRO ASSEMBLER K1_K4_TEST 12/21/2006 15:16:33 PAGE 2
59
0044 7F0A 60 MOV R7,#10 ; 延时10ms
0046 1190 61 ACALL DELAYMS ; 延时去抖
0048 1157 62 ACALL SCAN_KEY ; 再次检查按键值
004A F540 63 MOV KEY_S,A
004C 6541 64 XRL A,KEY_V
004E 60EC 65 JZ KEY_CHKSW
66
0050 854041 67 MOV KEY_V,KEY_S ; 保存按键状态
0053 1169 68 ACALL PROC_KEY ;
0055 80E5 69 SJMP KEY_CHKSW
70
71 ;*********************************************************
72
73 ; 扫描按键子程序
74
75 ; 传入参数: 无
76 ; 返回值: A --- 按键状态
77
78 ;*********************************************************
0057 79 SCAN_KEY:
0057 E4 80 CLR A
0058 A294 81 MOV C,K1
005A 92E0 82 MOV ACC.0,C
005C A295 83 MOV C,K2
005E 92E1 84 MOV ACC.1,C
0060 A296 85 MOV C,K3
0062 92E2 86 MOV ACC.2,C
0064 A297 87 MOV C,K4
0066 92E3 88 MOV ACC.3,C
0068 22 89 RET
90
91 ;*********************************************************
92
93 ; 按键处理子程序
94
95 ; 传入参数: KEY_V --- 按键值
96 ; 返回值: 无
97
98 ;*********************************************************
0069 99 PROC_KEY:
0069 E541 100 MOV A,KEY_V
006B 30E00A 101 JNB ACC.0,PROC_K1
006E 30E10D 102 JNB ACC.1,PROC_K2
0071 30E210 103 JNB ACC.2,PROC_K3
0074 30E313 104 JNB ACC.3,PROC_K4
0077 22 105 RET
106
0078 107 PROC_K1: ; 按键K1处理程序
0078 E580 108 MOV A,P0 ; 右移
007A 03 109 RR A
007B F580 110 MOV P0,A
007D 22 111 RET
112
007E 113 PROC_K2: ; 按键K2处理程序
007E E580 114 MOV A,P0 ; 左移
0080 23 115 RL A
0081 F580 116 MOV P0,A
0083 22 117 RET
0084 118 PROC_K3: ; 按键K3处理程序
0084 E5A0 119 MOV A,P2 ; 右移
0086 03 120 RR A
0087 F5A0 121 MOV P2,A
0089 22 122 RET
123
008A 124 PROC_K4: ; 按键K4处理程序
A51 MACRO ASSEMBLER K1_K4_TEST 12/21/2006 15:16:33 PAGE 3
008A E5A0 125 MOV A,P2 ; 左移
008C 23 126 RL A
008D F5A0 127 MOV P2,A
008F 22 128 RET
129
130 ;*********************************************************
131
132 ; 延时子程序
133
134 ; 传入参数:R7 --- 延时值(MS)
135 ; 返回值: 无
136 ;*********************************************************
0090 137 DELAYMS:
138
139
0090 EF 140 MOV A,R7
0091 6009 141 JZ END_DLYMS
0093 142 DLY_LP1:
0093 7EB9 143 MOV R6,#185
0095 144 DLY_LP2:
0095 00 145 NOP
0096 00 146 NOP
0097 00 147 NOP
0098 DEFB 148 DJNZ R6,DLY_LP2
009A DFF7 149 DJNZ R7,DLY_LP1
009C 150 END_DLYMS:
009C 22 151 RET
152
153 ;*********************************************************
154 END
A51 MACRO ASSEMBLER K1_K4_TEST 12/21/2006 15:16:33 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
DELAYMS. . . . . . C ADDR 0090H A
DLY_LP1. . . . . . C ADDR 0093H A
DLY_LP2. . . . . . C ADDR 0095H A
END_DLYMS. . . . . C ADDR 009CH A
K1 . . . . . . . . B ADDR 0090H.4 A
K2 . . . . . . . . B ADDR 0090H.5 A
K3 . . . . . . . . B ADDR 0090H.6 A
K4 . . . . . . . . B ADDR 0090H.7 A
KEY_CHKSW. . . . . C ADDR 003CH A
KEY_S. . . . . . . N NUMB 0040H A
KEY_V. . . . . . . N NUMB 0041H A
MAIN . . . . . . . C ADDR 0030H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
PROC_K1. . . . . . C ADDR 0078H A
PROC_K2. . . . . . C ADDR 007EH A
PROC_K3. . . . . . C ADDR 0084H A
PROC_K4. . . . . . C ADDR 008AH A
PROC_KEY . . . . . C ADDR 0069H A
SCAN_KEY . . . . . C ADDR 0057H A
SP . . . . . . . . D ADDR 0081H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -