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

📄 rfid_demo.c

📁 lpc2368 source files
💻 C
字号:
/**********  LPC2368 PROGRAM FOR SAMPLE *************/
/********** 	RFID DEMO PURPOSE    	 *************/
/**********     VERSION 1.00V        *************/
/**********  DEVELOPED BY RAVINDRANATH 	 *************/
/**********  DATED : 08/02/08        *************/
//******************************************************************************/
#include "LPC23xx.h"    /* LPC23xx/24xx definitions */
#include "type.h"
//#include "irq.h"
#include "uart.h"
#include "spi.h"
#include <stdio.h>
#include "display.h"
#include "printer.h"
#include "timer.h"
#include "KeyBoard.h"
#include "rtc.h"
#include "dac.h"
#include "mifare.h"
/*****************************************************************************
   				Main Function  main()
*****************************************************************************/

void mainmenu(void);
void tsrdelay(void);
void rdrfid_card_det(void);
int call_req(void);
int init_reading_card(void);
int read_pass_card(unsigned char,unsigned int);
int wrt_crd(unsigned char ,char *);
void write_card_rfid(float );
void rdrfid_card_det(void);
void calculate(void);
void write_renew(void);
void show(void);
int input(unsigned char* ,unsigned int );

struct rfid_details
{
	unsigned char card_id[10];
	unsigned char vh_type[10];
	unsigned char vh_id[10];
	unsigned char vh_type_id[2];
	float amount;
};
struct rfid_details rfid;

