📄 idcard.h
字号:
#define ENABLE_TIMER0 TR0=1;
#define DISABLE_TIMER0 TR0=0;
BYTE ch;
bit b_byte;
BYTE ID_state;
BYTE id_sum;
BYTE id_num[10];
long unsigned int id_card_num;
void Mydelay_50us(void) //延时大概50us
{
DISABLE_TIMER0 TH0=TL0=0; ENABLE_TIMER0
while(TL0<30);
}
void Serial_SimulatRe(void)
{
BYTE i;
b_byte=0;
if(!B_RFIN){ //起始位0,共扫描3次,
Mydelay_50us();
if(!B_RFIN){
Mydelay_50us();
if(!B_RFIN){
Mydelay_50us();
if(!B_RFIN){
Mydelay_50us();
}else {return;}// 出错,退出
}else{return;}
}else{return;}
}else{return;}
for(i=0;i<8;i++){ //扫描第一到第八位,每位扫描三次。
ch=ch>>1;
Mydelay_50us();
if(B_RFIN){ //为1,
Mydelay_50us();
if(B_RFIN){
Mydelay_50us();
if(B_RFIN){
Mydelay_50us();
ch=ch|0x80;
}else {return;} //出错,退出
}else{return;}
}else { //为0;
Mydelay_50us();
if(!B_RFIN){
Mydelay_50us();
if(!B_RFIN){
Mydelay_50us();
ch=ch&0x7f;
}else{return;} //出错,退出
}else {return;}
}
}
Mydelay_50us();
if(!B_RFIN){ //停止位
return;
}
b_byte=1;
}
void IT1_int(void) interrupt 2 //D0
{
EX1=0; //禁止init1中断
Serial_SimulatRe();//接收一BYTE,
if(b_byte){
switch(ID_state){// 判断命令,格式:0xff+0x06+ID(3B)+校验和
case 0:
if(ch==0xFF){//头,0xFF
ID_state=1;
}else ID_state=0;
break;
case 1: //命令
ID_buf[0]=ch;
ID_state=2;
break;
case 2: //ID
ID_buf[id_sum+1]=ch;
id_sum++;
if(id_sum==3){
id_sum=0;
ID_state=3;
}
break;
case 3: //效验和
if(ch==((ID_buf[0]+ID_buf[1]+ID_buf[2]+ID_buf[3])%0x100)){
ID_state=0;
b_Command_In=1;
EX1=0;
return;
}else{
ID_state=0;
id_sum=0;
}
break;
}
}else{
EX1=1;
return;
}
EX1=1; //开中断
}
void change(void)
{
id_card_num=ID_buf[1]*65536+ID_buf[2]*256+ID_buf[3];
id_num[0]=id_card_num/1000000000;
id_card_num=id_card_num%1000000000;
id_num[1]=id_card_num/100000000;
id_card_num=id_card_num%100000000;
id_num[2]=id_card_num/10000000;
id_card_num=id_card_num%10000000;
id_num[3]=id_card_num/1000000;
id_card_num=id_card_num%1000000;
id_num[4]=id_card_num/100000;
id_card_num=id_card_num%100000;
id_num[5]=id_card_num/10000;
id_card_num=id_card_num%10000;
id_num[6]=id_card_num/1000;
id_card_num=id_card_num%1000;
id_num[7]=id_card_num/100;
id_card_num=id_card_num%100;
id_num[8]=id_card_num/10;
id_num[9]=id_card_num%10;
}
void IDmodule_Process(void)
{
uchar i;
if(b_Command_In)
{
BEEP_ON
delay();
BEEP_OFF
b_Command_In=0;
change();
for(i=0;i<10;i++)
{
dishz(6,24+8*i,id_num[i]);
}
for(i=3;i>0;i--)
delay();
lcdclear(0x00,0x00);
xianshi();
EX1=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -