這個是匯編語言密碼鎖的以下8個字節存放8位數碼管的段碼
1. LED_BIT_1 EQU 30H
2. LED_BIT_2 EQU 31H
3. LED_BIT_3 EQU 32H
4. LED_BIT_4 EQU 33H
5. LED_BIT_5 EQU 34H
6. LED_BIT_6 EQU 35H
7. LED_BIT_7 EQU 36H
8. LED_BIT_8 EQU 37H
存放初始密碼
9. WORD_1 EQU 38H
10. WORD_2 EQU 39H
11. WORD_3 EQU 3AH
12. WORD_4 EQU 3BH
13. WORD_5 EQU 3CH
14. WORD_6 EQU 3DH
存放用戶輸入的6位密碼
15. KEY_1 EQU 3EH
16. KEY_2 EQU 3FH
17. KEY_3 EQU 40H
18. KEY_4 EQU 41H
19. KEY_5 EQU 42H
20. KEY_6 EQU 43H
*****
21. CNT_A EQU 44H
22. CNT_B EQU 45H
23. KEY_CNT EQU 46H 已輸出的密碼位數
24. LINE EQU 47H 按鍵行號
25. ROW EQU 48H 按鍵列號
26. VAL EQU 49H 鍵值
*****
27. ORG 00H
28. SJMP START
29. ORG 0BH
30. LJMP INT_T0
31. START: MOV CNT_A,#00H
32. MOV CNT_B,#00H
33. MOV KEY_CNT,#00H
34. MOV LINE,#00H
35. MOV ROW,#00H
36. MOV VAL,#00H
37. SETB P1.0
38. MOV LED_BIT_1,#00H
39. MOV LED_BIT_2,#00H
40. MOV LED_BIT_3,#00H
41. MOV LED_BIT_4,#00H
42. MOV LED_BIT_5,#00H
43. MOV LED_BIT_6,#00H
44. MOV LED_BIT_7,#79H
45. MOV LED_BIT_8,#73H
46. MOV KEY_1,#00H
47. MOV KEY_2,#00H
48. MOV KEY_3,#00H
49. MOV KEY_4,#00H
50. MOV KEY_5,#00H
51. MOV KEY_6,#00H
52. MOV WORD_1,#6
53. MOV WORD_2,#5
54. MOV WORD_3,#4
55. MOV WORD_4,#3
56. MOV WORD_5,#2
57. MOV WORD_6,#1
58. MOV TMOD,#01H
59. MOV TH0,#(65536-700)/256
60. MOV TL0,#(65536-700)/256
61. MOV IE,#82H
62. A0: LCALL DISP
63. LSCAN: MOV P3,#0F0H
64. L1: JNB P3.0,L2
65. LCALL DLY_S
66. JNB P3.0,L2
67. MOV LINE,#00H
68. LJMP RSCAN
69. L2: JNB P3.1,L3
70. LCALL DLY_S
71. JNB P3.1,L3
72. MOV LINE,#01H
73. LJMP RSCAN
74. L3: JNB P3.2,L4
75. LCALL DLY_S
76. JNB P3.2,L4
77. MOV LINE,#02H
78. LJMP RSCAN
79. L4: JNB P3.3,A0
80. LCALL DLY_S
81. JNB P3.3,A0
82. MOV LINE,#03H
83. RSCAN: MOV P3,#0FH
84. C1: JNB P3.4,C2
85. MOV ROW,#00H
86. LJMP CALCU
87. C2: JNB P3.5,C3
88. MOV ROW,#01H
89. LJMP CALCU
90. C3: JNB P3.6,C1
91. MOV ROW,#02H
92. CALCU: MOV A,LINE
93. MOV B,#03H
94. MUL AB
95. ADD A,ROW
96. MOV VAL,A
97. CJNE A,#0AH,J1
98. MOV R1,KEY_CNT
99. CJNE R1,#00H,J2
100. LCALL ALARM_1
101. LJMP START
102. J2: LCALL SHIFTL
103. DEC KEY_CNT
104. W00: LCALL DISP
105. MOV A,P3
106. CJNE A,#0FH,W01
107. LJMP A0
108. W01: MOV A,P3
109. CJNE A,#0F0H,W02
110. LJMP A0
111. W02: SJMP W00
112. J1: MOV A,VAL
113. CJNE A,#0BH,J3 判斷是否為ENTER鍵
114. MOV R1,KEY_CNT
115. CJNE R1,#06H,J4
116. MOV A,WORD_1 比較密碼
117. CJNE A,3EH,J5
118. MOV A,WORD_2
119. CJNE A,3FH,J5
120. MOV A,WORD_3
121. CJNE A,40H,J5
122. MOV A,WORD_4
123. CJNE A,41H,J5
124. MOV A,WORD_5
125. CJNE A,42H,J5
126. MOV A,WORD_6
127. CJNE A,43H,J5
128. CLR P1.0
129. LCALL DLY_L
130. LJMP FINI
131. J5: LCALL ALARM_2
132. LJMP START
133. J4: LCALL ALARM_1
134. LJMP START
135. J3: INC KEY_CNT
136. MOV A,KEY_CNT
137. CJNE A,#07H,K1
138. LCALL ALARM_1
139. W10: LCALL DISP
140. MOV A,P3
141. CJNE A,#0FH,W11
142. LJMP START
143. W11: MOV A,P3
144. CJNE A,#0F0H,W12
145. LJMP START
146. W12: SJMP W10
147. LJMP START
148. LJMP START
149. K1: LCALL SHIFTL
150. W20: LCALL DISP
151. MOV A,P3
152. CJNE A,#0FH,W21
153. LJMP A0
154. W21: MOV A,P3
155. CJNE A,#0F0H,W22
156. LJMP A0
157. W22: SJMP W20
158. LJMP A0
159. ALARM_1; SETB TR0
160. JB TR0,$
161. LCALL DLY_L
162. RET
163. INT_T0:CPL P1.7
164. MOV TH0,#100
165. MOV TL0,#253
166. INC CNT_A
167. MOV R1,CNT_A
168. CJNE R1,#30,RETUNE
169. MOV CNT_A,#00H
170. INC CNT_B
171. MOV R1,CNT_B
172. CJNE R1,#20,RETUNE
173. MOV CNT_A,#00H
174. MOV CNT_B,#00H
175. CLR TR0
176. RETUNE:RETI
177. SHIFTL: MOV LED_BIT_6,LED_BIT_5
178. MOV LED_BIT_5,LED_BIT_4
179. MOV LED_BIT_4,LED_BIT_3
180. MOV LED_BIT_2,LED_BIT_1
181. MOV LED_BIT_1,#40H
182. MOV KEY_6,KEY_5
183. MOV KEY_5,KEY_4
184. MOV KEY_4,KEY_3
185. MOV KEY_3,KEY_2
186. MOV KEY_2,KEY_1
187. MOV KEY_1,VAL
188. RET
189. SHIFTL: MOV LED_BIT_1,LED_BIT_2
190. MOV LED_BIT_2,LED_BIT_3
191. MOV LED_BIT_3,LED_BIT_4
192. MOV LED_BIT_4,LED_BIT_5
193. MOV LED_BIT_5,LED_BIT_6
194. MOV LED_BIT_6,#00H
195. MOV KEY_1,KEY_2
196. MOV KEY_2,KEY_3
197. MOV KEY_3,KEY_4
198. MOV KEY_4,KEY_5
199. MOV KEY_5,KEY_6
200. MOV KEY_6,#00H
201. RET
202. DISP:CLR P2.7
203. MOV P0,LED_BIT_8
204. LCALL DLY_S
205. SETB P2.7
206. CLR P2.6
207. MOV P0,LED_BIT_7
208. LCALL DLY_S
209. SETB P2.6
210. CLR P2.5
211. MOV P0,LED_BIT_6
212. LCALL DLY_S
213. SETB P2.5
214. CLR P2.4
215. MOV P0,LED_BIT_5
216. LCALL DLY_S
217. SETB P2.4
218. CLR P2.3
219. MOV P0,LED_BIT_4
220. LCALL DLY_S
221. SETB P2.3
222. CLR P2.2
223. MOV P0,LED_BIT_3
224. LCALL DLY_S
225. SETB P2.2
226. CLR P2.1
227. MOV P0,LED_BIT_2
228. LCALL DLY_S
229. SETB P2.1
230. CLR P2.0
231. MOV P0,LED_BIT_1
232. LCALL DLY_S
233. SETB P2.0
234. RET
235. DLY_S:MOV R6,#10
236. D1:MOV R7,#250
237. DJNZ R7,$
238. DJNZ R6,D1
239. RET
240. DLY_L:MOV R5,#100
241. D2:MOV R6,#100
242. D3:MOV R7,#248
243. DJNE R7,$
244. DJNE R6,D3
245. DJNE R5,D2
246. RET
247. FINI:NOP
248. END
|