📄 new66.lst
字号:
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE NEW66
OBJECT MODULE PLACED IN new66.OBJ
COMPILER INVOKED BY: D:\学习软件\单片机\keil\C51\BIN\C51.EXE new66.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<absacc.h>
3 //以下8个字节存放8位数码管的段码
4 int LED_BIT_1;
5 int LED_BIT_2;
6 int LED_BIT_3;
7 int LED_BIT_4;
8 int LED_BIT_5;
9 int LED_BIT_6;
10 int LED_BIT_7;
11 int LED_BIT_8;
12 //以下6个字节存放初始密码
13 int WORD[6] = {1,2,3,4,5,6};
14 //以下6个字节存放用户输入的6位密码
15 int KEY[6] = {0};
16
17 int CNT_A;
18 int CNT_B;
19 int KEY_CNT; //已输出的密码位数
20 int LINE; //按键行号
21 int ROW; //按键列号
22 int VAL; //键值
23
24 int FLAG = 1;
25 sbit P1_0 = P1^0;
26 sbit P1_7 = P1^7;
27
28 sbit P2_0 = P2^0;
29 sbit P2_1 = P2^1;
30 sbit P2_2 = P2^2;
31 sbit P2_3 = P2^3;
32 sbit P2_4 = P2^4;
33 sbit P2_5 = P2^5;
34 sbit P2_6 = P2^6;
35 sbit P2_7 = P2^7;
36
37 sbit P3_0 = P3^0;
38 sbit P3_1 = P3^1;
39 sbit P3_2 = P3^2;
40 sbit P3_3 = P3^3;
41 sbit P3_4 = P3^4;
42 sbit P3_5 = P3^5;
43 sbit P3_6 = P3^6;
44
45 void FINI()
46 {
47 1 ;//Nothing
48 1 }
49
50 void DLY_S()
51 {
52 1 int i = 0;
53 1 for (i=0; i<950; i++)
54 1 {
55 2 ;
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 2
56 2 }
57 1 }
58
59 void DLY_L()
60 {
61 1 int i = 0;
62 1 int k = 0;
63 1 for (i=0; i<1000; i++)
64 1 {
65 2 for (k=0; k<940; k++)
66 2 {
67 3 ;
68 3 }
69 2 }
70 1 }
71
72 //段码,输入密码左移子程序
73 void SHIFTL()
74 {
75 1 LED_BIT_6 = LED_BIT_5;
76 1 LED_BIT_5 = LED_BIT_4;
77 1 LED_BIT_4 = LED_BIT_3;
78 1 LED_BIT_3 = LED_BIT_2;
79 1 LED_BIT_2 = LED_BIT_1;
80 1 LED_BIT_1 = 0x40;
81 1 KEY[5] = KEY[4];
82 1 KEY[4] = KEY[3];
83 1 KEY[3] = KEY[2];
84 1 KEY[2] = KEY[1];
85 1 KEY[1] = KEY[0];
86 1 KEY[0] = VAL;
87 1 }
88
89 //段码,输入密码右移子程序
90 void SHIFTR()
91 {
92 1 LED_BIT_1 = LED_BIT_2;
93 1 LED_BIT_2 = LED_BIT_3;
94 1 LED_BIT_3 = LED_BIT_4;
95 1 LED_BIT_4 = LED_BIT_5;
96 1 LED_BIT_5 = LED_BIT_6;
97 1 LED_BIT_6 = 0;
98 1 KEY[0] = KEY[1];
99 1 KEY[1] = KEY[2];
100 1 KEY[2] = KEY[3];
101 1 KEY[3] = KEY[4];
102 1 KEY[4] = KEY[5];
103 1 KEY[5] = 0;
104 1 }
105
106 void ALARM_1()
107 {
108 1 TR0 = 1;
109 1 while (1 == TR0)
110 1 {
111 2 ;
112 2 }
113 1 }
114
115 void ALARM_2()
116 {
117 1 TR0 = 1;
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 3
118 1 while (1 == TR0)
119 1 {
120 2 ;
121 2 }
122 1 DLY_L();
123 1 }
124 //以下为数码显示子程序
125 void DISP()
126 {
127 1 P2_7 = 0;
128 1 P0 = LED_BIT_8;
129 1 DLY_S();
130 1 P2_7 = 1;
131 1 P2_6 = 0;
132 1 P0 = LED_BIT_7;
133 1 DLY_S();
134 1 P2_6 = 1;
135 1 P2_5 = 0;
136 1 P0 = LED_BIT_6;
137 1 DLY_S();
138 1 P2_5 = 1;
139 1 P2_4 = 0;
140 1 P0 = LED_BIT_5;
141 1 DLY_S();
142 1 P2_4 = 1;
143 1 P2_3 = 0;
144 1 P0 = LED_BIT_4;
145 1 DLY_S();
146 1 P2_3 = 1;
147 1 P2_2 = 0;
148 1 P0 = LED_BIT_3;
149 1 DLY_S();
150 1 P2_2 = 1;
151 1 P2_1 = 0;
152 1 P0 = LED_BIT_2;
153 1 DLY_S();
154 1 P2_1 = 1;
155 1 P2_0 = 0;
156 1 P0 = LED_BIT_1;
157 1 DLY_S();
158 1 P2_0 = 1;
159 1 }
160
161 //定时器中断服务程序,用于声音报警
162 void clk()interrupt 1
163 {
164 1 P1_7 = 0;
165 1 TH0 = (65536-700) / 256;
166 1 TL0 = (65536-700) % 256;
167 1 CNT_A++;
168 1 if (30 == CNT_A)
169 1 {
170 2 CNT_A = 0;
171 2 CNT_B++;
172 2 if (20 == CNT_B)
173 2 {
174 3 CNT_A = 0;
175 3 CNT_B = 0;
176 3 TR0 = 0;
177 3 }
178 2 }
179 1 }
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 4
180
181 void CALCU()
182 {
183 1 int i;
184 1 VAL = LINE * 3 + ROW;
185 1 if (0X0A == VAL)
186 1 {
187 2 if (0 == KEY_CNT)
188 2 {
189 3 ALARM_1();
190 3 FLAG = 0;
191 3 return;
192 3 }
193 2 SHIFTR();
194 2 KEY_CNT--;
195 2
196 2 while (1)
197 2 {
198 3 DISP();
199 3
200 3 if ((0X0F==P3) || (0XF0==P3))
201 3 {
202 4 return;
203 4 }
204 3
205 3 }
206 2 }
207 1 if (0X0B == VAL)
208 1 {
209 2 if (6 == KEY_CNT)
210 2 {
211 3 for (i=0; i<6; i++)
212 3 {
213 4 if (KEY[i]!=WORD[i])
214 4 {
215 5 ALARM_2();
216 5 FLAG = 0;
217 5 return;
218 5 }
219 4 }
220 3 P1_0 = 0;
221 3 DLY_L();
222 3 FINI();
223 3 FLAG = 0;
224 3 return;
225 3 }
226 2 ALARM_1();
227 2 FLAG = 0;
228 2 return;
229 2 }
230 1 KEY_CNT++;
231 1
232 1 if (7 == KEY_CNT)
233 1 {
234 2 ALARM_1();
235 2 while(1)
236 2 {
237 3 DISP();
238 3 if ((0X0F==P3) || (0XF0==P3))
239 3 {
240 4 FLAG = 0;
241 4 return;
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 5
242 4 }
243 3 }
244 2 FLAG = 0;
245 2 return;
246 2 }
247 1 SHIFTL();
248 1 while(1)
249 1 {
250 2 DISP();
251 2 if ((0X0F==P3) || (0XF0==P3))
252 2 {
253 3 return;
254 3 }
255 2 }
256 1 return;
257 1 }
258
259 void RSCAN()
260 {
261 1 P3 = 0X0F;
262 1 if (1 == P3_4)
263 1 {
264 2 ROW = 0;
265 2 CALCU();
266 2 }
267 1
268 1 if (1 == P3_5)
269 1 {
270 2 ROW = 1;
271 2 CALCU();
272 2 }
273 1
274 1 if (1 == P3_6)
275 1 {
276 2 ROW = 2;
277 2 CALCU();
278 2 }
279 1 }
280
281 void LSCAN()
282 {
283 1 P3 = 0XF0;
284 1 if (1 == P3_0)
285 1 {
286 2 DLY_S();
287 2 if (1 == P3_0)
288 2 {
289 3 LINE = 0;
290 3 RSCAN();
291 3 }
292 2 }
293 1
294 1 if (1 == P3_1)
295 1 {
296 2 DLY_S();
297 2 if (1 == P3_1)
298 2 {
299 3 LINE = 1;
300 3 RSCAN();
301 3 }
302 2 }
303 1
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 6
304 1 if (1 == P3_2)
305 1 {
306 2 DLY_S();
307 2 if (1 == P3_2)
308 2 {
309 3 LINE = 2;
310 3 RSCAN();
311 3 }
312 2 }
313 1
314 1 if (1 == P3_3)
315 1 {
316 2 DLY_S();
317 2 if (1 == P3_3)
318 2 {
319 3 LINE = 3;
320 3 RSCAN();
321 3 }
322 2 }
323 1 }
324
325 void main()
326 {
327 1 while (1)
328 1 {
329 2 FLAG = 1;
330 2 CNT_A = 0;
331 2 CNT_B = 0;
332 2 KEY_CNT = 0;
333 2 LINE = 0;
334 2 ROW = 0;
335 2 VAL = 0;
336 2 P1_0 = 1;
337 2 LED_BIT_1 = 0;
338 2 LED_BIT_2 = 0;
339 2 LED_BIT_3 = 0;
340 2 LED_BIT_4 = 0;
341 2 LED_BIT_5 = 0;
342 2 LED_BIT_6 = 0;
343 2 LED_BIT_7 = 0X79;
344 2 LED_BIT_8 = 0X73;
345 2
346 2 KEY[0] = 0;
347 2 KEY[1] = 0;
348 2 KEY[2] = 0;
349 2 KEY[3] = 0;
350 2 KEY[4] = 0;
351 2 KEY[5] = 0;
352 2
353 2 WORD[0] = 6;
354 2 WORD[1] = 5;
355 2 WORD[2] = 4;
356 2 WORD[3] = 3;
357 2 WORD[4] = 2;
358 2 WORD[5] = 1;
359 2
360 2 TMOD = 1;
361 2 TH0 = (65536-700) / 256;
362 2 TL0 = (65536-700) % 256;
363 2 IE = 0X82;
364 2
365 2 do
C51 COMPILER V8.05a NEW66 11/26/2008 00:43:25 PAGE 7
366 2 {
367 3 DISP();
368 3
369 3 LSCAN();
370 3 }while(1 == FLAG);
371 2 }
372 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 807 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 54 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -