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

📄 idcard.h

📁 这是52单片机串口调试程序
💻 H
字号:
#define	MBits			64
#define	MHeader		10
#define	IDbyte		7
#define	IDStar		0
#define	MQh			595
#define	MQl			365
#define	MMh			295
#define	MMl			180
#define	M43			310
#define	M41			70

#define	H_Mth			(MQh/256)
#define	L_Mth			(MQh%256)
#define	H_Mtl			(MQl/256)
#define	L_Mtl			(MQl%256)
#define	Saveth		(H_Mth)
#define	H_MMh			(MMh/256)
#define	L_MMh			(MMh%256)
#define	H_MMl			(MMl/256)
#define	L_MMl			(MMl%256)
#define	H_M43			(M43/256)
#define	L_M43			(M43%256)

void Check_IDcard(void)
{
	BYTE Sum0,Sum1,IDB;
	BYTE i,Hi,Li;
	TR0=0;  TH0=TL0=0;  TR0=1;
	Hi=Li=i=0;
	Btemp=B_RFIN;
	if(0xFF>IDCarIn) IDCarIn++;
	IDCardTime=10;
	while(1){
		if(Btemp!=B_RFIN){	// TO get first bit
			TR0=0;
			if(TH0<H_Mth || (TH0==H_Mth && TL0<L_Mth)){
				if(TH0>H_Mtl || (TH0==H_Mtl && TL0>L_Mtl)){
					i++;  TL0=28;
					if(i>5) break;
				}else if((TH0<H_MMh || (TH0==H_MMh&&TL0<L_MMh))
						 &&(TH0>H_MMl || (TH0==H_MMl&&TL0>L_MMl))){
					TL0=70;  i++;
				}else{TL0=58; if(0!=i) i--;}
			}else{TL0=12; if(0!=i) i--;}
			TH0=0;  TR0=1;  Btemp=!Btemp;
		}
		if(0==IDCardTime) return;  // Time Up
		if(0==i){
			if(TH0>Saveth){
				TR0=0;
				return;
			}
		}  // Wait for U2270B working
	}
	TH0=TL0=0;  TR0=1;
	IDCardTime=20;
	Dm0=B_RFIN;
	IDB=1;
	i=0;
	Bdone=0; 
	do{
		while(TL0<M41);
		if(Dm0!=B_RFIN) return;
		if(0==IDCardTime) return;  // Time Up
		while(TH0<H_M43 || (TH0==H_M43&&TL0<L_M43));
		Btemp=B_RFIN;
		while(Btemp==B_RFIN);
		TR0=0;
		Hi=TH0;  Li=TL0;
		TH0=0;  TL0=10;  TR0=1;
		if(Hi>H_Mth || (Hi==H_Mth && Li>L_Mth)) return;
		IDB++;
		if(1==Bdone){
			DM=DM<<1;  Dm0=B_RFIN;
			if(0==IDB%8){ ID_Card_no[i++]=DM; Sum0+=DM; }
			if(i==IDbyte){
				if(0!=IDCarIn)IDCarIn--;
				if(Sum1==Sum0) break;
				else { Sum1=Sum0; Bdone=0; }
			}
		}else{
			Dh1=0;
			DH=DH<<1;  Dh0=Dm7;
			DM=DM<<1;  Dm0=B_RFIN;
			if(0x02==DH && 0x00==DM){
				IDB=MHeader;
				i=IDStar;
				Bdone=1;
				Sum0=0;
			} // Get header
		}
	}while(0!=IDB);      // can't found the header
	TR0=0;
	if(i==IDbyte){
		if(Sum2!=Sum0||10<IDCarIn){
         IDCarIn=0;
         Sum2=Sum0;
			BELL_ON
			BELL_counter=10;
			b_Card_In=1;
		}
	}
}

void Card_Process(void)
{
	BYTE i;
	for(i=0; i<7; i++)
		Last_Card_no[i]=ID_Card_no[i];
	Timer_1s=4;
	HT1380_ReadTime();
#ifdef	CHECK_USER
	b_tmp=Find_User();	// Set Page 8, if Card_no is valid, Flash_p=POSITION
#else
	b_tmp=1;
#endif
	while(b_Send_busy){}	// Wait until serial port free
	Send_buf[3]=19;  Send_buf[4]=~19;
	for(i=5; i<12; i++)
		Send_buf[i]=ID_Card_no[i-5];
	i=(Time_buf[2]>>4)*10+(Time_buf[2]&0x0F);						// hour
	Send_buf[14]=Time_buf[6];											// year
	Send_buf[15]=(Time_buf[4]>>4)*10+(Time_buf[4]&0x0F);		// month
	Send_buf[15]|=Sys_Stat;
	Send_buf[16]=(Time_buf[3]>>4)*10+(Time_buf[3]&0x0F);		// day
	Send_buf[17]=(Time_buf[1]>>4)*10+(Time_buf[1]&0x0F);		// minute
	Send_buf[16]=(Send_buf[16]<<3) | (i>>2);						// day & (3/5)hour
	Send_buf[17]=(Send_buf[17]) | (i<<6);							// (2/5)hour & minute
	if(b_tmp){	// User is valid
#ifdef	CHECK_USER
		Send_buf[12]=Flash[Flash_p+15];
		Send_buf[13]=Flash[Flash_p+16];
#else
		Send_buf[12]=ID_Card_no[3];
		Send_buf[13]=ID_Card_no[4];
#endif
		if(Sys_Stat==SB||Sys_Stat==JBS||Sys_Stat==LSJ){
#ifdef	CHINESE
			mystrcpy(" 欢迎           ");
#else
			mystrcpy("Hello           ");
#endif
			newVOC_Play(0);
		}else{
#ifdef	CHINESE
			mystrcpy("再见!           ");
#else
			mystrcpy(" Bye!           ");
#endif
			newVOC_Play(2);
		}
#ifdef	CHECK_USER
		Set_28F040_Page(8);
		if(Flash[Flash_p+7]==0xFF){	// Empty user name
			User_id=Flash[Flash_p+16]*256+Flash[Flash_p+15];
			LCD_calc_User_id();
		}else{
			for(i=7; i<15; i++)
				LCD_buf[i]=Flash[Flash_p+i];
		}
		LCD_buf[15]=' ';
#endif
		LCD_writeline(4);
		Write_Record();
		AUX_OUT_ON
		AUX_counter=25;	// AUX output for 0.5s
	}else{
		Send_buf[12]=Send_buf[13]=0;
#ifdef	CHINESE
		mystrcpy("  未登记 ID卡!  ");
#else
		mystrcpy("Unknown ID Card!");
#endif
		LCD_writeline(4);
	}
	Timer_20ms2=100;
	b_20ms2=0;
	for(i=18; i<22; i++)
		Send_buf[i]=0;
	if(b_Serial_mode==RS232_MODE)
		Send_Data();
}

⌨️ 快捷键说明

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