⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read_card.c

📁 51系列单片机读卡程序
💻 C
📖 第 1 页 / 共 2 页
字号:
uchar  Search_Card(void)            
   {uint  i,n=0;
    tx0[0]=0x3c;
    tx0[1]=0x04;
    tx0[2]=0x01;
    tx0[3]=0x70;
    tx0[4]=0x00;
    tx0[5]=0x00;
    tx0[6]=0x49;
    tx0[7]=0x0d;
    tx0_num=8;
    SBUF0=*p_tx0++;
    while(tx0_over!=1);

    rx0_num=0;
    while(n<65535)
      {if((rx0[1]==0x05)&&(rx0_num>=9)) break;
       if((rx0[1]==0x01)&&(rx0_num>=5)) break; 
       n++;
      }
    Delay_10ms();
    rx0_num=0;
    if(rx0[1]==0x05)
		    {for(i=0;i<4;i++) 
          newCardNo[i]=rx0[i+2];
       return 1;
      }
    else   
       return 0;    
   }
//=====================================密码验证
uchar  Psd_Verify(uchar tmpKeyType,uchar tmpBlockNo,uchar *tmpCardNo)        
   {uchar i;
    uint  n=0;
    tx0[0]=0x3c; 
    tx0[1]=0x08;
    tx0[2]=0x01;
    tx0[3]=0x6a;
    tx0[4]=tmpKeyType;
    tx0[5]=tmpBlockNo;
    for(i=0;i<4;i++) 
        tx0[6+i]=tmpCardNo[i];
    tx0[10]=0;
    for(i=0;i<10;i++)
        tx0[10]^=tx0[i];
    tx0[11]=0x0d;
    tx0_num=12;
    SBUF0=*p_tx0++;
    while(tx0_over!=1);

    rx0_num=0;
    while(n<65535)
      {if((rx0[1]==0x02)&&(rx0_num>=6)) break;
       if((rx0[1]==0x01)&&(rx0_num>=5)) break;
       n++;
      }
    Delay_10ms();
    rx0_num=0;
    if(rx0[1]==0x02)
       return 1;
    else
       return 0;
   }
//=====================================读卡命令
uchar  Read_Card(uchar BlockNo)        
   {uchar i;
    uint  n=0;
    tx0[0]=0x3c; 
    tx0[1]=0x04;
    tx0[2]=0x01;
    tx0[3]=0x66;
    tx0[4]=BlockNo;
    tx0[5]=0x00;
    tx0[6]=0;
    for(i=0;i<6;i++) 
       tx0[6]^=tx0[i];
    tx0[7]=0x0d;
    tx0_num=8;
    SBUF0=*p_tx0++;
    while(tx0_over!=1);

    rx0_num=0;
    while(n<65535)
       {if((rx0[1]==0x12)&&(rx0_num>=21)) break;
        if((rx0[1]==0x01)&&(rx0_num>=5)) break;
        n++;
       }
    Delay_10ms();
    rx0_num=0;
    if (rx0[1]==0x12)
       {*p_CardBufIn++ = (((uint)rx0[4]<<8)&0xff00)|((uint)rx0[3]&0x00ff);
        CardCountRead++;
        if(p_CardBufIn==p_CardBufEnd)
           p_CardBufIn=p_CardBufBegin;
        return 1;
       }
    else
        return 0;
   }
//=====================================关闭卡片
void  Close_Card(void)                
   {uint n=0;
    tx0[0]=0x3c;
    tx0[1]=0x04;
    tx0[2]=0x01;
    tx0[3]=0x68;
    tx0[4]=0x00;
    tx0[5]=0x00;
    tx0[6]=0x51;
    tx0[7]=0x0d;
    tx0_num=8;
    SBUF0=*p_tx0++;
    while(tx0_over!=1);

    rx0_num=0;
    while(n<65535)
      {if((rx0[1]==0x02)&&(rx0_num>=6)) break;
       if((rx0[1]==0x01)&&(rx0_num>=5)) break;
       n++;
      }
    Delay_10ms();
    rx0_num=0;
   }
//=====================================蜂鸣器响一声
void Buzz_One(uchar Time)
   {uint n;
    tx0[0]=0x3c;
    tx0[1]=0x03;
    tx0[2]=0x01;
    tx0[3]=0x6b;
	   tx0[4]=Time;
    tx0[5]=0x65;
    tx0[6]=0x0d;
    tx0_num=7;
    SBUF0=*p_tx0++;
    while(tx0_over!=1);

    rx0_num=0;
    while(n<65535)
      {if((rx0[1]==0x02)&&(rx0_num>=6)) break;
       if((rx0[1]==0x01)&&(rx0_num>=5)) break;
       n++;
      }
    Delay_10ms();
    rx0_num=0;
   }
//===============================================
//=====================================
void  config(void)
  {
//-------------------------------------
//       系统振荡配置
//-------------------------------------
    uchar  n = 0;
    WDTCN = 0xDE;    WDTCN = 0xAD;//-----------------
	   OSCXCN = 0x67;	                 
    for (;n < 255;n++);               while ((OSCXCN & 0x80) == 0 );
	   OSCICN = 0x88;
//-----------------
	   RSTSRC = 0x00;
//-------------------------------------
//       输入输出端口配置
//-------------------------------------
    P0MDOUT = 0x11;
    P1MDOUT = 0x00;
    P2MDOUT = 0x00;
    P3MDOUT = 0x00;
    P74OUT = 0x00;

    P1MDIN = 0xFF;

    P0 = 0x00;
    P1 = 0x00;
    P2 = 0x00;
    P3 = 0x00;
    P4 = 0x00;
    P5 = 0x00;
    P6 = 0x00;
    P7 = 0x00;
    EMI0CF = 0x00;    
    XBR0=0x15;
    XBR1=0x00;
    XBR2=0x44;
//-------------------------------------
//       模拟资源配置
//-------------------------------------
	   REF0CN = 0x02;
//-----------------
	   AMX0CF = 0x00;
	   AMX0SL = 0x00;
	   ADC0CF = 0xF8;       //?????????
	   ADC0CN = 0x84;
	
	   ADC0LTH = 0x00;
	   ADC0LTL = 0x00;
	   ADC0GTH = 0xFF;
	   ADC0GTL = 0xFF;

    AMX1SL = 0x00;
    ADC1CF = 0xF8;
    ADC1CN = 0x00;
//-----------------
	   DAC0CN = 0x00;
    DAC0L = 0x00;
    DAC0H = 0x00;

	   DAC1CN = 0x00;
    DAC1L = 0x00;
    DAC1H = 0x00;
//-----------------
   	CPT0CN = 0x00;
   	CPT1CN = 0x00;
//-------------------------------------
//       串行通讯配置
//-------------------------------------
	   SPI0CN = 0x00;
    SPI0CFG = 0x00;
    SPI0CKR = 0x00;
//-----------------
    SCON0 = 0x50;
    SCON0 &= 0xFC;    SADEN0 = 0x00;

    PCON = 0x00;

    SCON1 = 0x50;
    SCON1 &= 0xFC;    SADEN1 = 0x00;
//-----------------
	   SMB0CN = 0x42;
	   SMB0ADR = 0x00;
	   SMB0CR = 0xe5;
//-------------------------------------
//       定时计数捕捉配置
//-------------------------------------
	   CKCON = 0x00;

	   TCON = 0x00;
	   TMOD = 0x21;
  	 TH0 = 0xf1;         //2ms
  	 TL0 = 0x9a;
	   TH1 = 0x00;
	   TL1 = 0x00;

    T2CON = 0x34;
  	 RCAP2H = 0xff;
  	 RCAP2L = 0xb8;
  	 TH2 = 0x00;
  	 TL2 = 0x00;
		
    TMR3CN = 0x00;
  	 TMR3RLL = 0x00;
  	 TMR3RLH = 0xF4;
  	 TMR3H = 0xF4;
  	 TMR3L = 0x00;

    T4CON = 0x34;
    RCAP4H = 0xff;
    RCAP4L = 0xB8;
    TH4 = 0x00;
    TL4 = 0x00;
//-----------------
	   PCA0MD = 0x00;
	   PCA0CN = 0x00;
    PCA0H = 0x00;
    PCA0L = 0x00;

	   PCA0CPM0 = 0x21;
	   PCA0CPL0 = 0x00;
	   PCA0CPH0 = 0x00;

	   PCA0CPM1 = 0x21;
	   PCA0CPL1 = 0x00;
	   PCA0CPH1 = 0x00;

	   PCA0CPM2 = 0x00;
	   PCA0CPL2 = 0x00;
	   PCA0CPH2 = 0x00;

	   PCA0CPM3 = 0x00;
	   PCA0CPL3 = 0x00;
	   PCA0CPH3 = 0x00;

	   PCA0CPM4 = 0x00;
	   PCA0CPL4 = 0x00;
	   PCA0CPH4 = 0x00;
//       中断配置
//-------------------------------------
	   IE = 0x92;
	   IP = 0x00;
	   EIE1 = 0x00;
	   EIE2 = 0x40;
	   EIP1 = 0x00;
	   EIP2 = 0x00;
  }
//-------------------------------------





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -