📄 yibiao1.c
字号:
if(one==1)
{
xs_shu(6,6,yi_1+8*2);
xs_shu(6,12,yi_1+8*0);
}
if ((year!=year1)||(one==1))
{
temp=year;
xs_shu(6,24,clr);
xs_shu(6,18,clr);
xs_shu(6,24,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,18,yi_1+(temp&0x0f)*8);
}
/*月*/
if ((month1!=month)||(one==1))
{
temp=month;
xs_shu(6,42,clr);
xs_shu(6,36,clr);
xs_shu(6,42,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,36,yi_1+(temp&0x0f)*8);
}
/*日*/
if ((day1!=day)||(one==1))
{
temp=day;
xs_shu(6,60,clr);
xs_shu(6,54,clr);
xs_shu(6,60,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,54,yi_1+(temp&0x0f)*8);
}
/*时*/
if ((hour1!=hour)||(one==1))
{
temp=hour;
xs_shu(6,78,clr);
xs_shu(6,72,clr);
xs_shu(6,78,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,72,yi_1+(temp&0x0f)*8);
}
/*:*/
if (one==1)
xs_shu(6,85,yi_1+10*8);
/*分*/
if ((minutes1!=minutes)||(one==1))
{
temp=minutes;
xs_shu(6,96,clr);
xs_shu(6,90,clr);
xs_shu(6,96,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,90,yi_1+(temp&0x0f)*8);
}
/*:*/
if (one==1)
xs_shu(6,103,yi_1+10*8);
/*秒*/
if ((second1!=second)||(one==1))
{
temp=second;
xs_shu(6,114,clr);
xs_shu(6,108,clr);
xs_shu(6,114,yi_1+(temp&0x0f)*8);
temp>>=4;
xs_shu(6,108,yi_1+(temp&0x0f)*8);
}
second1=second;
minutes1=minutes;
hour1=hour;
day1=day;
month1=month;
year1=year;
one=0;
}
unsigned char password(bit aa)/*aa=0 员工密码 aa=1 用户密码*/
{
// unsigned charkey_buf_p=0;
huakuang(3,6,2);
key_buf_p=0;
while(1)
{
key=getkey();
if ((key>=0)&&(key<=9)&&(key_buf_p<4))
{
key_buf[key_buf_p]=key;
xs_shu(3,2*16+key_buf_p*8+1,xin);
key_buf_p++;
}
if(key=='l')
{
if(key_buf_p>0)
{
xs_shu(3,2*16+(key_buf_p-1)*8+1,clr);
key_buf_p--;
}
else
return 2;
}
if (key=='k')
{
astobcd(4);
if (aa==0)
if (strcomp(key_buf,ygmm,2))
return 0x01;/*密码正确返回*/
else
return 0x00;/*密码错误返回*/
else
if (strcomp(key_buf,yhmm,2))
return 0x01;/*密码正确返回*/
else
return 0x00;/*密码错误返回*/
}
if (key=='t')
{
return 2;/*退卡返回*/
}
xs_time();
}
}
unsigned char pass_card()
{
huakuang(3,6,2);
key_buf_p=0;
while(1)
{
key=getkey();
if ((key>=0)&&(key<=9)&&(key_buf_p<12))
{
key_buf[key_buf_p]=key;
xs_shu(3,2*16+key_buf_p*8+1,xin);
key_buf_p++;
}
if(key=='l')
{
if(key_buf_p>0)
{
xs_shu(3,2*16+(key_buf_p-1)*8+1,clr);
key_buf_p--;
}
}
if (key=='k')
{
astobcd(key_buf_p);
pin_dat[0]=key_buf_p;
pin_dat[1]=key_buf[0];
pin_dat[2]=key_buf[1];
pin_dat[3]=key_buf[2];
pin_dat[4]=key_buf[3];
pin_dat[5]=key_buf[4];
return 0x0;
}
if (key=='t')
return 0x02;/*退卡返回*/
xs_time();
}
}
unsigned char sendcard()
{
unsigned char idata card_err_state; //卡片错误状态
unsigned char idata wait_counter; //卡片连续等待计数器
unsigned char idata rec_data; //接收一字节缓冲
sendcard_st: //重发地址
send(0,5); //发送5字节命令头
wait_counter=3; // 可以连续接收3次
do_byte_state: //状态字节处理地址
card_err_state=0;
recv_buf[0]=0xff;
card_err_state =recv(0,1); //接收一字节
if (card_err_state == 0) //接收正确?
{
// de100u(); //接收正确
rec_data=recv_buf[0]; //取一字节
switch (rec_data)
{
case 0x60: //卡片要求延长等待
if (wait_counter--==0) //连续三次?
{
card_err_state=0x80; //连续三次
break; //退出
}
else goto do_byte_state;
case 0x6c: //卡片要求安后续一字节为Le,重发命令头
card_err_state =recv(0,1); //接收后续字节
send_buf[4]=recv_buf[0]; //重置Le
de100u();
goto sendcard_st; //重发
case 0x61:
card_err_state =recv(0,1); //卡片要求取XX字节
if (card_err_state == 0)
{
card_err_state =getcard_data(); //按卡片要求取XX 字节
}
break; //退出
default : //前者都不是 继续
rec_data=recv_buf[0];
if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90)) card_err_state =recv(1,1); //卡片返回6X 9X 取一字节状态码 退出
else if (recv_buf[0]==send_buf[1]) card_err_state =recv(0,(send_buf[4]+2)); //卡片要求接收全部剩余字节
else if ((~(recv_buf[0])+1)==send_buf[1]) //卡片要求接收一字节后等待下一个状态字
{
card_err_state =recv(0,1); //接收一字节
if (card_err_state==0) //接收正确?
{ //接收正确
if (wait_counter--==0) card_err_state=0x81; //连续三次 退出
else goto do_byte_state; //不足三次 等待下一个状态字
}
}
break; //退出 switch
}
}
return(card_err_state); //返回错误状态
}
unsigned char sendcard1()
{
unsigned char idata card_err_state; //卡片错误状态
unsigned char idata wait_counter; //卡片连续等待计数器
unsigned char idata rec_data; //接收一字节缓冲
unsigned char idata data_le; //数据的长度
unsigned char idata data_adr; //数据的地址
data_le=send_buf[4];
data_adr=5;
send(0,5); //发送5字节命令头
wait_counter=3; // 可以连续接收3次
do_byte_state: //状态字节处理地址
card_err_state=0;
recv_buf[0]=0xff;
card_err_state =recv(0,1); //接收一字节
if (card_err_state == 0) //接收正确?
{
de100u(); //接收正确
rec_data=recv_buf[0]; //取一字节
if (rec_data==0x60) //卡片要求延长等待
{
if (wait_counter--==0) //连续三次?
{
card_err_state=0x82; //连续三次
}
else goto do_byte_state;
}
else if (rec_data==0x90)
{
card_err_state=recv(1,1);
goto send_card1_end ;
}
else if (rec_data==send_buf[1])
{
send(data_adr,data_le);
}
else if (((~rec_data)+1)==send_buf[1])
{
send(data_adr,data_le);
data_adr=data_adr+1;
data_le=data_le-1;
if (data_le!=0) goto do_byte_state;
}
else
{
card_err_state=0x83;
goto send_card1_end;
}
}
wait_counter=3;
de100u();
do_byte_state1:
if ((card_err_state=recv(0,1))==0)
{
rec_data=recv_buf[0];
if (rec_data==0x60) //卡片要求延长等待
{
if (wait_counter--==0) //连续三次?
{
card_err_state=0x84; //连续三次
}
else goto do_byte_state1;
}
else if (rec_data==0x61)
{
if ((card_err_state=recv(0,1)) == 0)
{
card_err_state =getcard_data(); //按卡片要求取XX 字节
}
}
else if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90)) card_err_state =recv(1,1);
else card_err_state=0x85;
}
send_card1_end:
return(card_err_state); //返回错误状态
}
unsigned char sendcard2()
{
unsigned char idata card_err_state; //卡片错误状态
unsigned char idata wait_counter; //卡片连续等待计数器
unsigned char idata rec_data; //接收一字节缓冲
unsigned char idata data_le; //数据的长度
unsigned char idata data_adr; //数据的地址
data_le=send_buf[4];
data_adr=5;
send(0,5); //发送5字节命令头
wait_counter=3; // 可以连续接收3次
do_byte_state: //状态字节处理地址
card_err_state=0;
recv_buf[0]=0xff;
card_err_state =recv(0,1); //接收一字节
if (card_err_state == 0) //接收正确?
{
de100u(); //接收正确
rec_data=recv_buf[0]; //取一字节
if (rec_data==0x60) //卡片要求延长等待
{
if (wait_counter--==0) //连续三次?
{
card_err_state=0x86; //连续三次
}
else goto do_byte_state;
}
else if (rec_data==0x90)
{
card_err_state=recv(1,1);
goto send_card1_end ;
}
else if (rec_data==send_buf[1])
{
send(data_adr,data_le);
}
else if (((~rec_data)+1)==send_buf[1])
{
send(data_adr,data_le);
data_adr=data_adr+1;
data_le=data_le-1;
if (data_le!=0) goto do_byte_state;
}
else
{
card_err_state=0x87;
goto send_card1_end;
}
}
wait_counter=3;
de100u();
do_byte_state1:
if ((card_err_state=recv(0,1))==0)
{
rec_data=recv_buf[0];
if (rec_data==0x60) //卡片要求延长等待
{
if (wait_counter--==0) //连续三次?
{
card_err_state=0x88; //连续三次
}
else goto do_byte_state1;
}
else if (rec_data==0x61)
{
if ((card_err_state=recv(0,1)) == 0)
{
card_err_state =getcard_data(); //按卡片要求取XX 字节
}
}
else if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90)) card_err_state =recv(1,1);
else card_err_state=0x89;
}
send_card1_end:
return(card_err_state); //返回错误状态
}
unsigned char getcard_data()
{
unsigned char idata card_err_state; //卡片错误状态
send_buf[0]=0;
send_buf[1]=0xc0;
send_buf[2]=0;
send_buf[3]=0;
send_buf[4]=recv_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -