⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_15693.c.bak

📁 RFID手持设备的读写代码,具有读RFID卡和进行数据管理的代码,同时还包含串口通讯的代码
💻 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 + -