📄 密码锁.lst
字号:
A51 MACRO ASSEMBLER 胈码薩 12/31/2008 17:06:11 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 密码锁.OBJ
ASSEMBLER INVOKED BY: D:\keil\C51\BIN\A51.EXE 密码锁.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*************************************************************
2 ;程序名:密码锁
3 ;
4 ;作 者:云生科技
5 ;日 期:2008-11-7
6 ;备 注:转载请注明。
7 ;*************************************************************
0030 8 LED_BIT_1 EQU 30H ;8个字节存放8位数码管的段码
0031 9 LED_BIT_2 EQU 31H
0032 10 LED_BIT_3 EQU 32H
0033 11 LED_BIT_4 EQU 33H
0034 12 LED_BIT_5 EQU 34H
0035 13 LED_BIT_6 EQU 35H
0036 14 LED_BIT_7 EQU 36H
0037 15 LED_BIT_8 EQU 37H
16
0038 17 WORD_1 EQU 38H ;6个字节存放初始密码
0039 18 WORD_2 EQU 39H
003A 19 WORD_3 EQU 3AH
003B 20 WORD_4 EQU 3BH
003C 21 WORD_5 EQU 3CH
003D 22 WORD_6 EQU 3DH
23
003E 24 KEY_1 EQU 3EH ;6个字节存放用户输入的6位密码
003F 25 KEY_2 EQU 3FH
0040 26 KEY_3 EQU 40H
0041 27 KEY_4 EQU 41H
0042 28 KEY_5 EQU 42H
0043 29 KEY_6 EQU 43H
30 ;******************************************************
0044 31 CNT_A EQU 44H
0045 32 CNT_B EQU 45H
0046 33 KEY_CNT EQU 46H ;已输出的密码位数
0047 34 LINE EQU 47H ;按键行号
0048 35 ROW EQU 48H ;按键列号
0049 36 VAL EQU 49H ;键值
37 ;******************************************************
38 ;以下为初始化程序,包括数据存储空间初始化,设置初始密码
0000 39 ORG 00H
0000 800C 40 SJMP START
000B 41 ORG 0BH
000B 020181 42 LJMP INT_T0
000E 754400 43 START: MOV CNT_A,#00H ;程序初始化
0011 754500 44 MOV CNT_B,#00H
0014 754600 45 MOV KEY_CNT,#00H
0017 754700 46 MOV LINE,#00H
001A 754800 47 MOV ROW,#00H
001D 754900 48 MOV VAL,#00H
0020 D290 49 SETB P1.0
0022 753000 50 MOV LED_BIT_1,#00H ;段码存储区清0
0025 753100 51 MOV LED_BIT_2,#00H
0028 753200 52 MOV LED_BIT_3,#00H
002B 753300 53 MOV LED_BIT_4,#00H
002E 753400 54 MOV LED_BIT_5,#00H
0031 753500 55 MOV LED_BIT_6,#00H
0034 753679 56 MOV LED_BIT_7,#79H
0037 753773 57 MOV LED_BIT_8,#73H
58
A51 MACRO ASSEMBLER 胈码薩 12/31/2008 17:06:11 PAGE 2
003A 753E00 59 MOV KEY_1,#00H ;输入密码存储区清0
003D 753F00 60 MOV KEY_2,#00H
0040 754000 61 MOV KEY_3,#00H
0043 754100 62 MOV KEY_4,#00H
0046 754200 63 MOV KEY_5,#00H
0049 754300 64 MOV KEY_6,#00H
65
004C 753806 66 MOV WORD_1,#6 ;设置初始密码为"123456"
004F 753905 67 MOV WORD_2,#5
0052 753A04 68 MOV WORD_3,#4
0055 753B03 69 MOV WORD_4,#3
0058 753C02 70 MOV WORD_5,#2
005B 753D01 71 MOV WORD_6,#1
72
005E 758901 73 MOV TMOD,#01H
0061 758CFD 74 MOV TH0,#(65536-700)/256
0064 758A44 75 MOV TL0,#(65536-700)MOD 256
0067 75A882 76 MOV IE,#82H
77
006A 1201ED 78 A0: LCALL DISP
79 ;***********************************************************
80 ;以下为键盘扫描程序,计算键值并存入VAL
006D 75B0F0 81 LSCAN: MOV P3,#0F0H ;扫描行码
0070 30B00C 82 L1: JNB P3.0,L2
0073 12023E 83 LCALL DLY_S
0076 30B006 84 JNB P3.0,L2
0079 754700 85 MOV LINE,#00H
007C 0200A9 86 LJMP RSCAN
007F 30B10C 87 L2: JNB P3.1,L3
0082 12023E 88 LCALL DLY_S
0085 30B106 89 JNB P3.1,L3
0088 754701 90 MOV LINE,#01H
008B 0200A9 91 LJMP RSCAN
008E 30B20C 92 L3: JNB P3.2,L4
0091 12023E 93 LCALL DLY_S
0094 30B206 94 JNB P3.2,L4
0097 754702 95 MOV LINE,#02H
009A 0200A9 96 LJMP RSCAN
009D 30B3CA 97 L4: JNB P3.3,A0
00A0 12023E 98 LCALL DLY_S
00A3 30B3C4 99 JNB P3.3,A0
00A6 754703 100 MOV LINE,#03H
101
00A9 75B00F 102 RSCAN: MOV P3,#0FH ;扫描列码
00AC 30B406 103 C1: JNB P3.4,C2
00AF 754800 104 MOV ROW,#00H
00B2 0200C4 105 LJMP CALCU
00B5 30B506 106 C2: JNB P3.5,C3
00B8 754801 107 MOV ROW,#01H
00BB 0200C4 108 LJMP CALCU
00BE 30B6EB 109 C3: JNB P3.6,C1
00C1 754802 110 MOV ROW,#02H
111
00C4 E547 112 CALCU: MOV A,LINE ;计算键值
00C6 75F003 113 MOV B,#03H
00C9 A4 114 MUL AB
00CA 2548 115 ADD A,ROW
00CC F549 116 MOV VAL,A
117 ;**************************************************
118 ;以下为按键处理程序,对不同的按键作出响应
00CE B40A25 119 CJNE A,#0AH,J1 ;是否为"CLR"键
00D1 A946 120 MOV R1,KEY_CNT
00D3 B90006 121 CJNE R1,#00H,J2
00D6 120172 122 LCALL ALARM_1
123
00D9 02000E 124 LJMP START
A51 MACRO ASSEMBLER 胈码薩 12/31/2008 17:06:11 PAGE 3
00DC 1201C8 125 J2: LCALL SHIFTR
00DF 1546 126 DEC KEY_CNT
127
00E1 1201ED 128 W00:LCALL DISP ;等待按键抬起
00E4 E5B0 129 MOV A,P3
00E6 B40F03 130 CJNE A,#0FH,W01
00E9 02006A 131 LJMP A0
00EC E5B0 132 W01:MOV A,P3
00EE B4F003 133 CJNE A,#0F0H,W02
00F1 02006A 134 LJMP A0
00F4 80EB 135 W02:SJMP W00
136
00F6 E549 137 J1: MOV A,VAL
00F8 B40B37 138 CJNE A,#0BH,J3 ;判断是否为"ENTER"键
00FB A946 139 MOV R1,KEY_CNT
00FD B9062C 140 CJNE R1,#06H,J4
141
0100 E538 142 MOV A,WORD_1 ;比较密码
0102 B53E21 143 CJNE A,3EH,J5
0105 E539 144 MOV A,WORD_2
0107 B53F1C 145 CJNE A,3FH,J5
010A E53A 146 MOV A,WORD_3
010C B54017 147 CJNE A,40H,J5
010F E53B 148 MOV A,WORD_4
0111 B54112 149 CJNE A,41H,J5
0114 E53C 150 MOV A,WORD_5
0116 B5420D 151 CJNE A,42H,J5
0119 E53D 152 MOV A,WORD_6
011B B54308 153 CJNE A,43H,J5
154
011E C290 155 CLR P1.0
0120 120247 156 LCALL DLY_L
0123 020254 157 LJMP FINI
158
0126 120178 159 J5: LCALL ALARM_2
0129 02000E 160 LJMP START
161
012C 120172 162 J4: LCALL ALARM_1
012F 02000E 163 LJMP START
164
0132 0546 165 J3: INC KEY_CNT ;按下数字键
0134 E546 166 MOV A,KEY_CNT
0136 B4071E 167 CJNE A,#07H,K1
0139 120172 168 LCALL ALARM_1
169
013C 1201ED 170 W10:LCALL DISP ;等待按键抬起
013F E5B0 171 MOV A,P3
0141 B40F03 172 CJNE A,#0FH,W11
0144 02000E 173 LJMP START
0147 E5B0 174 W11:MOV A,P3
0149 B4F003 175 CJNE A,#0F0H,W12
014C 02000E 176 LJMP START
014F 80EB 177 W12:SJMP W10
0151 02000E 178 LJMP START
179
0154 02000E 180 LJMP START
0157 1201A3 181 K1: LCALL SHIFTL
182
015A 1201ED 183 W20:LCALL DISP ;等待按键抬起
015D E5B0 184 MOV A,P3
015F B40F03 185 CJNE A,#0FH,W21
0162 02006A 186 LJMP A0
0165 E5B0 187 W21:MOV A,P3
0167 B4F003 188 CJNE A,#0F0H,W22
016A 02006A 189 LJMP A0
016D 80EB 190 W22:SJMP W20
A51 MACRO ASSEMBLER 胈码薩 12/31/2008 17:06:11 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -