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

📄 main.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 3 页
字号:
         {   // printf("request ok\n ");  
		     if((status=PcdAnticoll(psnr))==MI_OK)                           //防冲撞
              {    if((status=PcdSelect(psnr))==MI_OK)                        //选定卡
                   {  
 				     
				      pa[0]=0xff;
				         pa[1]=0xff;
						  pa[2]=0xff;
						   pa[3]=0xff;
						    pa[4]=0xff;
							 pa[5]=0xff;
                   	if((status=ChangeCodeKey(pa,pkeys))==MI_OK)           //转换密钥格式
                        {    if((status=PcdAuthKey(pkeys))==MI_OK)            //传送密钥到RC500FIFO
                             {
                                 status=PcdAuthState(PICC_AUTHENT1A,3,psnr);   //验证密钥
								// printf("auth ok\n ");  
                             }
							 	 status=PcdRead(1,rbuf);  //读出第0块的内容
                               if(status==0)
		                       { // printf("read sector  0 ok \n");
    	                          //sprintf(ms,"1234567890");
 								  if(rbuf[0]==0x55)  //进入卡
								  {
								    for(i=0;i<15;i++)
									{
									   rbuf[i]=0;
									}
								    PcdWrite(1,rbuf);
								    PcdWrite(1,rbuf);
									  return 1;
								  }
                                  else                 //已经进入的卡
								  {
								      return 0;
								  }
                                   PcdRead(1,rbuf);  //读出第0块的内容
                                 /*if( memcmp(rbuf,p,12)==0)
								 { 
							          PcdHalt();
								    return 1;
								 }
								 else
								   return 0; */
                                  //SendStr_MAX7219(ms);
                                  // Delay100ms(5);
                                
                                   //printf("\n");
			                   }
                         }
						return 0; 
                    }
				      return 0; 
               }
			   return 0; 
          }
	    return 0; 
}
//***********************************************************8
unsigned char Read_ddcard()
{
//   	   uchar pa[6],pkeys[12],rbuf[16];
       uchar status;

       status=PcdRequest(PICC_REQIDL);//PICC_REQALL);                                      //寻卡
         if(status!=MI_OK)
         {
             status=PcdRequest(PICC_REQIDL);//PICC_REQALL);
         }
         if(status==MI_OK)
         {   // printf("request ok\n ");  
		     if((status=PcdAnticoll(psnr))==MI_OK)                           //防冲撞
              {    if((status=PcdSelect(psnr))==MI_OK)                        //选定卡
                   {  
 				      PcdHalt();
				     return 1;
                    }
				    
               }
			   return 0; 
          }
	    return 0; 
}
/****************************************************************************
*                                                                           *
* Function:     main                                                        *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void main(void)
{
   unsigned char idata i,x,keytemp[5]; 
   unsigned char keynum=0,delay_time=5;
   bit car_type=0,bancar=0;
       AUXR = 0x00 ;	 
   SCONF=0X03;
// dog=!dog;
  
 
  init_com(); 
  
  EA=1;
  ES=1 ;  
  ADDR=0XD2;
 i=Rd1307(0);
   if (Rd1307(0) & 0x80)
      {
       	i &= 0x7F;
       	Wr1307(0,i);
      }
 Init_1307(0x90);	//***  Init Real Time Clock  *** */
 //Wr1307(20,0);
  //Wr1307(21,0);
   if(Rd1307(19)!=0X55)///读设备地址
     {
	   ADDR=0XD2;
	   Wr1307(19,0x55);
       Wr1307(20,0xd2);
	 }
	 else
	 {
	   ADDR=Rd1307(20);  
	    
	 }
    lage_car=ADDR; 
	 beep(1);
    sprintf(ms,"       %3u",lage_car);
     SendStr_MAX7219(ms);
	 Delay100ms(10); //beep
   
   if(Rd1307(21)==0xff)
     lage_car=0;
  else
    lage_car=Rd1307(20);

    if(Rd1307(22)==0xff)
     small_car=0;
  else
    small_car=Rd1307(21);

 
  // Flash_Sector_Erase (0);

    Rc500Ready();
	EX1 = 1 ;//时钟中断
	 IT1=1;
	  EA=1;
