?? idcard.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 + -