📄 t_15693.c.bak
字号:
#include <stdio.h>
#include <stdlib.h>
#include <api.h>
#include <ExEH0218.h>
#include <contactless.h>
#include "common.h"
#define xqmaxNum 10000
short TI_ICODE2_save(long xqnum);
typedef struct
{
unsigned char uid[20];
unsigned char num[20];
} T_xq;
T_xq DateBuf[xqmaxNum]; //一万条记录
long cardcnt;
char retstr[20];
int xq_chang(long num) //编辑记录
{
BROWINFO INFO_sub;
int retint,j;
long m;
char ch;
T_xq * pnt;
T_xq * mk;
T_xq * mk1;
unsigned char menu_info[80];
strcpy(menu_info,"1.编辑 2.删除 3.退出 ");
if(cardcnt==0)
{
clr_scr();
DispStr_CE(0,0,"不可编辑",DISP_CENTER|DISP_CLRLINE);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 0;
}
INFO_sub.lPtr = 0;
INFO_sub.cPtr = 0;
INFO_sub.startLine = 0;
INFO_sub.dispLines = 3;
while(1)
{
clr_scr();
INFO_sub.iStr = menu_info;
INFO_sub.mInt = 3;
INFO_sub.lineMax = 16;
INFO_sub.sFont = 0;
INFO_sub.numEnable = 0;
INFO_sub.qEvent = EXIT_KEY_F1;
INFO_sub.autoexit = 0;
retint = brow_select(&INFO_sub);
switch( retint )
{
case 0: //编辑
while(!TI_ICODE2_save(num+1));
pnt=DateBuf+num*40; //计算地址
for(j=0;j<20;j++)
{
pnt->num[j]=retstr[j]; //存储号码
}
return 0;
break;
case 1: //删除
if(num<cardcnt-1)
{
for(m=num;m<cardcnt;m++)
{
mk=DateBuf+m*40; //计算地址
mk1=DateBuf+(m+1)*40; //计算地址
for(j=0;j<20;j++)
{
ch=mk1->uid[j]; //存储号码
mk->uid[j]=ch;
ch=mk1->num[j]; //存储号码
mk->num[j]=ch;
}
}
}
cardcnt--;
return 0;
break;
case 2:
default:
return 0;
break;
}
}
return 0;
}
//======================================================================
int take_num(void)
{
typ_msg_word msg;
int sendflag,j,i;
long xqcount;
char ch,dispstr1[20],dispstr2[20],dispstr[20];
T_xq * pnt;
if(cardcnt==0)
{
clr_scr();
DispStr_CE(0,0,"无可编辑数据",DISP_CENTER|DISP_CLRLINE);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 0;
}
else
{
clr_scr();
sprintf( dispstr, "共%d条,F1退出", cardcnt);
DispStr_CE(0,0,dispstr,DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,2,"2-上移",DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,4,"8-下移",DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,6,"0-编辑",DISP_CENTER|DISP_CLRLINE);
delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
}
xqcount=0;
while(1)
{
if(cardcnt==0)
{
clr_scr();
DispStr_CE(0,0,"无可编辑数据",DISP_CENTER|DISP_CLRLINE);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 0;
}
if(xqcount>cardcnt-1)
xqcount=cardcnt-1;
pnt=DateBuf+xqcount*40; //计算地址
for(j=0;j<20;j++)
{
dispstr1[j]=pnt->uid[j]; //存储号码
dispstr2[j]=pnt->num[j]; //存储号码
}
clr_scr();
sprintf( dispstr, "第%d条,F1退出", xqcount+1);
DispStr_CE(0,0,dispstr,DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,3,dispstr1,DISP_POSITION|DISP_CLRLINE);
DispStr_CE(0,5,dispstr2,DISP_POSITION|DISP_CLRLINE);
msg.s_word = sys_msg(SM_STAY_AWAKE);
if (msg.bits.key_available)
{
switch( KEY_read() )
{
case KEY_0:
case KEY_ENTER:
xq_chang(xqcount);
break;
case KEY_2: // up
case KEY_UP:
if(xqcount>0)
xqcount--;
break;
case KEY_8: // down
case KEY_DOWN:
if(xqcount<cardcnt-1)
xqcount++;
break;
case KEY_F1:
return 0;
}
}
}
return 0;
}
int test_RS232(void) // 串口测试
{
typ_msg_word msg;
typ_UART_stat_word Usw;
int sendflag,j,i;
long xqcount,k;
char ch,sendstr1[20],dispstr[20];
T_xq * pnt;
pnt=DateBuf;
if(cardcnt==0)
{
clr_scr();
DispStr_CE(0,0,"无数据传送",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 0;
}
xqcount=0;
clr_scr();
sprintf( dispstr, "共有%d条数据", cardcnt);
DispStr_CE(0,0,dispstr,DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,2,"退出[F1]",DISP_CENTER|DISP_CLRLINE);
UART_init(UART_232_ON|UART_ON|UART_8_DATA_BITS|UART_BAUD_38400);
UART_fcntl(UART_fcntl(UART_F_INQ)|UART_F_NO_CTS);
while(1)
{
msg.s_word = sys_msg(SM_STAY_AWAKE);
sendflag = 0;
memset( sendstr1, 0, 20 );
if (msg.bits.comm_data)
{
ch = (char)UART_get_char();
switch( ch)
{
case 'g':
sendflag = 1;
break;
case 'r':
sendflag = 2;
break;
case 'a':
xqcount = 0;
sendflag = 2;
break;
case 'q':
UART_init(UART_OFF);
return 0;
default:
sendflag = 0;
}
}
if (msg.bits.key_available)
{
switch( KEY_read() )
{
case KEY_F1:
UART_init(UART_OFF);
return 0;
}
}
if ( sendflag==1 )
{
sprintf(sendstr1, "[%d]", cardcnt);
for(i=0;i<20;i++)
{
UART_send_char(sendstr1[i]); //发出一个字符
do{
Usw.l_word = UART_stat();
} while (Usw.bits.out_busy);
}
}
if ( sendflag==2 )
{
pnt=DateBuf+xqcount*40; //计算地址
sendstr1[0]='[';
sendstr1[19]=']';
for(j=0;j<16;j++)
{
sendstr1[j+1]=pnt->uid[j]; //存储号码
}
for(j=0;j<20;j++)
{
UART_send_char(sendstr1[j]); //发出一个字符
do{
Usw.l_word = UART_stat();
} while (Usw.bits.out_busy);
}
for(j=0;j<16;j++)
{
sendstr1[j+1]=pnt->num[j]; //存储号码
}
for(j=0;j<20;j++)
{
UART_send_char(sendstr1[j]); //发出一个字符
do{
Usw.l_word = UART_stat();
} while (Usw.bits.out_busy);
}
sprintf( dispstr, "发送%d条", xqcount+1);
DispStr_CE(0,6,dispstr,DISP_CENTER|DISP_CLRLINE);
k=xqcount+1;
if(k<cardcnt)
xqcount++;
else
{
clr_scr();
DispStr_CE(0,0,"发送完毕",DISP_CENTER|DISP_CLRSCR);
UART_init(UART_OFF);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 0;
}
}
}
return 0;
}
short TI_ICODE2_serial(void)
{
Tag_Info tag; //标签数据结构和编码,8bits
short retshort;
unsigned char trycnt,i;
unsigned char read_ok = 0;
unsigned char hintstr1[20];
unsigned char hintstr2[20];
unsigned char hintstr3[20];
unsigned char hintstr4[20];
unsigned char tmpbuf[20];
T_xq * pnt;
if(Get_Language()==LANG_CHN)
{
strcpy(hintstr1,"请在%d秒内刷卡");
strcpy(hintstr2,"未读到合法卡!");
strcpy(hintstr3,"找到%d张卡");
}
else
{
strcpy(hintstr1,"put card:%d sec");
strcpy(hintstr2,"no legal card");
strcpy(hintstr3,"Total %d cards");
}
clr_scr();
RCX_Init(CARD_TYPE_15693STD); //初始化卡
memset(tag.UID,0,8); //清0
SPT_set(1); //延时
for ( trycnt=11; trycnt>0; ) //十秒钟十次的读卡
{
if(!SPT_read())
{
sprintf(tmpbuf,hintstr1,--trycnt);
DispStr_CE(0,0,tmpbuf,DISP_POSITION|DISP_CLRLINE);
SPT_set(64);
}
retshort = ISO15693_FindOneCard(0x26, 0x00, &tag);
if ( retshort==RCX_OK )
{
read_ok = 1; //读到卡
break;
}
}
clr_scr(); //清屏
if ( !read_ok ) //没有读到卡,退出
{
warning_beep(1);
DispStr_CE(0,3,hintstr2,DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
return 1;
}
retshort = ISO15693_StayQuiet(0x22,tag.UID); //设置静默
sprintf(tmpbuf,hintstr3,cardcnt+1);
DispStr_CE(0,0,tmpbuf,DISP_CENTER|DISP_CLRLINE);
for(i=0; i<8; i++)
{
sprintf(tmpbuf+2*i,"%02X",tag.UID[i]); //读到的UID号码
}
warning_beep(0);
DispStr_CE(0,2,tmpbuf,DISP_POSITION); //显示
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
while(!TI_ICODE2_save(cardcnt+1));
pnt=DateBuf+cardcnt*40; //计算地址
strcpy(pnt->uid,tmpbuf); //存储号码
strcpy(pnt->num,retstr); //存储号码
if(cardcnt<xqmaxNum)
cardcnt++;
else
{
DispStr_CE(0,3,"数据太多,请清除",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
}
RCX_Close();
return 0;
}
short TI_ICODE2_save(long xqnum)
{
short ret,i;
GETSTR_PARAM gs;
unsigned char hintstr3[20];
unsigned char tmpbuf[20];
clr_scr();
strcpy(hintstr3,"输入%d卡的编码:");
sprintf(tmpbuf,hintstr3,xqnum);
i=0;
memset(retstr,0,20);
DispStr_CE(0,0,tmpbuf,DISP_POSITION|DISP_CLRLINE);
gs.qx = 0;
gs.qy = 2; // 在第2行输入
gs.alpha = 1; // 允许字符输入
gs.nullEnable = 0; // 不允许输入空字符串
gs.sFont = 0; // 7x9大字体
gs.pPrompt = ""; // 无提示语句
gs.csChar = '_'; // 光标字符‘_’
gs.pwChar = 0;
gs.spChar = '.';
gs.pStr = retstr; // 输入的密码放入retstr中
gs.maxNum = 16; // 最多允许16个字符
gs.minNum = 0; // 无最少字符数限制
gs.minValue = -1; // 无最小值限制
gs.maxValue = -1; // 无最大值限制
gs.retNum =0; // 无初始值
gs.autoexit = 0; // 不使用自动退出
gs.qEvent = 0; // 默认F1退出
ret = huGetStr_E(&gs);
if (!ret)
{
i=1;
}
return i;
}
short WaitYes(void)
{
typ_msg_word msg;
clr_scr();
DispStr_CE(0,0,"数据清除?",DISP_CENTER|DISP_CLRLINE);
DispStr_CE(0,3,"F1--确认",DISP_POSITION|DISP_CLRLINE);
DispStr_CE(0,5,"F2--取消",DISP_POSITION|DISP_CLRLINE);
while(1)
{
msg.s_word = sys_msg(SM_STAY_AWAKE);
if (msg.bits.key_available)
{
switch( KEY_read() )
{
case KEY_F1:
cardcnt = 0;
clr_scr();
DispStr_CE(0,1,"数据清除完毕",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 3,EXIT_KEY_ALL, 0 );
return 0;
break;
case KEY_F2:
clr_scr();
return 0;
break;
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -