📄 11t6_sc.lst
字号:
472 1
473 1 }
474
475 /*--------------------------------------------------------------------
476 FUNCTION: Write_Card,向指定块写数据
477 INPUT: uchar BlockNo,uchar *CardDataBuf
478 OUTPUT: 1byte CardStatus
479 --------------------------------------------------------------------*/
480 /**************************************************
481 五、 向指定块写数据
482 command:3C 13 01 67 00(绝对块号) DATA0~DATA15 BCC 0D
483 ***************************************************/
484 void Write_Card(uchar BlockNo_,uchar *CardDataBuf_)
485 {
486 1 uchar i;
487 1
488 1 uchar txbuff[23];
489 1 uchar rxbuff[7];
C51 COMPILER V7.06 11T6_SC 09/12/2007 12:40:46 PAGE 9
490 1 //i=BlockNo_;
491 1 //i=*CardDataBuf_;//
492 1 //t115:
493 1 CardStatus=0;
494 1 txbuff[0]=0x3C;
495 1 txbuff[1]=0x13;
496 1 txbuff[2]=0x01;
497 1 txbuff[3]=0x67;
498 1 txbuff[4]=BlockNo_;
499 1 txbuff[4]=BlockNo_; //block
500 1 for(i=0;i<16;i++)
501 1 txbuff[5+i]=*CardDataBuf_++; //待写数据
502 1 txbuff[21]=0;
503 1 for(i=0;i<21;i++)
504 1 txbuff[21]^=txbuff[i]; //BCC
505 1 txbuff[22]=0x0D;
506 1
507 1 for(i=0;i<23;i++)
508 1 {
509 2 UART_PutByte(txbuff[i]);
510 2 }
511 1 //;--------------------------------------------------------------------
512 1 //;Write_Card return
513 1 //; Right: 3C 02 00 00 BCC 0D
514 1 //; Error: 3C 01 FF(错误返回代码) BCC 0D
515 1 //;--------------------------------------------------------------------
516 1 //;;;;;;
517 1 for(i=0;i<7;i++)
518 1 {
519 2 rxbuff[i]=UART_GetByte();
520 2 if(rxbuff[0]!=0x3C)i=0;
521 2 if(rxbuff[i]==0x0D)break;
522 2 }
523 1 if(rxbuff[0]!=0x3C)goto t115;
524 1 if(rxbuff[1]!=0x02)goto t115;
525 1 if(rxbuff[2]!=0x00)goto t115;
526 1 if(rxbuff[3]!=0x00)goto t115;
527 1 if(rxbuff[5]!=0x0d)goto t115;
528 1 t115:
529 1 rxbuff[6]=0;
530 1 for(i=0;i<4;i++)
531 1 rxbuff[6]^=rxbuff[i];
532 1 if(rxbuff[6]==rxbuff[4])
533 1 CardStatus=0x01;
534 1
535 1 }
536 //==Write_Card end==
537
538 /*--------------------------------------------------------------------
539 FUNCTION: TurnOff_Card,关卡
540 INPUT:
541 OUTPUT: CardStatus
542 --------------------------------------------------------------------*/
543 /**************************************************
544 八、 关卡,关掉的M1卡片,这个命令不仅仅是关卡,还让读卡电路恢复到主动寻卡状态
545 command:3C 04 01 68 00 00 51 0D
546 **************************************************/
547
548 void TurnOff_Card(void)
549 { uchar i;
550 1 uchar txbuff[8];
551 1 uchar rxbuff[7];
C51 COMPILER V7.06 11T6_SC 09/12/2007 12:40:46 PAGE 10
552 1 //t116:
553 1 CardStatus=0;
554 1 txbuff[0]=0x3C;
555 1 txbuff[1]=0x04;
556 1 txbuff[2]=0x01;
557 1 txbuff[3]=0x68;
558 1 txbuff[4]=0x00;
559 1 txbuff[5]=0x00;
560 1 txbuff[6]=0x51;
561 1 txbuff[7]=0x0D;
562 1
563 1 for(i=0;i<8;i++)
564 1 UART_PutByte(txbuff[i]);
565 1 //;--------------------------------------------------------------------
566 1 //; Right: 3C 02 00 00 3E 0D
567 1 //; Error: 3C 01 FF (错误返回代码)BCC 0D
568 1 //;--------------------------------------------------------------------
569 1 //;;;;;;
570 1 for(i=0;i<6;i++)
571 1 {
572 2 rxbuff[i]=UART_GetByte();
573 2 if(rxbuff[0]!=0x3C)i=0;
574 2 if(rxbuff[i]==0x0D)break;
575 2 }
576 1 //if(rxbuff[0]!=0x3C)goto t116;
577 1 //if(rxbuff[1]!=0x02)goto t116;
578 1 //if(rxbuff[2]!=0x00)goto t116;
579 1 //if(rxbuff[3]!=0x00)goto t116;
580 1 //if(rxbuff[4]!=0x3e)goto t116;
581 1 if(rxbuff[5]!=0x0d)goto t116;
582 1 t116: rxbuff[7]=0;
583 1 for(i=0;i<4;i++)rxbuff[7]^=rxbuff[i];
584 1 if(rxbuff[7]==rxbuff[4])CardStatus=0x01;
585 1
586 1 }
587
588 /*--------------------------------------------------------------------
589 FUNCTION: SetRes,如果该step失败,将tmpResult中该步对应位调整为0,操作成功则不做改变
590 INPUT: CardStatus(step succed equal 0x01)
591 OUTPUT: tmpResult
592 --------------------------------------------------------------------*/
593 void SetRes(uchar RES,uchar NUM)
594 {
595 1 uchar temp1,temp2;
596 1 if(RES==0) //如果SETP操作失败(完成标记字节为零),调整tmpResult中对应该位为0态
597 1 {
598 2 temp1=0xFF>>NUM;
599 2 temp2=0xFF<<9-NUM;
600 2 temp1=temp1|temp2;
601 2 tmpResult=temp1&tmpResult;
602 2 }
603 1
604 1 }
605 /*--------------------------------------------------------------------
606 FUNCTION: display() ;操作成功步对应位绿灯亮;操作失败步对应位红灯亮
607 INPUT: tmpResult
608 OUTPUT: P1 AND P3.5 OR P3.7
609 --------------------------------------------------------------------*/
610 void display(uchar DispData)
611 { P1=DispData; //操作成功步对应位亮
612 1 GREEN_LINE=0; //绿灯亮
613 1 delay10ms(20);
C51 COMPILER V7.06 11T6_SC 09/12/2007 12:40:46 PAGE 11
614 1 GREEN_LINE=1; //绿灯灭
615 1 P1=~DispData&0xfc; //操作失败步对应位亮
616 1 RED_LINE=0; //红灯亮
617 1 delay10ms(30);
618 1 RED_LINE=1; //红灯灭
619 1 }
620
621 /*--------------------------------------------------------------------
622 FUNCTION: led_cyc_on()
623 INPUT:
624 OUTPUT:
625 --------------------------------------------------------------------*/
626 //void led_cyc_on(void)
627 //{
628 // uchar i,Ddata=0x80;
629 // P1=0x00;
630 // GREEN_LINE =1;
631 // RED_LINE=1;
632 // delay10ms(10);
633 // GREEN_LINE=0;
634 // for(i=0;i<8;i++)
635 // {
636 //
637 // P1=_cror_(Ddata,i);
638 // delay10ms(10);
639
640 // }
641 /* GREEN_LINE=1;
642 RED_LINE=0;
643 Ddata=0x01;
644 for(i=0;i<8;i++)
645 {
646
647 P1=_crol_(Ddata,i);
648 delay10ms(20);
649
650 }*/
651 // GREEN_LINE =1;
652 // RED_LINE=1;
653 //}
654
655 //**************************************************
656 void wangdianshezhi(uchar *CardNo)
657 {
658 1 uchar CardBlockNo,i;
659 1 //uchar data CardNo[4];
660 1 uchar CardDataBuf[16];
661 1 uchar data CardBlockKey[6];
662 1 uchar BlockKeyAorB=0;//A套密码
663 1 for(i=0;i<6;i++) CardBlockKey[i]=0xff;
664 1 //for(i=0;i<4;i++) CardNo[i]=i+1;
665 1
666 1 //读块4
667 1 jixudukuai4:
668 1
669 1 CardBlockNo=0x04;
670 1 Psd_Verify(CardBlockKey,BlockKeyAorB,CardBlockNo,CardNo);
671 1 if (CardStatus)
672 1 {
673 2 CardBlockNo=0x04;
674 2 Read_Card(CardBlockNo,CardDataBuf);
675 2 //for (i=0;i<16;i++)
C51 COMPILER V7.06 11T6_SC 09/12/2007 12:40:46 PAGE 12
676 2 //sen(CardDataBuf[i]);
677 2 //sen(CardDataBuf[0]);
678 2 //sen(CardDataBuf[1]);
679 2 };
680 1 if (CardStatus)
681 1 {
682 2 writertc(wangdiangaodizhi,CardDataBuf[0]);
683 2 writertc(wangdiandidizhi,CardDataBuf[1]);
684 2 // sen(readrtc(wangdiangaodizhi));
685 2 // sen(readrtc(wangdiandidizhi));
686 2 }
687 1 else
688 1 goto jixudukuai4;
689 1
690 1 }
691
692
693 void wangdianpanduan(uchar *CardNo)
694 {
695 1 uchar BlockNo,CardBlockNo,i,j,k;
696 1 //uchar data CardNo[4];
697 1 uchar CardDataBuf[16];
698 1 uchar data CardBlockKey[6];
699 1 uchar BlockKeyAorB=0;//A套密码
700 1 bit douweiling;
701 1 for(i=0;i<6;i++) CardBlockKey[i]=0xff;
702 1 //for(i=0;i<4;i++) CardNo[i]=i+1;
703 1 //读取第4块
704 1 CardBlockNo=0x04;
705 1 Psd_Verify(CardBlockKey,BlockKeyAorB,CardBlockNo,CardNo);
706 1 Read_Card(CardBlockNo,CardDataBuf);
707 1
708 1 //如果是注册用户则读取第C块
709 1 if (CardDataBuf[0]==readrtc(wangdiangaodizhi) && CardDataBuf[1]==readrtc(wangdiandidizhi)) //如果是启
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -