📄 11t6_sc.c
字号:
txbuff[17]=0x0D;
for(i=0;i<18;i++)
{
UART_PutByte(txbuff[i]);
}
//;--------------------------------------------------------------------
//; Right: 3C 02 00 00 BCC 0D
//; Error: 3C 01 FF(错误代码) BCC 0D
//;--------------------------------------------------------------------
for(i=0;i<6;i++)
{
rxbuff[i]=UART_GetByte();
if(rxbuff[0]!=0x3C)i=0;
if(rxbuff[i]==0x0D)break;
}
if(rxbuff[0]!=0x3C)goto t113;
if(rxbuff[1]!=0x02)goto t113;
if(rxbuff[2]!=0x00)goto t113;
if(rxbuff[3]!=0x00)goto t113;
if(rxbuff[5]!=0x0d)goto t113;
t113: rxbuff[6]=0;
for(i=0;i<4;i++)rxbuff[6]^=rxbuff[i];
if(rxbuff[2]==0)
if(rxbuff[4]==rxbuff[6])
CardStatus=0x01;
}
/*--------------------------------------------------------------------
FUNCTION: Read_Card,读指定块数据
INPUT: uchar BlockNo,uchar *CardDataBuf
OUTPUT: 16byte CardData,1byte CardStatus
--------------------------------------------------------------------*/
/**************************************************
四、 读指定块数据
;command:3C 04 01 66 00(绝对块号) 00 BCC 0D
**************************************************/
void Read_Card(uchar BlockNo_,uchar *CardDataBuf_)
{ uchar i;
uchar txbuff[8];
uchar rxbuff[22];
//t114:
CardStatus=0;
txbuff[0]=0x3C;
txbuff[1]=0x04;
txbuff[2]=0x01;
txbuff[3]=0x66;
txbuff[4]=BlockNo_;
txbuff[5]=0x00;
txbuff[6]=0;
for(i=0;i<6;i++)txbuff[6]^=txbuff[i];
txbuff[7]=0x0D;
for(i=0;i<8;i++)
{
UART_PutByte(txbuff[i]);
}
//;--------------------------------------------------------------------
//; Right: 3C 12 00 DATA0~DATA15 BCC 0D
//; Error: 3C 01 FF(错误返回代码) BCC 0D
//;--------------------------------------------------------------------
//;;;;;;
for(i=0;i<21;i++)
{
rxbuff[i]=UART_GetByte();
if(rxbuff[0]!=0x3C)i=0;
if(rxbuff[i]==0x0D)break;
}
if(rxbuff[0]!=0x3C)goto t114;
if(rxbuff[1]!=0x12)goto t114;
if(rxbuff[2]!=0x00)goto t114;
t114: rxbuff[21]=0;
for(i=0;i<19;i++)
rxbuff[21]^=rxbuff[i];
if(rxbuff[19]==rxbuff[21])
if(rxbuff[1]==0x12) //成功取卡中的值
{ CardStatus=0x01;
for(i=0;i<16;i++)
*CardDataBuf_++=rxbuff[3+i]; //取卡数据
}
}
/*--------------------------------------------------------------------
FUNCTION: Write_Card,向指定块写数据
INPUT: uchar BlockNo,uchar *CardDataBuf
OUTPUT: 1byte CardStatus
--------------------------------------------------------------------*/
/**************************************************
五、 向指定块写数据
command:3C 13 01 67 00(绝对块号) DATA0~DATA15 BCC 0D
***************************************************/
void Write_Card(uchar BlockNo_,uchar *CardDataBuf_)
{
uchar i;
uchar txbuff[23];
uchar rxbuff[7];
//i=BlockNo_;
//i=*CardDataBuf_;//
//t115:
CardStatus=0;
txbuff[0]=0x3C;
txbuff[1]=0x13;
txbuff[2]=0x01;
txbuff[3]=0x67;
txbuff[4]=BlockNo_;
txbuff[4]=BlockNo_; //block
for(i=0;i<16;i++)
txbuff[5+i]=*CardDataBuf_++; //待写数据
txbuff[21]=0;
for(i=0;i<21;i++)
txbuff[21]^=txbuff[i]; //BCC
txbuff[22]=0x0D;
for(i=0;i<23;i++)
{
UART_PutByte(txbuff[i]);
}
//;--------------------------------------------------------------------
//;Write_Card return
//; Right: 3C 02 00 00 BCC 0D
//; Error: 3C 01 FF(错误返回代码) BCC 0D
//;--------------------------------------------------------------------
//;;;;;;
for(i=0;i<7;i++)
{
rxbuff[i]=UART_GetByte();
if(rxbuff[0]!=0x3C)i=0;
if(rxbuff[i]==0x0D)break;
}
if(rxbuff[0]!=0x3C)goto t115;
if(rxbuff[1]!=0x02)goto t115;
if(rxbuff[2]!=0x00)goto t115;
if(rxbuff[3]!=0x00)goto t115;
if(rxbuff[5]!=0x0d)goto t115;
t115:
rxbuff[6]=0;
for(i=0;i<4;i++)
rxbuff[6]^=rxbuff[i];
if(rxbuff[6]==rxbuff[4])
CardStatus=0x01;
}
//==Write_Card end==
/*--------------------------------------------------------------------
FUNCTION: TurnOff_Card,关卡
INPUT:
OUTPUT: CardStatus
--------------------------------------------------------------------*/
/**************************************************
八、 关卡,关掉的M1卡片,这个命令不仅仅是关卡,还让读卡电路恢复到主动寻卡状态
command:3C 04 01 68 00 00 51 0D
**************************************************/
void TurnOff_Card(void)
{ uchar i;
uchar txbuff[8];
uchar rxbuff[7];
//t116:
CardStatus=0;
txbuff[0]=0x3C;
txbuff[1]=0x04;
txbuff[2]=0x01;
txbuff[3]=0x68;
txbuff[4]=0x00;
txbuff[5]=0x00;
txbuff[6]=0x51;
txbuff[7]=0x0D;
for(i=0;i<8;i++)
UART_PutByte(txbuff[i]);
//;--------------------------------------------------------------------
//; Right: 3C 02 00 00 3E 0D
//; Error: 3C 01 FF (错误返回代码)BCC 0D
//;--------------------------------------------------------------------
//;;;;;;
for(i=0;i<6;i++)
{
rxbuff[i]=UART_GetByte();
if(rxbuff[0]!=0x3C)i=0;
if(rxbuff[i]==0x0D)break;
}
//if(rxbuff[0]!=0x3C)goto t116;
//if(rxbuff[1]!=0x02)goto t116;
//if(rxbuff[2]!=0x00)goto t116;
//if(rxbuff[3]!=0x00)goto t116;
//if(rxbuff[4]!=0x3e)goto t116;
if(rxbuff[5]!=0x0d)goto t116;
t116: rxbuff[7]=0;
for(i=0;i<4;i++)rxbuff[7]^=rxbuff[i];
if(rxbuff[7]==rxbuff[4])CardStatus=0x01;
}
/*--------------------------------------------------------------------
FUNCTION: SetRes,如果该step失败,将tmpResult中该步对应位调整为0,操作成功则不做改变
INPUT: CardStatus(step succed equal 0x01)
OUTPUT: tmpResult
--------------------------------------------------------------------*/
void SetRes(uchar RES,uchar NUM)
{
uchar temp1,temp2;
if(RES==0) //如果SETP操作失败(完成标记字节为零),调整tmpResult中对应该位为0态
{
temp1=0xFF>>NUM;
temp2=0xFF<<9-NUM;
temp1=temp1|temp2;
tmpResult=temp1&tmpResult;
}
}
/*--------------------------------------------------------------------
FUNCTION: display() ;操作成功步对应位绿灯亮;操作失败步对应位红灯亮
INPUT: tmpResult
OUTPUT: P1 AND P3.5 OR P3.7
--------------------------------------------------------------------*/
void display(uchar DispData)
{ P1=DispData; //操作成功步对应位亮
GREEN_LINE=0; //绿灯亮
delay10ms(20);
GREEN_LINE=1; //绿灯灭
P1=~DispData&0xfc; //操作失败步对应位亮
RED_LINE=0; //红灯亮
delay10ms(30);
RED_LINE=1; //红灯灭
}
/*--------------------------------------------------------------------
FUNCTION: led_cyc_on()
INPUT:
OUTPUT:
--------------------------------------------------------------------*/
//void led_cyc_on(void)
//{
// uchar i,Ddata=0x80;
// P1=0x00;
// GREEN_LINE =1;
// RED_LINE=1;
// delay10ms(10);
// GREEN_LINE=0;
// for(i=0;i<8;i++)
// {
//
// P1=_cror_(Ddata,i);
// delay10ms(10);
// }
/* GREEN_LINE=1;
RED_LINE=0;
Ddata=0x01;
for(i=0;i<8;i++)
{
P1=_crol_(Ddata,i);
delay10ms(20);
}*/
// GREEN_LINE =1;
// RED_LINE=1;
//}
//**************************************************
void wangdianshezhi(uchar *CardNo)
{
uchar CardBlockNo,i;
//uchar data CardNo[4];
uchar CardDataBuf[16];
uchar data CardBlockKey[6];
uchar BlockKeyAorB=0;//A套密码
for(i=0;i<6;i++) CardBlockKey[i]=0xff;
//for(i=0;i<4;i++) CardNo[i]=i+1;
//读块4
jixudukuai4:
CardBlockNo=0x04;
Psd_Verify(CardBlockKey,BlockKeyAorB,CardBlockNo,CardNo);
if (CardStatus)
{
CardBlockNo=0x04;
Read_Card(CardBlockNo,CardDataBuf);
//for (i=0;i<16;i++)
//sen(CardDataBuf[i]);
//sen(CardDataBuf[0]);
//sen(CardDataBuf[1]);
};
if (CardStatus)
{
writertc(wangdiangaodizhi,CardDataBuf[0]);
writertc(wangdiandidizhi,CardDataBuf[1]);
// sen(readrtc(wangdiangaodizhi));
// sen(readrtc(wangdiandidizhi));
}
else
goto jixudukuai4;
}
void wangdianpanduan(uchar *CardNo)
{
uchar BlockNo,CardBlockNo,i,j,k;
//uchar data CardNo[4];
uchar CardDataBuf[16];
uchar data CardBlockKey[6];
uchar BlockKeyAorB=0;//A套密码
bit douweiling;
for(i=0;i<6;i++) CardBlockKey[i]=0xff;
//for(i=0;i<4;i++) CardNo[i]=i+1;
//读取第4块
CardBlockNo=0x04;
Psd_Verify(CardBlockKey,BlockKeyAorB,CardBlockNo,CardNo);
Read_Card(CardBlockNo,CardDataBuf);
//如果是注册用户则读取第C块
if (CardDataBuf[0]==readrtc(wangdiangaodizhi) && CardDataBuf[1]==readrtc(wangdiandidizhi)) //如果是启动卡
{
//读取第C块
CardBlockNo=0x0c;
Psd_Verify(CardBlockKey,BlockKeyAorB,CardBlockNo,CardNo);
Read_Card(CardBlockNo,CardDataBuf);
//如果内容为16个 0 则 写数据 ,播放可以通过声音
douweiling=1;
for(i=0;i<16;i++)
{
if ( CardDataBuf[i]!=0)
douweiling=0;
};
if (douweiling==1)
{
//如果内容为16个 0 则 写数据 ,播放可以通过声音
BlockNo=0x0c;
CardDataBuf[2]=readrtc(0x08); //月
CardDataBuf[3]=readrtc(0x07); //日
CardDataBuf[4]=readrtc(0x04); //时
CardDataBuf[5]=readrtc(0x02); //分
CardDataBuf[6]=0x00; //00
CardDataBuf[7]=0x10; //10
CardDataBuf[15]=0x02; //02
CardDataBuf[0]==readrtc(wangdiangaodizhi);
CardDataBuf[1]==readrtc(wangdiandidizhi);
Write_Card(BlockNo,CardDataBuf);
TurnOff_Card(); //关闭卡片
// Read_Card(CardBlockNo,CardDataBuf);
for(k=0;k<2;k++) //响3声
{
beep=bofang;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
beep=tingzhi;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
};
keyitongxing=bofang;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
for (i=0;i<250;i++)
for(j=0;j<100;j++);
for (i=0;i<250;i++)
for (i=0;i<250;i++)
for(j=0;j<100;j++);
for(j=0;j<100;j++);
for(k=0;k<2;k++) //响3声
{
beep=bofang;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
beep=tingzhi;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
};
keyitongxing=bofang;
for (i=0;i<250;i++)
for(j=0;j<100;j++);
for (i=0;i<250;i++)
for(j=0;j<100;j++);
for (i=0;i<250;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -