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

📄 main.c

📁 这是一个rfid读卡器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
				SendBuffer[1]=~cmd;
				cStatus=1;
			}
		    break;

		case 0x12:     // Idle the card     //卡休眠    
            
			 for(cnt=0;cnt<3;cnt++)
	                {
			        	 cStatus =SPI_Write(CardHalt);          
		                 delay_10ms(2);				      // 延时等待模块执行命令
		                 cStatus =SPI_Read(cp);		  // 保存到数组cP
			             if((cStatus==SUCCESS)&&(cp[1]==HALT_CARD))
		                  {
		                        SendBuffer[0]=0x02;
								SendBuffer[1]=cmd;	
								cnt=5;	   //exit loop	   	
							  						    
		                    }
	                  
						 else
						{
							SendBuffer[0]=0x02;
							SendBuffer[1]=~cmd;
						}
					 }
			break;

		case 0x13:    // 自动寻卡 ,1字节数据,0x01 开启自动寻卡,0x00关闭      
			if(g_cReceBuf[2]==0x01)
			{
				for(cnt=0;cnt<3;cnt++)			
	            {
		            cStatus =SPI_Write(AutoCard);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==AUTOSEARCH))
					{
				    	SendBuffer[0]=0x02;
						SendBuffer[1]=cmd;
						cnt=5;	  				
									    	
						cStatus=0;
					}
					else
					{
						SendBuffer[0]=0x02;
						SendBuffer[1]=~cmd;
						cStatus=1;
					 }
				  }
				}
			
			 else if(g_cReceBuf[2]==0)
 			 {
			 	for(cnt=0;cnt<3;cnt++)
	            {
		            cStatus =SPI_Write(AutoOff);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==AUTOSEARCH))
					{
				    	SendBuffer[0]=0x02;
						SendBuffer[1]=cmd;
						cnt=5;	 		 			
								    	
						cStatus=0;
					}
					else
					{
						SendBuffer[0]=0x02;
						SendBuffer[1]=~cmd;
						cStatus=1;
					 }
				  }
			 
			 }
			 else
			{
				SendBuffer[0]=0x02;
				SendBuffer[1]=~cmd;
				cStatus=1;
			}
 			break; 
 			

		case 0x14:    // 蜂鸣器操作 ,1字节数据,0x1y 开启并使蜂鸣器响y声,0x0y关闭
			g_cBeeps=g_cReceBuf[2];
			SendBuffer[0]=0x02;
			SendBuffer[1]=cmd;
 			break;

		case 0x15:    // 蜂鸣器操作 ,设置蜂鸣器间隔,1字节数据 ,0.01s
			sp_freq=~g_cReceBuf[2];
			SendBuffer[0]=0x02;
			SendBuffer[1]=cmd;
 			break;
 			
 			
		case 0x19://读卡类型  //无数据    返回卡类型(2 bytes)	   
    
			  for(cnt=0;cnt<3;cnt++)
	            {
		            cStatus =SPI_Write(ComCardType);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==CARD_TYPE))	
		                { 	       
			               	SendBuffer[0]=4;
			        		SendBuffer[1]=cmd;
			        		SendBuffer[2]=cp[2];
			        		SendBuffer[3]=cp[3];

							cnt=5;
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				}
	            break;		
   

		case 0x20:     // Request,Anticoll,Select,return CardSerialNo(4 bytes)
			        // 寻卡,防冲突,选择卡    返回卡系列号(4 bytes)
			for(cnt=0;cnt<3;cnt++)
	            {
		            cStatus =SPI_Write(ComSearchCard);	  // 发送寻卡命令
		            delay_10ms(1);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取卡号并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==CARD_SN))
		                {	 		                      
									SendBuffer[0]=6;
									SendBuffer[1]=cmd;
									memcpy(&SendBuffer[2],&cp[2],4);
		                         
		                          cnt=5;   //exit loop
								 
		                    }		
		      
			else
			{
				SendBuffer[0]=0x02;
				SendBuffer[1]=~cmd;
				cStatus=1;
			}
			}
			break;	   
   	 
		case 0x21:		//读块             	   读写块时建议关闭自动寻卡功能可以提高读写的成功率!
						//数据内容  1 字节密钥标识+1 块号+6 字节密钥		  			
		
			for(cnt=0;cnt<3;cnt++)				 //	 
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==READ_BLOCK))	
		                { 	       
			               	SendBuffer[0]=0x12;
			        		SendBuffer[1]=cmd;	  
							memcpy(&SendBuffer[2],&cp[2],16);			        	
							cnt=5;
					
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 			
            
       		break;	
 
		case 0x22 :		//写块      
						//1 字节密钥标识+1 块号+6 字节密钥+16 字节写入数据
		
			for(cnt=0;cnt<3;cnt++)
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==WRITE_BLOCK))	
		                { 	       
			               	SendBuffer[0]=0x02;
			        		SendBuffer[1]=cmd;	  			        	
							cnt=5;
						
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 			
		
			break;

		case 0x23 :		//初始化钱包           
						//数据内容“1 字节密钥标识+1 块号+6 字节密钥+4 字节钱包”
		
			for(cnt=0;cnt<3;cnt++)
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==INIT_PURSE))	
		                { 	       
			               	SendBuffer[0]=0x02;
			        		SendBuffer[1]=cmd;	  			        	
							cnt=5;
					
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 			
			break;

		case 0x24:	   //读钱包
						//数据内容"1字节密钥标识+1 块号+6 字节密钥”
			
			for(cnt=0;cnt<3;cnt++)
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==READ_PURSE))	
		                { 	       
			               	SendBuffer[0]=0x06;
			        		SendBuffer[1]=cmd;	
							memcpy(&SendBuffer[2],&cp[2],4);  			        	
							cnt=5;
						
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 		
			break;


		case 0x25:	//钱包充值
					//数据内容“1 字节密钥标识+1 块号+6 字节密钥+4 字节增加值(低字节在前)”
		
			for(cnt=0;cnt<3;cnt++)
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==ADD_PURSE))	
		                { 	       
			               	SendBuffer[0]=0x02;
			        		SendBuffer[1]=cmd;	  			        	
							cnt=5;
						
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 		
            break;
                
 
		case 0x26:	//钱包扣款	   						
					//数据内容“11 字节密钥标识+1 块号+6 字节密钥+4 字节增加值(低字节在前)”
		
			for(cnt=0;cnt<3;cnt++)
	        {
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==DEC_PURSE))	
		                { 	       
			               	SendBuffer[0]=0x02;
			        		SendBuffer[1]=cmd;	  			        	
							cnt=5;
					
	            		}
						
		            else
		            {
		        			SendBuffer[0]=0x02;
		        			SendBuffer[1]=~cmd;
							cStatus=1;
		        	}
				} 		
            break;

     
		default:
			SendBuffer[0]=0x02;
			SendBuffer[1]=0xFF;	
		    break;

	}
	return cStatus;
}



