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

📄 main.c

📁 SPI接口读写模块c程序
💻 C
📖 第 1 页 / 共 2 页
字号:
						
		            else
		            {
		        			g_cReceBuf[0]=0x02;
		        			g_cReceBuf[1]=~cmd;
							cStatus=1;
		        	}
			break;
		case 0x11:	  // 软件掉电模式 ,1字节数据,非0退出软件掉电模式,0x00进入软件掉电
		                //任何一条对卡的操作命令或自动寻卡被设置后都将终止掉电模式
		
			cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_1ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==SOFTDOWN))
					{
				    	g_cReceBuf[0]=0x02;
						g_cReceBuf[1]=cmd;
			
					}	
			else
			{
				g_cReceBuf[0]=0x02;
				g_cReceBuf[1]=~cmd;
				cStatus=1;
			}
		    break;

		case 0x12:     // Idle the card     //卡休眠    
            
			        	 cStatus =SPI_Write(g_cReceBuf);          
		                 delay_1ms(2);				      // 延时等待模块执行命令
		                 cStatus =SPI_Read(cp);		  // 保存到数组cP
			             if((cStatus==SUCCESS)&&(cp[1]==HALT_CARD))
		                  {
		                        g_cReceBuf[0]=0x02;
								g_cReceBuf[1]=cmd;	
				
		                    }
	                  
						 else
						{
							g_cReceBuf[0]=0x02;
							g_cReceBuf[1]=~cmd;
						}
				
			break;

		case 0x13:    // 自动寻卡 ,1字节数据,0x01 开启自动寻卡,0x00关闭   		
		
			 cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_1ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==AUTOSEARCH))
					{
				    	g_cReceBuf[0]=0x02;
						g_cReceBuf[1]=cmd;
			 	
						cStatus=0;
					}
			 else
			{
				g_cReceBuf[0]=0x02;
				g_cReceBuf[1]=~cmd;
				cStatus=1;
			}
 			break; 
 	 			
 			
		case 0x19://读卡类型  //无数据    返回卡类型(2 bytes)	   
    
	
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_1ms(2);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==CARD_TYPE))	
		                { 	       
			               	g_cReceBuf[0]=4;
			        		g_cReceBuf[1]=cmd;
			        		g_cReceBuf[2]=cp[2];
			        		g_cReceBuf[3]=cp[3];

			       		}
						
		            else
		            {
		        			g_cReceBuf[0]=0x02;
		        			g_cReceBuf[1]=~cmd;
							cStatus=1;
		        	}
			
	            break;		
   

		case 0x20:     // Request,Anticoll,Select,return CardSerialNo(4 bytes)
			        // 寻卡,防冲突,选择卡    返回卡系列号(4 bytes)
		
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送寻卡命令
		            delay_1ms(5);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取卡号并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==CARD_SN))
		                {	 		                      
									g_cReceBuf[0]=6;
									g_cReceBuf[1]=cmd;
									memcpy(&g_cReceBuf[2],&cp[2],4);
		                         
		                  								 
		                    }		
		      
			else
			{
				g_cReceBuf[0]=0x02;
				g_cReceBuf[1]=~cmd;
				cStatus=1;
			}
	
			break;	   
   	 
		case 0x21:		//读块             	   
						//数据内容  1 字节密钥标识+1 块号+6 字节密钥		  			
	
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(5);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==READ_BLOCK))	
		                { 	       
			               	g_cReceBuf[0]=0x12;
			        		g_cReceBuf[1]=cmd;	  
							memcpy(&g_cReceBuf[2],&cp[2],16);			        	
			
						}
		            else
		            {
		        			g_cReceBuf[0]=0x02;
		        			g_cReceBuf[1]=~cmd;
							cStatus=1;
		        	}
		
       		break;	
 
		case 0x22 :		//写块      
						//1 字节密钥标识+1 块号+6 字节密钥+16 字节写入数据
				
		            cStatus =SPI_Write(g_cReceBuf);	  // 发送命令
		            delay_10ms(5);					          // 延时等待模块执行命令
		            cStatus =SPI_Read(cp);		  // 读取并存入到cP
			    	if((cStatus==SUCCESS)&&(cp[1]==WRITE_BLOCK))	
		                { 	       
			               	g_cReceBuf[0]=0x02;
			        		g_cReceBuf[1]=cmd;	  			        	
					
						
	            		}
						
		            else
		            {
		        			g_cReceBuf[0]=0x02;
		        			g_cReceBuf[1]=~cmd;
							cStatus=1;
		        	}
				
		
			break;

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

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


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

		                {
							g_cReceBuf[0]=0x02;
							g_cReceBuf[1]=cmd;	  								        	
				
	            		}
			
		            else
		            {
		        			g_cReceBuf[0]=0x02;
		        			g_cReceBuf[1]=~cmd;
							cStatus=1;
		        	}
		
       		break;	
     
		default:
			g_cReceBuf[0]=0x02;
			g_cReceBuf[1]=~cmd;
			cStatus=1;	
		    break;

	}
	return cStatus;
}


//-----Reset rf module -------//
void Reset_HY502(void)
{
	RST_HY=0;			  //Reset HY502 复位模块 
    delay_10ms(50);          
	RST_HY=1;     
}

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

	InitializeSystem();		   // 初始化系统      	

	Reset_HY502();       
//	LED_YELLOW=0;  //test led
	LED_GREEN=0;
	delay_10ms(50);	
//    LED_YELLOW=1;	
    LED_GREEN=1;   //LED light 0.5s
	beep(2);	//test buzz
	//----- test key------//
	if(KEY1==0) splash(1);
	if(KEY2==0) splash(2);
	if(KEY3==0) splash(3);
	if(KEY4==0) splash(4);	
//-----------------main loop ---------------//	

	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;
			
			}
					
			UartSend(g_cReceBuf);   // 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;             // 波特率发生器

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

⌨️ 快捷键说明

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