📄 main.lst
字号:
252 2 if(js)
253 2 {
254 3 js=0;
255 3 if(buffer[2]<13)
256 3 {
257 4 if(i<16)
258 4 {
259 5 mima_temp[i]=buffer[2];
260 5 i++;
261 5 show(i);
262 5 }
263 4 }
264 3 else
265 3 {
266 4 if(buffer[2]==13&&i) i--,show(i); //退格
267 4 if(buffer[2]==14)
268 4 {
269 5 if(ks) ks=0;
270 5 i=0,show(i); //清屏
271 5 }
272 4 if(buffer[2]==15&&ks) //修改密码
273 4 {
274 5 mmxg=1;
275 5 i=0;
276 5 show(i);
277 5 }
278 4 if(buffer[2]==16)
279 4 {
280 5 i=0;
281 5 if(mmxg) //密码修改
282 5 {
283 6 if(mmxg==2)
284 6 {
285 7 s=0;
286 7 if(mima1[16]==mima_temp[16])
287 7 {
288 8 s++;
289 8 for(j=0;j<mima_temp[16];j++)
290 8 {
291 9 if(mima1[j]==mima_temp[j])
292 9 {
293 10 s++;
294 10 }
295 9 }
296 8 }
297 7 mmxg=0;
298 7 if(s>mima1[16])
299 7 {
300 8 for(j=0;j<17;j++)
301 8 {
302 9 mima[j]=mima1[j];
303 9 // send(mima[j]);
C51 COMPILER V8.02 MAIN 05/17/2012 10:39:23 PAGE 6
304 9 }
305 8 show(110);
306 8 eeprom_wr();
307 8 }
308 7 else show(119);
309 7 }
310 6 if(mmxg==1)
311 6 {
312 7 for(j=0;j<17;j++)
313 7 mima1[j]=mima_temp[j];
314 7 mmxg=2;
315 7 show(i);
316 7 }
317 6
318 6 }
319 5 else k=mmyz(),i=0;
320 5 }
321 4 }
322 3 mima_temp[16]=i; //密码长度
323 3 // send(buffer[2]);
324 3 // send(mima_temp[16]);
325 3 }
326 2 if(k==1) ks=1,show(110);
327 2 if(k==2) ks=0,show(119),wrong++;
328 2 k=0;
329 2 if(ks) led=0;
330 2 else led=1;
331 2 if(wrong>2) wrong=0,bp=100;
332 2 }
333 1
334 1 }
335
336
337
338
339
340 /************外部中断1**********************/
341 void Int1(void) interrupt 2 using 1
342 {
343 1 uchar dh;
344 1 uchar k;
345 1 TR0=0;
346 1 dh=TH0;
347 1 // dl=TL0;
348 1 TL0=0;
349 1 TH0=0;
350 1 TR0=1;
351 1 if(dh>25&&dh<100) n=33;
352 1 else if(dh>2&&dh<5) k=0;
353 1 else if(dh>6&&dh<12) k=1;
354 1 else n=0;
355 1 if(n)
356 1 {
357 2 dat=dat<<1;
358 2 dat+=k;
359 2 if(n==25) buffer[0]=dat,dat=0;
360 2 if(n==17) buffer[1]=dat,dat=0;
361 2 if(n==9) buffer[2]=dat,dat=0;
362 2 if(n==1) buffer[3]=dat,dat=0;
363 2 n--;
364 2 if(!n)
365 2 {
C51 COMPILER V8.02 MAIN 05/17/2012 10:39:23 PAGE 7
366 3 if(!(buffer[2]&buffer[3])) //数据校验
367 3 {
368 4 js=1; //接收完成
369 4 beep=0;
370 4 }
371 3 else
372 3 {
373 4 buffer[0]=0;
374 4 buffer[1]=0;
375 4 }
376 3 }
377 2 }
378 1 // send(dh);
379 1 }
380
381 /************定时器0**********************/
382
383 void Timer0Interrupt(void) interrupt 1
384 {
385 1 TR0=1;
386 1 n=0;
387 1 if(bp) bp--,beep=0;
388 1 else beep=1;
389 1 }
390
391
392
393 /************串口**********************/
394 void send(uchar c)
395 {
396 1 EA=0;
397 1 SBUF = c;
398 1 while(!TI);
399 1 TI = 0;
400 1 EA=1;
401 1 }
402
403 void delay1s(void) //误差 -0.000000000285us
404 {
405 1 unsigned char a,b,c;
406 1 for(c=13;c>0;c--)
407 1 for(b=247;b>0;b--)
408 1 for(a=142;a>0;a--);
409 1
410 1 }
411
412
413 void UARTInterrupt(void) interrupt 4
414 {
415 1 uchar c;
416 1 if(RI)
417 1 {
418 2 RI = 0;
419 2 c=SBUF;
420 2 if(c==0xaa)
421 2 {
422 3 delay1s();
423 3 ISP_CONTR=0x60;
424 3 }
425 2 }
426 1 else
427 1 TI = 0;
C51 COMPILER V8.02 MAIN 05/17/2012 10:39:23 PAGE 8
428 1 }
429
430 //******************************EEPROM***********************************//
431
432 void IAP_Disable()
433 {
434 1 //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
435 1 //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
436 1 ISP_CONTR = 0; //关闭IAP 功能
437 1 ISP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用
438 1 ISP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
439 1 ISP_ADDRH = 0;
440 1 ISP_ADDRL = 0;
441 1 }
442
443
444 void eeprom_wr()
445 {
446 1 uchar *p;
447 1 uchar i;
448 1 p=mima;
449 1 ISP_CONTR=0x82; //启动IAP
450 1 ISP_CMD=0x03; // 擦除
451 1 ISP_ADDRH=0x20; //地址
452 1 ISP_ADDRL=1;
453 1 EA=0;
454 1 ISP_TRIG=0x46; //命令生效
455 1 ISP_TRIG=0xb9;
456 1 ;
457 1 EA=1;
458 1 ISP_CMD=0x02; //命令写
459 1 for(i=0;i<17;i++)
460 1 {
461 2 ISP_DATA=*p; //数据
462 2 p++;
463 2 ISP_ADDRH=0x20; //地址
464 2 ISP_ADDRL=i;
465 2 EA=0;
466 2 ISP_TRIG=0x46; //命令生效
467 2 ISP_TRIG=0xb9;
468 2 ;
469 2 EA=1;
470 2 }
471 1 IAP_Disable();
472 1 }
473
474 void eeprom_re()
475 {
476 1 uchar *p;
477 1 uchar i;
478 1 p=mima;
479 1 ISP_CONTR=0x82; //启动IAP
480 1 ISP_CMD=0x01; //命令读
481 1 for(i=0;i<17;i++)
482 1 {
483 2 ISP_ADDRH=0x20; //地址
484 2 ISP_ADDRL=i;
485 2
486 2 ISP_TRIG=0x46; //命令生效
487 2 ISP_TRIG=0xb9;
488 2 ;
489 2 *p=ISP_DATA;
C51 COMPILER V8.02 MAIN 05/17/2012 10:39:23 PAGE 9
490 2 p++;
491 2 }
492 1 IAP_Disable();
493 1 }
494
495
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1239 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 78 4
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -