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