unsigned int i,j,x;
unsigned long l;
unsigned char addr1,cnt1,cnt3,intrpt_flag,key_temp,key_temp1;
unsigned char ptmp[20],memptr[30],rd_data1[20],main_buff[30],phone[11];
unsigned char default_keyA[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
unsigned char mode_keyA = 0x00;
unsigned char mode_keyB = 0x04;


int main(void)
{
	unsigned char temp_pass;
  	DWORD i = 0;
	//BYTE ch;
	 
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Disp_initial();
	//Init_RTC();
	init_IrDA();
	//serial_open(0,9600);
	//serial_open(2,19200);
	//serial_open(1,9600);
	serial_open(3,9600);
  	prt_dw_flag = 0;
  	prt_dh_flag = 0;
	
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	clrscr();
    printf("SPOT BILLING MACHINE");
    gotoxy(2,1);
    printf(" RFID DEMO SOFTWARE ");
    gotoxy(3,1);
    printf("Dev By:-  ANALOGICS-");
    gotoxy(4,1);
    printf(" TECH INDIA LIMITED ");
	gotoxy(5,1);
    //printf("      NACHARAM      ");
	while(1)IrDA_send('R');
	//while(1){serial_send_string(0,"analogics");}
	//while(1){serial_send(2,0x42);serial_send_string(2,"R");}

	//for(i=0;i<4000000;i++);
	for(i=0;i<4000000;i++);  
	for(i=0;i<4000000;i++);
	mif_seq_no = 0x00;
	
	for(i=0;i<16;i++)
	{
		{	
	 		temp_pass = mif_load_key(mode_keyA, i, default_keyA);// cust_keyA);//
			 
			if(!(temp_pass))
			{
				clrscr();
			 	printf("FAILED AT(DA)");
				get_key();
			}

	 		temp_pass = mif_load_key(mode_keyB, i, default_keyA);// cust_keyB);//
			if(!(temp_pass))
			{
				clrscr();
			 	printf("FAILED AT(DB)");
				get_key();
			}
		
		}
	}
	 
	while(1)
	    mainmenu();
  		
}

void mainmenu(void)
{
	 unsigned char key;

	clrscr();

    
	for(x=0;x<200;x++)
		tsrdelay();	

	
	for(x=0;x<200;x++)
		tsrdelay();	

    for(x=0;x<=30;memptr[x++]=' ');

	key = 0;
	gotoxy(1,1);
	printf("F1 - WRITING TO CARD");
	gotoxy(2,1);
	printf("F2 - READ FROM CARD");
	key = get_key();

	switch(key)
    	{
        	case 1 : write_renew();
					 break;
            case 2 : show();
                     break;
			default: break;
		}
	
}

void tsrdelay(void)
{
     int tsi;
    for(tsi=0;tsi<300;tsi++);
}

int call_req(void)
{
    unsigned int val_int1;//,cnt; //,v1;

   //cnt=0;
   key_temp1 = 0;
   while(1)
   {
       val_int1=0;
//	   printf("out request");	
       if(mif_request() == 1)
          {
//			printf("request ok");
            if(mif_anti_col() == 1)
            {
//			  printf("anti colli ok");
		      val_int1=1;
              break; 
			}
        }
       if(val_int1==0)
        {
            gotoxy(4,1);
            printf("                   ");
			gotoxy(4,1);
//            for(i4=0;i4<2000;i4++);
            //cnt++;
        }
	   //key_temp1 = kbhit();	    
	   if(key_temp1 != 0)
			break;	

  //     if(cnt==30000)
   //       break;

   } //while1

   if(val_int1==1)
      return 1;
	else
		return 2;
   //if(cnt==30000)
    //  return 0;

}
void show(void)
{
	 unsigned char rf1;
	rf1 = 0;
	
	clrscr();
	printf("PLACE THE CARD NOW");
    rf1 = init_reading_card();	
	if(rf1 == 1)
	{
		clrscr();
		set_cursor(ROW1);
		printf("THE VALUE WRITTEN IS");
		gotoxy(2,1);
		for(i=0;i<20;i++)
			printf("%c",memptr[i]);
	
		//printf("%.20s",memptr);
		get_key();
	}
	return;
}

int init_reading_card(void)
{
     unsigned int x,val2,halt_flag;  //,addr1;

	for(x=0;x<50;x++)
		tsrdelay();	

    for(x=0;x<=200;memptr[x++]=' ');

    addr1=0x04;//location for default card id

    cnt1=1;
	cnt3=0;
    x=0;
    val2=0;
    while(1)
    {
       if(val2==0)
          val2=call_req();

       if(val2==1)
          	  val2=read_pass_card(addr1,((cnt1-1)*16));

       if(val2==1)
       {
         //addr1++;
          cnt1++;
       }
       else if(val2==0)
         {
            cnt3++;
            val2=0;  //by force
         }
	  else if(val2==2)	
	  	  break;

      if(cnt1==2)
         break;

       if(cnt3==30000)
          break;

   }

  halt_flag=0;
  while(1)
  {
     halt_flag=mif_halt();
     if(halt_flag == 1)
        break;
  }

   if(val2==1)
    {
      clrscr();
      printf("  ACCEPTED CARD ... ");
      
     }
	if (val2==1)
	   return 1;
	if (val2==2)
	   return 2;
    else
	   return 0;
}


int read_pass_card(unsigned char addr2,unsigned int rf_j)
{
    unsigned char rf_i,che;//,abc;

   //che = authenticate(addr2);
   //set_cursor(ROW4);
   //printf("                   ");
   che = mif_read_card(rd_data1,addr2);
   if (che==1)
   {
        clrscr();
        printf("READING CARD DATA ..");
        //strcpy(rd_data1,readrf(addr2));
		for(rf_i=0;rf_i<16;rf_i++)
        {
            memptr[rf_j]=rd_data1[rf_i];
            rf_j++;
        }

		return 1;
    }
   else
	   return 0;
}
/*
int wrt_crd(unsigned char addr,char *buff)
{
   if(authenticate(addr)==1)
    {
        if(writerf(addr,buff)==1)  //place
          {
		    clrscr();
            printf("WRITING DATA TO CARD",20);
            strcpy(rd_data1,readrf(addr));
            return 1;
       }
    }
   return 0;
}
*/
void write_renew(void)
{
	 unsigned char rs2;

	for(rs2=0;rs2<16;rs2++)
		main_buff[rs2] = ' ';
	clrscr();
	printf("ENTER VALUE TO WRITE");	
	i = input(main_buff,16);
	if(i==0)
		return;
	
//	(main_buff,16);
	
	write_card_rfid(0);

}

void write_card_rfid(float amt)
{
     unsigned int p_i,p_j;
     unsigned char val,haltflag;

    for(p_j=0;p_j<20;ptmp[p_j++]=' ');

	p_j=0;
    cnt1=1;
	amt = 0;

    for(p_i=0;p_i<16;p_i++)
    {
        ptmp[p_i] = main_buff[p_i];
    }

	clrscr();
	gotoxy(2,1);
	printf("PRESS ANY KEY ....");
	get_key();
	gotoxy(3,1);
	printf("PLACE THE CARD...");

    addr1=0x04;
    val=0;
	cnt3=0;
    while(1)            //size 15-->place
    {
       if(val==0)
          val=call_req();

       if(val==1)
         val=mif_write_card(ptmp,addr1);

       if(val==1)
         {                 
             cnt1++;
         }
       else
         {
           clrscr();
           printf("NO CARD DETECTED");
		   val=0;
		   cnt3++;
          // get_key();
         }

         if(cnt1==2)
            break;

		 if (cnt3==30000)
		    break;
    }

    haltflag=0;
    while(1)
    {
        haltflag=mif_halt();
        if(haltflag ==1)
           break;
    }

    clrscr();
    printf("WRITING TO CARD.... ");
    gotoxy(2,1);
    printf("COMPLETED SUCCESSFUL");
    
        
//    init_reading_card();
}


int input(unsigned char* ch,unsigned int n)
{
	 unsigned char keyf;

//	shift_flag=1;
    for(i=0;i<n;i++)
        ch[i] = ' ';

    j = 0;
    keyf = 0;
    keyf = _getkey();

    while((keyf != ENTER) && (j<n))
    {
        if ((keyf >= '0') && (keyf <= '9'))
        {
            ch[j] = keyf + 0x30;
            j++;
        }
        else
        if ((keyf != SHIFT) && (keyf != BKSP))
        {
            ch[j] = keyf;
            j++;
        }
        if (keyf == BKSP)
        {
            //Disp_cur_rev();
            //printf(" ");
            //Disp_cur_rev();
            j--;
        }
        if(keyf == ESC)
            break;
        keyf = _getkey();
    }

    if(keyf == ESC)
        return 0;

    if ((keyf >= '0') && (keyf <= '9'))
    {
        ch[j] = keyf + 0x30;
        j++;
    }
    if ((keyf == ENTER) && (j == 0))
    {
//        set_cursor(ROW3);
//        printf("   INVALID ENTRY   ");
//		gotoxy(3,20);
//		for(i=0;i<30000;i++);	
//		for(i=0;i<30000;i++);
//		for(i=0;i<30000;i++);
        return j;
    }
    //ch[j] = '\0';
    return j;
}

⌨️ 快捷键说明

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