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

📄 rfid_animalidmenu.c

📁 找的一个用U2270B开发的射频卡项目文件
💻 C
📖 第 1 页 / 共 3 页
字号:
// $Id: rfid_AnimalIDMenu.c,v 1.7 2006/10/25 21:37:56 tprescott Exp $
/*************************************************************
Project : rfid_AnimalIDMenu.c
Date    : 9/08/2006
Author  : Toby Prescott                   
Company : Atmel                           
Comments: AVR Studio GCC

Revisions: 
	v1.0 - Started
	v2.1 - 1/20/06 Changed to work with new LCD drive
	v2.2 - 3/8/06 Changed to Flash Srings to save SRAM
	v2.3 - 3/14/06 Fixing 5558 read/write routines
	       3/15/06 Adding 5530 Support  
	v2.4 - 4/6/06  Add new working 5558 R/W routines
	       5/19/06 Fixed mfg. ID error and display as dec
	v2.5 - 6/20/06 Add Animal ID section with Read and Write
	v2.6 - 9/19/06 Clean for WinAVR
*************************************************************/

#include "rfid_AnimalIDMenu.h" 

// Declare your global variables here
 
static unsigned char currentPos, nextPos=0;

unsigned char c64bAnimalIDCode[13] EEMEM ={0};

// *******************************************************************************
// Menu that Demonstrates Animal ID
// ******************************************************************************/
void animalID_Display(unsigned char Target_Tag, unsigned char Target_Reader)
{
    unsigned char temp1, temp2, temp3;
    temp1 = U2270_RFfield_Status();
	temp2 = U2270_OutputEn_Status();
	temp3 = U2270_Standby_Status();

    //**** Force Reader On/Active ****//
    U2270_RFfield(ON);
	U2270_OutputEn(ON);
	U2270_Standby(OFF);

    nextPos = 1;
    upDate = 0;

    uio_Release();
	while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
    {                                             
        // Menu Display 
		if(currentPos != nextPos || upDate == 0)
		{
			currentPos = nextPos;
			lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
	 		lcd_put_fString(lcd_fcenter(PSTR("Animal ID")), 2, PSTR("Animal ID"));
			lcd_box(SCRN_LEFT,10,SCRN_RIGHT,22);
	 		lcd_vert_line(10,SCRN_BOTTOM-1,63);
	 		lcd_put_fString(lcd_fcenter(PSTR("Write"))-31, 13, PSTR("Write"));
	 		lcd_put_fString(lcd_fcenter(PSTR("Read"))+31, 13, PSTR("Read"));
	 		
	 		lcd_put_fString(lcd_fcenter(PSTR("Write One"))-31, 24, PSTR("Write One"));
	 		lcd_put_fString(lcd_fcenter(PSTR("Read Lite"))+31, 24, PSTR("Read Lite"));
	 		lcd_put_fString(lcd_fcenter(PSTR("Write Lot"))-31, 33, PSTR("Write Lot"));
	 		lcd_put_fString(lcd_fcenter(PSTR("Read All "))+31, 33, PSTR("Read All "));
			
			if(currentPos == 1){lcd_invert_area(65,23,125,31);}
			else if(currentPos == 2){lcd_invert_area(65,32,125,40);}
			else if(currentPos == 3){lcd_invert_area(2,23,61,31);}
			else if(currentPos == 4){lcd_invert_area(2,32,61,40);}
			lcd_update(SCRN_TOP,SCRN_BOTTOM);
			upDate = 1; 
		}
		// end display  
	        
        uio_Get();
		switch(currentPos){
		case 1:
            if(cButton == IO_ENTER)
            {
            	animalID_ReadLite(Target_Tag,Target_Reader);
            	nextPos = 1;
            }
            else if(cButton == IO_LEFT){nextPos = 3;}
            else if(cButton == IO_RIGHT){;}
            else if(cButton == IO_DOWN){nextPos = 2;}
			break;
		case 2:
            if(cButton == IO_ENTER)
            {
            	animalID_ReadAll(Target_Tag,Target_Reader);
             	nextPos = 2;
            }
            else if(cButton == IO_LEFT){nextPos = 4;}
            else if(cButton == IO_UP){nextPos = 1;}
            else if(cButton == IO_RIGHT){;}
			break;
		case 3:
            if(cButton == IO_ENTER)
            {
            	if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70 || Target_Tag == 77){animalID_Write(Target_Tag,Target_Reader);}
            	nextPos = 3;
            }
            else if(cButton == IO_DOWN){nextPos = 4;}
            else if(cButton == IO_RIGHT){nextPos = 1;}
			break;
		case 4:
            if(cButton == IO_ENTER)
            {
            	//if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70){Display_WriteLotAnimalID();}
            	nextPos = 4;
            }
            else if(cButton == IO_UP){nextPos = 3;}
            else if(cButton == IO_RIGHT){nextPos = 2;}
			break;
		default:
			break;
		}
        if(cButton>0 && cButton<6){uio_Release();}
	}
	uio_Release();
    //**** Restore previous Reader Settings ****//
    U2270_RFfield(temp1);
	U2270_OutputEn(temp2);
	U2270_Standby(temp3);
}

// *******************************************************************************
// Menu that Demonstrates Writing Animal ID
// ******************************************************************************/
#define ANIMAL		0
#define XTRADATA	1
#define COUNTRY		2
#define COUNTRY1	20
#define COUNTRY2	21
#define COUNTRY3	22
#define COUNTRY4	23
#define NATIONAL	3
#define NATIONAL1	30
#define NATIONAL2	31
#define NATIONAL3	32
#define NATIONAL4	33
#define NATIONAL5	34
#define NATIONAL6	35
#define NATIONAL7	36
#define NATIONAL8	37
#define NATIONAL9	38
#define NATIONAL10	39
#define TRAILER		4
#define TRAILER1	40
#define TRAILER2	41
#define TRAILER3	42
#define TRAILER4	43
#define TRAILER5	44
#define TRAILER6	45
void animalID_Write(unsigned char Target_Tag, unsigned char Target_Reader)
{
    unsigned char i, j;
    unsigned char c64bIDCode[13]={0};
    unsigned char c64bIDCodetmp[13]={0};
    unsigned char tmpBlockDat0[4]={0};
    unsigned char tmpBlockDat1[4]={0};
    unsigned char tmpBlockDat2[4]={0};
    unsigned char tmpBlockDat3[4]={0};
    unsigned char tmpBlockDat4[4]={0};
    unsigned char sBlockDat[12]={0};
    unsigned char *sBlockDatPtr;
    unsigned char tmpData, tmpData1, progFlag = 0, end;
    unsigned long int test;
    unsigned int CRCval;
   	unsigned char fCountry[2] = {0x03,0xE7}, fTrailer[3] = {0}, fNational[5] = {0};

    upDate = 0;
    nextPos = ANIMAL;

    for(i=0; i<13; i++){c64bIDCodetmp[i] = eeprom_read_byte(&(c64bAnimalIDCode[i]));}
 	c64bIDCodetmp[7] = 0xF9;
 	c64bIDCodetmp[8] = c64bIDCodetmp[8]|0xC0;
 	
	uio_Release();			
	while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
    {                                             
	    // Menu Display 
		if(currentPos != nextPos || upDate == 0)
		{
			currentPos = nextPos;
 			lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
 			lcd_put_fString(lcd_fcenter(PSTR("Write Animal ID")), 2, PSTR("Write Animal ID"));             // Heading
	 		lcd_horz_line(SCRN_LEFT, SCRN_RIGHT, 11); 				// First Row Separator

        	if((c64bIDCodetmp[5]&0x80) == 0x80){end = lcd_put_fString(2, 13, PSTR("Animal:Yes"));}
        	else{end = lcd_put_fString(2, 13, PSTR("Animal:No"));} 
        	if(currentPos == ANIMAL){lcd_invert_area(1, 12, 37, 20);}
        	
        	if((c64bIDCodetmp[6]&0x01) == 0x01){end = lcd_put_fString(70, 13, PSTR("Data:Yes"));}
        	else{end = lcd_put_fString(70, 13, PSTR("Data:No"));} 
        	if(currentPos == XTRADATA){lcd_invert_area(69, 12, 93, 20);}
				
			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
	        tmpData = c64bIDCodetmp[7]>>6;
        	fCountry[0] = tmpData;
	        test = (unsigned int)(tmpData)<<8;
	        conv_Char2HexStr2(sBlockDatPtr, tmpData);
	        sBlockDatPtr += 2;
	        tmpData = c64bIDCodetmp[7]<<2;
	        tmpData = tmpData | (c64bIDCodetmp[8]>>6);
        	fCountry[1] = tmpData;
	        test = test + (unsigned int)(tmpData);
	        conv_Char2HexStr2(sBlockDatPtr, tmpData);
	        sBlockDatPtr += 2;
 			end = lcd_put_fString(2, 23, PSTR("Country:"));                       
 			end = lcd_put_String(end, 23, &sBlockDat[0]);  
	        	
			if(currentPos == COUNTRY){lcd_invert_area(1, 22, 43, 30);}
        	else if(currentPos == COUNTRY1){lcd_invert_area(49, 22, 55, 30);}
        	else if(currentPos == COUNTRY2){lcd_invert_area(55, 22, 61, 30);}
        	else if(currentPos == COUNTRY3){lcd_invert_area(61, 22, 67, 30);}
        	else if(currentPos == COUNTRY4){lcd_invert_area(67, 22, 73, 30);}

			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
  			ltoa(test, sBlockDatPtr,10);
 			end = lcd_put_fString(end, 23, PSTR(" ("));                       
 			end = lcd_put_String(end, 23, sBlockDatPtr); 
 			end = lcd_put_fString(end, 23, PSTR("d)"));                       
 	  
			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
   			tmpData = c64bIDCodetmp[8]&0x3F;
   			fNational[0] = tmpData;
    		for(j=0; j<5; j++)
    		{
	        	conv_Char2HexStr2(sBlockDatPtr, tmpData);
	        	sBlockDatPtr += 2;
	        	tmpData = c64bIDCodetmp[(unsigned char)(9+j)];
   				fNational[(unsigned char)(j+1)] = tmpData;
        	}
 			end = lcd_put_fString(2, 33, PSTR("National:"));                       
 			end = lcd_put_String(end, 33, &sBlockDat[0]);  
        	if(currentPos == NATIONAL){lcd_invert_area(1, 32, 49, 40);}
        	else if(currentPos == NATIONAL1){lcd_invert_area(55, 32, 61, 40);}
        	else if(currentPos == NATIONAL2){lcd_invert_area(61, 32, 67, 40);}
        	else if(currentPos == NATIONAL3){lcd_invert_area(67, 32, 73, 40);}
        	else if(currentPos == NATIONAL4){lcd_invert_area(73, 32, 79, 40);}
        	else if(currentPos == NATIONAL5){lcd_invert_area(79, 32, 85, 40);}
        	else if(currentPos == NATIONAL6){lcd_invert_area(85, 32, 91, 40);}
        	else if(currentPos == NATIONAL7){lcd_invert_area(91, 32, 97, 40);}
        	else if(currentPos == NATIONAL8){lcd_invert_area(97, 32, 103, 40);}
        	else if(currentPos == NATIONAL9){lcd_invert_area(103, 32, 109, 40);}
        	else if(currentPos == NATIONAL10){lcd_invert_area(109, 32, 115, 40);}
    		
			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
    		for(j=0; j<2; j++)
    		{
	        	conv_Char2HexStr2(sBlockDatPtr, c64bIDCodetmp[(unsigned char)(3+j)]);
	        	sBlockDatPtr += 2;
        	}
	        test = ((unsigned int)(c64bIDCodetmp[3])<<8) + (unsigned int)(c64bIDCodetmp[4]);
 			end = lcd_put_fString(2, 43, PSTR("CRC:"));                       
 			end = lcd_put_String(end, 43, &sBlockDat[0]);
 			
			CRCval = 0x0000;
 			for(i=0; i<10; i++)
 			{
// 				CRCval = CRC_CCITT16(CRCval, c64bIDCodetmp[i], 0x1021);
 				CRCval = CRC_CCITT16_Reverse(CRCval, c64bIDCodetmp[12-i], 0x8408);
 			}
 			  
			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
  			ltoa(test, sBlockDatPtr,10);
 			end = lcd_put_fString(end, 43, PSTR(" ("));                       
 			end = lcd_put_String(end, 43, sBlockDatPtr); 
 			end = lcd_put_fString(end, 43, PSTR("d)"));                       
 			if(CRCval == 0){end = lcd_put5x7_Char(end, 43, 30);}

			for(i=0; i<12; i++){sBlockDat[i] = 0;}
   			sBlockDatPtr = &sBlockDat[0];
    		for(j=0; j<3; j++)
    		{
	        	fTrailer[j] = c64bIDCodetmp[j];
	        	conv_Char2HexStr2(sBlockDatPtr, c64bIDCodetmp[j]);
	        	sBlockDatPtr += 2;
        	}
 			if((c64bIDCodetmp[6]&0x01) == 0x01)
			{
				end = lcd_put_fString(2, 53, PSTR("Trailer:"));                       
	 			end = lcd_put_String(end, 53, &sBlockDat[0]);				
	        	if(currentPos == TRAILER){lcd_invert_area(1, 52, 43, 60);}
	        	else if(currentPos == TRAILER1){lcd_invert_area(49, 52, 55, 60);}
	        	else if(currentPos == TRAILER2){lcd_invert_area(55, 52, 61, 60);}
	        	else if(currentPos == TRAILER3){lcd_invert_area(61, 52, 67, 60);}
	        	else if(currentPos == TRAILER4){lcd_invert_area(67, 52, 73, 60);}
	        	else if(currentPos == TRAILER5){lcd_invert_area(73, 52, 79, 60);}
	        	else if(currentPos == TRAILER6){lcd_invert_area(79, 52, 85, 60);}
			}	
			lcd_update(SCRN_TOP,SCRN_BOTTOM);
			upDate = 1; 
		}
		// end display  
	        	
        uio_Get();
		switch(currentPos){
		case ANIMAL:  	// Animal?		
            if(cButton == IO_ENTER){progFlag = 1;}
            else if(cButton == IO_UP){;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -