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

📄 新建 文本文档.txt

📁 基于RC500射频卡读写模块的程序设计
💻 TXT
字号:
/*验证1:读卡序列号函数readsnr(cardsnr)*/

#include "main.h"
#include "rc500.h"
#include "lcd.h"
#include "led.h"
#include " VIIC_C51.H"
uchar idata t_buff[16],cardsnr[4];
uchar xdata buff[16];
unsigned long keynumber;
unsigned char disp_buff[6];
unsigned char keybuff[6];
uint tage;
bit	T0IR;		
bit dataconctrl;
bit keyflag;
uint consmeny;
////////////////////////////////////////////////////////////


time0() interrupt 1 using 1     /*50ms*/
{ 
 if(tage) 
     	tage--;	// Decrease timeout counter
   if(!tage) 
   {
	T0IR = 1;	// Set timeout state
   	TR0 = 0;
	ES=1;    //when the time is out,enable ES,can access eeprom this time

   }
   TF0 = 0;
      
  
}

startwait(uchar time)
{	tage=time*2;T0IR=0;
	TR0=1;ET0=1;EA=1;ES=0;	

}

void putbyte(uchar c)
{
SBUF=c;
while(!TI);TI=0;
}

void urtinit()       //串口初始化
{  TMOD = 0x21;			
   PCON = 0x80; 		
   SCON = 0x50; 		
   TH1=0xFD; TL1=0xFD; TR1=1;  //19200.n,8.1
   
}


void setmiyao(void)	
{
  char buff1[6],buff2[6];

 buff1[0]=0xff;	
 buff1[1]=0xff;	
 buff1[2]=0xff;	
 buff1[3]=0xff;
 buff1[4]=0xff;	
 buff1[5]=0xff;
 
 buff2[0]=0xff;	
 buff2[1]=0xff;	
 buff2[2]=0xff;	
 buff2[3]=0xff;
 buff2[4]=0xff;	
 buff2[5]=0xff;


 
 if(rc500_keys(KEYA,0x03,buff1,buff)==MI_OK) 
 { putbyte(0xaa);
 }

  if(rc500_keys(KEYB,0x03,buff2,buff)==MI_OK)
  { putbyte(0xbb);
 }

 
 
 
}

/************************************声响1子程序***********/
void alar(uint k,uchar h)
	{//TOGGLE_WD();
	while(h--)
		{_alarm=ON;
		  
	       delay_10ms(k);
	      _alarm=OFF;
	      delay_10ms(k);
		}
	}
////////////////////////////////////////////////////////////

uchar rcinit()
{
	alar(30,1);
	RC500_CS = TRUE;		// Enable the CS for RC500
	P1=P2=P3=0xff;
	IT0 = 1;    			// Config ext0 as edge trigger for RC500
	EX0 = 1; 			// Enable ext0 interrupt for RC500
	EA = TRUE;			// Enable all interrupts
	OpenIO();
	if(M500PcdConfig()!=MI_OK)
		{alar(30,1);
		  putbyte(0x11);
		 return(NOK);		
		}
	else
		{
		 alar(10,3);
	     putbyte(0x33);
		 return(OK);}
}

void keymovedisp(unsigned char key)
 {    unsigned char dat;
      dat=key;
      keybuff[5]=keybuff[4];
	  keybuff[4]=keybuff[3];
	  keybuff[3]=keybuff[2];
	  keybuff[2]=keybuff[1];
      keybuff[1]=keybuff[0];
      keybuff[0]=dat;
      disp_num(keybuff);
 }


uchar readmfandwrite()
{ uint d;
  uchar wrong;
 startwait(20);/*等待刷卡???*/   	
 while(!T0IR&&keyflag==0)
 { 
   //if(readsnr(cardsnr)==MI_OK)
//	{alar(50,1);	
	//	 putbyte(cardsnr[0]);
    //     putbyte(cardsnr[1]);
	//	 putbyte(cardsnr[2]);
	//	 putbyte(cardsnr[3]);
	//	}	
   //  break; 
   if(rc500(WRITE,KEYB,0x0e,t_buff,cardsnr)==MI_OK)	//有卡???
        { consmeny=100;
		  d=256*t_buff[1]+t_buff[0];
		 if(d>0&&d>=consmeny) //y!=0x00
	    { d=d-consmeny;
		  t_buff[1]=d>>8;
		  t_buff[0]=d;
		  wrong=M500PiccWrite(0x0e,t_buff);
		  if(wrong==MI_OK)
		   {putbyte(t_buff[1]);
		    putbyte(t_buff[0]);
		   }
		}
	
        
		alar(50,1);
       }

 }

 keyflag=1;
  return 1;
}

void key_pross()
{
 unsigned char key;
  key=get_key();  // 从键盘程序返回键盘值
	   if (key!=0xff)  //若无输入,则重新开始循环体
	   { if(0<=key&&key<=9)
	     { keymovedisp(key);      
	     }
		 else if(key==15)   //确定键
		 {keyflag=0; 
		  
		  keybuff[3]=0x03;
		  keybuff[2]=0x02;
		  keybuff[1]=0x01;
		  keybuff[0]=0x00;

		  consmeny=keybuff[3]*1000+keybuff[2]*100+keybuff[1]*10+keybuff[0];
	      disp_num_dot(keybuff);

		  putbyte(consmeny);
          consmeny=consmeny>>8;
          putbyte(consmeny);
		 }
		 else if(key==14)   //清零键
		 {keybuff[5]=0x00;
		  keybuff[4]=0x00;
		  keybuff[3]=0x00;
		  keybuff[2]=0x00;
		  keybuff[1]=0x00;
		  keybuff[0]=0x00;
		  disp_cls();
		 }

	   }
}

main()
{
 urtinit();
 putbyte(0x55);
 disp_int();
 rcinit();
 keyflag=1;
 setmiyao();
 while(1)
  	{ //key_pross();  
	 // readmfandwrite();
       if(rc500(READ,KEYB,0x0e,t_buff,cardsnr)==MI_OK)	//有卡???
     {
       	alar(50,1);
        }
	}
 
}

⌨️ 快捷键说明

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