while(1)
  { 
 //for(i=0;i<100;i++)
 //{
 if(num_suss)//设置号码成功
 {
   num_suss=0;
    beep(3); 
 }
if(time_set)//设置时间成功
 {
   time_set=0;
    beep(3); 
 }

 if(tflag)
 {
   tflag=0;
  GetTime(time.a);

  //sprintf(ms,"%02bx>%02bx1777",time.a[5],time.a[6]); 
   //ms[8]=0x30+ Get_key();    
  //SendStr_MAX7219(ms);
 }
 
 switch(mainstate)
 {
   case 0:             //待机状态

      if (Cmdok)		  //通讯
	{
      	Cmdok = FALSE;
	  	RecvReady = FALSE;
	  	SendReady = FALSE;

	  	cmd_execution();
	  	SendReady = TRUE ;   //发起始字
	  	TI = 1;
     
     
    }
      //sprintf(ms,"  %3u  %3u",lage_car,small_car);
	 // ES=0;
     if(Read_card())
	 { 
	      in_outFlg =0;//进场标志
	      beep(1);
	      Keyinput_ok=1;
	 }
	 //ES=1;
	  if(link)
	  {
       for(i=0;i<10;i++)
       ms[i]=ledtem[i]; 
	  }
	  else
	  {
	    sprintf(ms,"  %3u  %3u",lage_car,small_car);
	  }
      SendStr_MAX7219(ms);
	  x=Get_key();
	  if(x!=0xff)
	  {   beep(1);
	    keynum=0;
	    for(i=0;i<5;i++)
		  { 
		     keytemp[i]=0x20;
		  }
	   if(x<10)
	   {
	     sprintf(ms,"%02bx>%02bx     0",time.a[4],time.a[5]); 
         SendStr_MAX7219(ms);
         mainstate=1;
		
   	   }
	   else
	   {
	     if(x==CAR)
		 { 
		   car_type=1;
		   sprintf(ms,"%02bx>%02bxd    ",time.a[4],time.a[5]); 
           SendStr_MAX7219(ms);
           mainstate=1;
		 }
        if(x==0x0b)//交班建//菜单
        {
	       mainstate=2;
		    keyin=0;
		  //ban=1;
		   sprintf(ms,"%02bx>%02bx     0",time.a[4],time.a[5]); 
		    SendStr_MAX7219(ms);
		}  
		if(x==0x0d)//车位信息建//外进
        {
	
		   sta=1;
		}  
 	   
	   }
	  }
      break;
   case 1:            //输入
      // GetTime(time.a);
      sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]); 
      x=Get_key();
	  if((x>=0)&&(x<10))
	  {
	     
		 if(car_type)ms[5]=0x64;
		 else ms[5]=0x20;
          keytemp[keynum]=x+0x30;
		  keynum++;
		  if( keynum==4) keynum=4;
		  for(i=0;i<5;i++)
		  { 
		     ms[i+6]=keytemp[i];
		  }
	     // SendStr_MAX7219(ms);
		  beep(1);
	  }
	  if(x==ESC)                   //清零
	  {
	    for(i=5;i<10;i++)    
		ms[i]=0x20;
		for(i=0;i<5;i++)
		  { 
		     keytemp[i]=0x20;
		  }
		   beep(2);
        //SendStr_MAX7219(ms);
		car_type=0;
		 keynum=0;
	  }
	  if(x==ENTER)                  //确认
	  {
        // Keyinput_ok=1;
		
	
	       for(i=0;i<5;i++)
		  { 
		     ms[i+5]=0x20;
		  }
		 beep(1);
		   for(i=1;i<5;i++)
		  { 
		     input_pc[i]=keytemp[i-1];
			 if(car_type)input_pc[0]='d';
		     else input_pc[0]='x';
			 if(input_pc[i]==0x20)input_pc[i]=0;
		  }
		  
         //mainstate=0;
		 	delay_time=5;
		while(1)
		{
	      memcpy(ms, input_pc,5);
          memcpy(&ms[5],&time.a[0],6); 
		 // ES=0;
         if( write_card(ms))//写卡成功
		 {  
		  in_outFlg =1;//进场标志
	      beep(1);
	      Keyinput_ok=1;
		 }
		 //ES=1;
		 sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]); 
     	if(tflag)
         {
		   delay_time--;
		   if(delay_time==0){  mainstate=0; beep(1);break;}
           tflag=0;
         }
		  for(i=0;i<5;i++)
		  { 
		     ms[i+5]=0x20;
		  }
		  ms[9]=delay_time;
		 SendStr_MAX7219(ms);
		if (Cmdok)		  //通讯
	     {
      	  Cmdok = FALSE;
	  	  RecvReady = FALSE;
	  	  SendReady = FALSE;
  	  	  cmd_execution();
	  	  SendReady = TRUE ;   //发起始字
	  	  TI = 1;
         }
	   }
		 
	  }
	  
	  if(x==CAR)                   //大车
	  { 
		  car_type=1;
		  ms[5]=0x64;	  
		  for(i=0;i<5;i++)
		  { 
		     ms[i+6]=keytemp[i];
		  }
		   beep(1);
		    SendStr_MAX7219(ms);
	  }
      break;
   case 2:
       sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]); 
       x=Get_key();
	   if(x==0)//***** 下班
	   { 
	      sprintf(ms,"%02bx>%02bx0    ",time.a[4],time.a[5]); 
          beep(1);
		  keyin=1; 
	   }
	   if(x==1)//******上班
	   {
	     sprintf(ms,"%02bx>%02bx1    ",time.a[4],time.a[5]);  
	     beep(1);
		  keyin=2; 
	   }
	   if(x==ENTER)                  //确认
	   {
	      if((bancar==1)&&( keyin!=0))
		  {	  
		    ban=1;
		    bancar=0;
             mainstate=0;
			   beep(1);
		  }
          else
		  {
	        beep(2);
		  }
	   }
	   if(x==ESC)                   //清零
	   {
	      beep(1);
		  mainstate=0;
		  keyin=0; 
		  bancar=0;
	   }
       if(Read_ddcard())
	    { 
	      bancar=1;
	      beep(1);
	    
	    }
      break;
   default:
	  mainstate=0;
	  break;
 }
     if (Cmdok)		  //通讯
	{
      	Cmdok = FALSE;
	  	RecvReady = FALSE;
	  	SendReady = FALSE;

	  	cmd_execution();
	  	SendReady = TRUE ;   //发起始字
	  	TI = 1;
     
    }//Delay100ms(5);
  /*ISPFD=0X55;
   ISPFD=0XAA;
   ISPFD=0X55;
   SCONF=0X04;  //OPEN ISP	
      ISPFAH=0X00;
   ISPFAL= 00;
   ISPFD=0X30+i;
   ISPC=0XA0;*/
  /* for(j=0;j<10;j++)
      ms[j]=j;
   Flash_Write (0, ms,10);

 SCONF=0X08;
ISPC=0X20;
  ms[4]=RemainRec[i]+0x30;
 
   ms[8]=0x38;
  SendStr_MAX7219(ms);
  Delay100ms(7); 
  }*/
  


}
  
}//end main

⌨️ 快捷键说明

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