/************************** main function start here *******************************/
void main()
{			
   	uchar idata cStatus;	    
    

	InitializeSystem();		   // 初始化系统      	


	RST_HY=0;			  // 复位模块 ,复位后等模块稳定再开始操作
    delay_1ms(1);          //延时0.5s等待模块初始化
	RST_HY=1;            
	LED_YELLOW=0;
	LED_GREEN=0;
	delay_10ms(50);	
   // LED_YELLOW=1;	
    LED_GREEN=1;   //LED light 0.5s

	while (1)
    	{
		
		    LED_GREEN=sig;     // detect module inturrupt ,if there is a card in ,then sig=0,unless you colse the auto search.				 
		     // KeyPress();	处理按键
			 // add your code here
		//检查命令标志
 	    if (g_bReceCommandOk)
	    {	
		    g_bReceCommandOk = FALSE;
			cStatus=uart_process();
			if(cStatus)
			{
				cStatus=0;
				if(g_cBeeps==0x10)
				{
					g_cBeeps+=2;	   //错误响2声
				}
			}
			else
			{
				if(g_cBeeps==0x10)
				{
					g_cBeeps+=1;		 //正确响一声
				}

			}
			if(g_cBeeps>0x10)
			{
			   g_cBeepDiv0=g_cBeeps-0x10;
			   g_cBeeps=0x10;    //add
			   g_cBeepDiv0<<=5;
			}
		
			UartSend(SendBuffer);   // Send data to uart.
			// add your code here
    	}	   		
	
	}
}


/*****************************************************************************
*system initialize
*UART baudrate = 19200bps, baud generator is T1
*****************************************************************************/
void InitializeSystem()
{
  
	ET2 = 0;
	T2CON = 0x04;
    PCON = 0x80;
    SCON = 0x70;
    TMOD = 0x21;        //TMOD = 0x22;

	TH1   = BAUD_19200;  //默认波特率
	TL1   = TH1;
	TR1   = TRUE;             // 波特率发生器

	TH0 = 0xDC;
    TL0 = 0x00;
    TR0 = 1;
    ET0=1;

	ET1=0;
	EA=1;
	EX0=1;
	IT0 = 1;
	TR2=0;
 	ES = TRUE;
	g_bReceCommandOk=0;	   

}

⌨️ 快捷键说明

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