📄 password clock9.lst
字号:
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次1
1 0000
2 0000 ;************************************************************
3 0000 ;控制口的结构:
4 0000 ; PB1 -- SCL
5 0000 ; PB0 -- SDA
6 0000 ;;4 scan line for output PA3~PA6
7 0000 ;;3 data line for input PB2~PB4
8 0000 ;;key matrix=3x4 12keys
9 0000 ;;PB5 is for "#" input
10 0000 ;*************************************************************
11 0000
12 0000 # include ht48ra0-2.inc
13 0000
14 0000 ;----------------------------
15 0000 ;equ定义区间
16 0000 debounce_num equ 16
17 0000 scl equ pb.1 ;时钟信号引脚定义
18 0000 sda equ pb.0 ;串行数据引脚定义
19 0000 read_out equ [3ch] ;写暂存器
20 0000 write_in equ [3dh] ;读暂存器
21 0000 word_address equ [3eh]
22 0000 data_8 equ [3fh]
23 0000 ;---------------------------
24 0000
25 0000 ;---------------------------
26 0000 ;宏定义
27 0000 ;延迟宏,延迟100微秒
28 0000 d_1 macro
29 0000 local label
30 0000 mov a,64h
31 0000 mov delay,a
32 0000 label:
33 0000 sdz delay
34 0000 jmp label
35 0000 endm
36 0000 ;*************************************************************
37 0000 SAMPLE .SECTION 'DATA'
38 0000
39 0000 ;; --- Temp RAM ---
40 0000 00 a_SR10 DB ? ;;WORK Temp Register
41 0001 00 a_SR11 DB ? ;;
42 0002 00 temp_num DB ?
43 0003
44 0003 ;;------CODE RAM---------
45 0003
46 0003 0008[ array_data db 8 dup (?)
00
]
47 000B
48 000B ;;--------- Program RAM --------
49 000B 00 COLUMMN DB ? ;;Scan Key Colummn Step Number
50 000C 00 KEY_CODE0 DB ? ;;Save Previous Key Number
51 000D 00 KEY_CODE DB ? ;;Scan Key Number
52 000E 00 COL_VALUE DB ? ;;Read on column value to a_COL_VALUE
53 000F 00 KD_TEMP DB ? ;;Key Debounce Check Times
54 0010 00 NKD_TEMP DB ? ;;Key Release Confirm Times
55 0011 00 KEY_DATA DB ? ;;PA temp register
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次2
56 0012 00 KEY_DATA1 DB ?
57 0013 00 delay db ?
58 0014 00 delay0 db ?
59 0015 00 delay1 db ?
60 0016 00 t_count db ?
61 0017 00 t_count1 db ?
62 0018 ;code_num db ?
63 0018 00 release_num db ?
64 0019
65 0019 ;;--- User FLAG define ---
66 0019 00 fg_SendActive dbit ;;VALIDITY KEY Flag
67 0019 fg_PressRec dbit ;;Check Column Multi_Key Flag
68 0019 fg_REPEAT dbit ;;REPEAT KEY Flag
69 0019 fg_Multi_Key dbit ;;INVALID KEY Flag
70 0019 release_flg dbit
71 0019 flg_chang_key dbit
72 0019 flg_chang_personal dbit
73 0019 flg_chang_manage dbit
74 001A 00 flg_chang dbit
75 001B ;*************************************************************
76 001B
77 0000 code .section at 0 'code'
78 0000
79 0000
80 0000 org 00h
81 0000 START:
82 0000 1F92 SET PA
83 0001 ;SET PB
84 0001
85 0001 0F20 MOV a, 20H
86 0002 0081 MOV MP0, a
87 0003 0F50 mov a, 50H
88 0004 CLR_RAM:
89 0004 1F00 CLR R0
90 0005 1481 INC MP0
91 0006 1785 SDZ ACC
92 0007 2804 JMP CLR_RAM
93 0008
94 0008 0F70 mov a,070h
95 0009 0080 R mov t_count,a
96 000A 0F50 mov a,050h
97 000B 0080 R mov t_count1,a
98 000C 0F7F mov a,07fh
99 000D 0080 R mov release_num,a
100 000E
101 000E ini_clock:
102 000E 0FF0 MOV a, offset personal_clock
103 000F 0087 mov tblp,a
104 0010 0F00 mov a,00h ;写入00H为要操作的eeprom的地址
105 0011 00BE mov word_address,a
106 0012 ini_personal_clock:
107 0012 1DBD tabrdl write_in
108 0013 2168 call ht24_write
109 0014 1487 inc TBLP
110 0015 14BE inc word_address
111 0016 0FF8 mov a,offset personal_clock+8
112 0017 0407 xor a,TBLP
113 0018 1085 sz acc
114 0019 2812 jmp ini_personal_clock
115 001A
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次3
116 001A
117 001A 0FE0 MOV a, offset manage_clock
118 001B 0087 mov tblp,a
119 001C 0F10 mov a,010h ;写入10H为要操作的eeprom的地址
120 001D 00BE mov word_address,a
121 001E ini_manage_clock:
122 001E 1DBD tabrdl write_in
123 001F 2168 call ht24_write
124 0020 1487 inc TBLP
125 0021 14BE inc word_address
126 0022 0FE8 mov a,offset manage_clock+8
127 0023 0407 xor a,TBLP
128 0024 1085 sz acc
129 0025 281E jmp ini_manage_clock
130 0026
131 0026 3492 CLR PA.1
132 0027 3512 CLR PA.2
133 0028 0F00 R mov a, offset array_data
134 0029 0081 mov mp0, a
135 002A
136 002A
137 002A ;@*********** Polling System Event ***********
138 002A MAIN_PROC:
139 002A 2063 CALL SCAN_KEY_PROC ;SCAN KEY PROCEDURE
140 002B ;CALL F_DELAY ;TIME DELAY PROCEDURE
141 002B
142 002B 0F0B mov a,0bh ;* key
143 002C 0400 R xor a,key_code
144 002D 1085 sz acc
145 002E 2830 jmp $+2
146 002F ;set release_flg
147 002F 294A jmp release_proc
148 0030
149 0030 3C00 R sz fg_repeat
150 0031 2855 jmp SLEEP
151 0032
152 0032 3C00 R SZ fg_Multi_Key ;Check Invalid Key
153 0033 282A JMP MAIN_PROC ;
154 0034
155 0034 0F0C mov a,0ch ;red key
156 0035 0400 R xor a,key_code
157 0036 1085 sz acc
158 0037 283B jmp $+4
159 0038 3000 R set flg_chang_key
160 0039 3000 R set flg_chang_personal
161 003A 282A jmp main_proc
162 003B
163 003B 0F0A mov a,0ah ;"0" key
164 003C 0400 R xor a,key_code
165 003D 1085 sz acc
166 003E 2842 jmp $+4
167 003F 3400 R clr flg_chang_personal
168 0040 3000 R set flg_chang_manage
169 0041 282A jmp main_proc
170 0042
171 0042 1080 R SZ KEY_CODE ;Check NO Key Press
172 0043 2845 jmp judge
173 0044 2855 jmp sleep
174 0045
175 0045
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次4
176 0045 judge:
177 0045 3092 set pa.1
178 0046 2329 call delay30ms
179 0047 3492 clr pa.1
180 0048
181 0048 0F70 mov a,070h
182 0049 0080 R mov t_count,a
183 004A 0F50 mov a,050h
184 004B 0080 R mov t_count1,a
185 004C
186 004C 3C00 R sz release_flg
187 004D 294A jmp release_proc
188 004E 3C00 R sz flg_chang_key
189 004F 290E jmp manage_code
190 0050 3C00 R sz flg_chang_manage
191 0051 292C jmp chang_manage_proc
192 0052 3C00 R sz flg_chang_personal
193 0053 28F1 jmp chang_personal_proc
194 0054 28D6 JMP personal_code ;
195 0055
196 0055 SLEEP:
197 0055 3C12 sz pa.0
198 0056 2858 jmp $+2
199 0057 2B1F jmp low_voltage
200 0058
201 0058 1780 R sdz t_count1 ;\
202 0059 282A JMP MAIN_PROC ; \
203 005A 1780 R sdz t_count ; /if no key code wait 25s
204 005B 2858 JMP $-3 ;/
205 005C
206 005C 3E94 sz PB.5
207 005D 0002 halt ;System Halt
208 005E 0F70 mov a,070h
209 005F 0080 R mov t_count,a
210 0060 0F50 mov a,050h
211 0061 0080 R mov t_count1,a
212 0062 282A JMP MAIN_PROC ;Any Key WakeUp
213 0063 ;@************* SUBROUTINE[xx]: Scan 12 Key Matrix (3x4) ************
214 0063
215 0063 SCAN_KEY_PROC:
216 0063 ;;--- READ KEY PROCEDURE ---
217 0063 ;;Initiate Process
218 0063 1F00 R clr KEY_CODE ;
219 0064 3400 R clr fg_PressRec ;
220 0065 1F00 R clr COLUMMN ;
221 0066 3400 R clr fg_Multi_Key ;
222 0067
223 0067 0FF9 mov a,0f9h
224 0068 0092 mov pa,a
225 0069 0FFD mov a,0fdh
226 006A 0080 R mov key_data,a
227 006B 0F0C mov a,0ch
228 006C 0080 R mov key_data1,a
229 006D NEXT_COLUMN:
230 006D 0700 R mov a,key_data1
231 006E 0400 R xor a,key_data
232 006F 1880 R rl key_data1
233 0070 0080 R mov key_data,A
234 0071 0092 mov PA,A ;Scan Column PA PORT OUTPUT
235 0072 0000 NOP
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次5
236 0073 0000 Nop ;
237 0074 ;;--- READ PB PORT ---
238 0074 0714 MOV A,PB ;;Read on column value to a_COL_VALUE
239 0075 0080 R mov COL_VALUE,A ;;
240 0076 0F01 mov A,1
241 0077 0080 R mov a_SR11,A
242 0078 0FFB mov A,11111011b ;;
243 0079 0080 R mov a_SR10,A ;; This column value to ACC
244 007A 3800 R SNZ COL_VALUE.4
245 007B 2883 JMP KEY_ROW_4
246 007C 3800 R SNZ COL_VALUE.3
247 007D 2885 JMP KEY_ROW_3
248 007E 3800 R SNZ COL_VALUE.2
249 007F 2887 JMP KEY_ROW_2
250 0080 2881 jmp $+1
251 0081 0000 nop
252 0082 288E JMP COL_WITHOUT_KEY
253 0083 KEY_ROW_4:
254 0083 1880 R rl a_SR10 ;; a_SR10 rotate to "11101111b"
255 0084 1480 R inc a_SR11
256 0085 KEY_ROW_3:
257 0085 1880 R rl a_SR10 ;; a_SR10 rotate to "11110111b"
258 0086 1480 R inc a_SR11
259 0087 KEY_ROW_2:
260 0087 0F1C mov a,01ch
261 0088 0680 R andm a,a_SR10
262 0089 0600 R AND a,COL_VALUE
263 008A
264 008A 0400 R xor A,a_SR10 ;;Check ROW Multi-Key
265 008B 3D0A SZ z
266 008C 2892 JMP COL_WITH_KEY
267 008D COL_ERROR_KEY:
268 008D 3000 R set fg_Multi_Key
269 008E
270 008E COL_WITHOUT_KEY:
271 008E 288F jmp $+1
272 008F 2890 jmp $+1
273 0090 2891 jmp $+1
274 0091 289D JMP READY_2_NEXT_COLUMN
275 0092 COL_WITH_KEY: ;;KEY NUMBER PROCESS
276 0092 0F02 mov a,2 ;;\
277 0093 0080 R mov temp_num,a ;; \
278 0094 0700 R mov a,COLUMMN ;; \
279 0095 0300 R add a,COLUMMN ;; /COLUMMN * 3 --> ACC
280 0096 ;MOV COLUMMN,a ;; /
281 0096 1780 R sdz temp_num ;; /
282 0097 2895 jmp $-2 ;;/
283 0098 0300 R add A,a_SR11 ;;
284 0099 0080 R mov KEY_CODE,A ;;
285 009A 3C00 R SZ fg_PressRec ;;Check Column Multi-Key
286 009B 3000 R set fg_Multi_Key ;;
287 009C 3000 R set fg_PressRec ;;
288 009D READY_2_NEXT_COLUMN:
289 009D 1480 R inc COLUMMN
290 009E 0700 R mov A,COLUMMN
291 009F 0C04 xor A,4
292 00A0 390A SNZ z
293 00A1 286D JMP NEXT_COLUMN
294 00A2 0000 nop
295 00A3 READ_KEY_COMPLETE:
文件:PASSWORD CLOCK9.ASM 盛群编译器版本 2.86 页次6
296 00A3
297 00A3 ;@************* SUBROUTINE[xx]: Check Key Active ************
298 00A3 ;@--- Scan Key Complete, Check key valid ? ---
299 00A3 CHECK_KEY_ACTIVE:
300 00A3
301 00A3 1080 R SZ KEY_CODE ;;If a_KEY_NUM = ffh, invalid key
302 00A4 28A6 JMP VALID_KEY_CHK
303 00A5 28BF JMP INVALID_KEY_CHK
304 00A6 ;@--------------------------
305 00A6 VALID_KEY_CHK:
306 00A6 1080 R SZ KEY_CODE0 ;;Check New Key
307 00A7 28A9 JMP VALID_KEYC_PRO
308 00A8 28CE JMP KEY_DEB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -