📄 card_adddel.c
字号:
/*****卡号重复错误******/
void cdsameerror(uint n)
{
uint i;
uint j=0;
TX_DATA[0] =0XAA;
TX_DATA[1] =0X03;
TX_DATA[2] =0X03;
i =n/4;
TX_DATA[3] =0x00;
TX_DATA[4] =(i>>8) & 0xff;
TX_DATA[5] =i & 0xff;
/****计算和值******/
for(i=0; i<n+6; i++)
{
j += TX_DATA[i];
}
j &= 0xff;
TX_DATA[n+6] = j;
tx_len = n+7;
FLAG |=gb_tx;
}
/****接收正常*****/
void card_receive_ok()
{
TX_DATA[0] = 0XAA;
TX_DATA[1] = 0X03;
TX_DATA[2] = 0X01;
TX_DATA[3] = 0XAE;
tx_len =4;
FLAG |=gb_tx;
}
/***********/
/**********/
/****增加卡号*****/
void card_add(ulong addr_pre, ulong ncount)
{
uchar m;
uchar cardbuf[4];
ulong j;
ulong addr39;
/***查询新增的卡号是否已存在,查询次数为增加卡号的数目****/
if(ncount>0)
{
addr39 = addr_pre; //查询从正式卡或者巡更卡的存储首地址开始
for(j=0; j<ncount; j++) //循环以已存储的卡号数目为终止
{
for(m=0; m<4; m++) //读取一个完整的卡号
{
cardbuf[m] =read040(addr39);
addr39++;
}
/***判断是否已存在,如果已存在,则记录到RX_DATA中,并置
标志位,通知卡号重复******/
if((cardbuf[0]==RX_DATA[6]) && (cardbuf[1]==RX_DATA[7])
&& (cardbuf[2]==RX_DATA[8]) && (cardbuf[3]==RX_DATA[9]))
{
TX_DATA[6] = RX_DATA[6];
TX_DATA[7] = RX_DATA[7];
TX_DATA[8] = RX_DATA[8];
TX_DATA[9] = RX_DATA[9];
FLAG1 |= gb_cdsame;
break;
}
}
}
/*如果卡号重复,则调用出错程序,赋值TX_DATA*/
if(FLAG1 & gb_cdsame)
{
cdsameerror(4);
}
else
{
addr39 =addr_pre + ncount*4;
for(j=6; j<10; j++)
{
write040pre();
write040(addr39, RX_DATA[j]);
addr39++;
}
}
}
/****增加正式卡号*****/
void card_addvip()
{
if(FLAG & gb_addvip)
{
FLAG &=~gb_addvip;
if(nvip<500)
{
ulong addr_pre=0x00;
card_add(addr_pre, nvip);
if(FLAG1 & gb_cdsame)
{
FLAG1 &=~gb_cdsame;
}
else
{
nvip +=1;
card_receive_ok();
FLAG1 |=gb_flashw;
}
}
}
}
/****增加巡更卡号*****/
void card_addnom()
{
if(FLAG & gb_addnom)
{
FLAG &=~gb_addnom;
if(nnom < 500)
{
ulong addr_pre;
addr_pre =0x1000; //巡更卡号从0x1000开始
card_add(addr_pre, nnom);
if(FLAG1 & gb_cdsame)
{
FLAG1 &=~gb_cdsame;
}
else
{
nnom +=1;
card_receive_ok();
FLAG1 |=gb_flashw;
}
}
}
}
/*****删除卡号处理程序******/
void deldeal()
{
if(FLAG1 & gb_deldeal)
{
FLAG1 &= ~gb_deldeal;
ulong i;
uchar cardbuf;
for(i=0; i<nvip*4; i++)
{
cardbuf = read040(i);
write040pre();
write040((i+0x70000),cardbuf);
}
for(i=0x1000; i<(nnom*4+0x1000); i++)
{
cardbuf = read040(i);
write040pre();
write040((i+0x70000),cardbuf);
}
erasesector040(0x0000);
if(addrbuf < 0x1000)
{
for(i=0; i<addrbuf; i++)
{
cardbuf = read040(i+0x70000);
write040pre();
write040(i,cardbuf);
}
for(i=addrbuf; i<(nvip-1)*4; i++)
{
cardbuf = read040(i+0x70004);
write040pre();
write040(i,cardbuf);
}
for(i=0x1000; i<(nnom*4+0x1000); i++)
{
cardbuf = read040(i+0x70000);
write040pre();
write040(i,cardbuf);
}
}
else
{
for(i=0; i<nvip*4; i++)
{
cardbuf = read040(i+0x70000);
write040pre();
write040(i,cardbuf);
}
for(i=0x1000; i<addrbuf; i++)
{
cardbuf = read040(i+0x70000);
write040pre();
write040(i,cardbuf);
}
for(i=addrbuf; i<((nnom-1)*4+0x1000); i++)
{
cardbuf = read040(i+0x70004);
write040pre();
write040(i,cardbuf);
}
}
addrbuf =0;
}
}
/****删除卡号*********/
void card_del(ulong add_pre, ulong ncount)
{
uchar m;
uchar cardbuf[4];
ulong j;
ulong addr39;
/***查询删除的卡号是否已存在,查询次数为增加卡号的数目****/
addr39 = add_pre; //查询从正式卡或者巡更卡的存储首地址开始
for(j=0; j<ncount; j++) //循环以已存储的卡号数目为终止
{
for(m=0; m<4; m++) //读取一个完整的卡号
{
cardbuf[m] =read040(addr39);
addr39++;
}
/***判断是否已存在,如果已存在,则记录地址。
如果不存在,则记录到TX_DATA中,并置标志位,通知卡号不存在******/
if(cardbuf[0]==RX_DATA[6] && cardbuf[1]==RX_DATA[7]
&& cardbuf[2]==RX_DATA[8] && cardbuf[3]==RX_DATA[9])
{
addrbuf = addr39-4;
break;
}
else if(addr39>=(ncount*4+add_pre))
{
TX_DATA[6] = RX_DATA[6];
TX_DATA[7] = RX_DATA[7];
TX_DATA[8] = RX_DATA[8];
TX_DATA[9] = RX_DATA[9];
FLAG1 |=gb_cdsame;
}
}
}
/****删除正式卡号*****/
void card_delvip()
{
if(FLAG & gb_delvip)
{
FLAG &=~gb_delvip;
ulong del_pre;
del_pre =0x00;
if(nvip==0)
{
FLAG1 |=gb_cdsame;
TX_DATA[6] = RX_DATA[6];
TX_DATA[7] = RX_DATA[7];
TX_DATA[8] = RX_DATA[8];
TX_DATA[9] = RX_DATA[9];
cdsameerror(4);
FLAG1 &=~gb_cdsame;
}
else
{
card_del(del_pre, nvip);
if(FLAG1 & gb_cdsame)
{
cdsameerror(4);
FLAG1 &=~gb_cdsame;
}
else
{
nvip -=1;
card_receive_ok();
FLAG1 |=gb_flashw;
FLAG1 |=gb_era7;
FLAG1 |=gb_deldeal;
}
}
}
}
/****删除巡更卡号*****/
void card_delnom()
{
if(FLAG & gb_delnom)
{
FLAG &=~gb_delnom;
FLAG &=~gb_delvip;
ulong del_pre;
del_pre =0x1000;
//addrrr =ncount_cardvip*4;
if(nnom==0)
{
FLAG1 |=gb_cdsame;
TX_DATA[6] = RX_DATA[6];
TX_DATA[7] = RX_DATA[7];
TX_DATA[8] = RX_DATA[8];
TX_DATA[9] = RX_DATA[9];
cdsameerror(4);
FLAG1 &=~gb_cdsame;
}
else
{
card_del(del_pre, nnom);
if(FLAG1 & gb_cdsame)
{
cdsameerror(4);
FLAG1 &=~gb_cdsame;
}
else
{
nnom -=1;
card_receive_ok();
FLAG1 |=gb_flashw;
FLAG1 |=gb_era7;
FLAG1 |=gb_deldeal;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -