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

📄 card.cpp

📁 基于单片机ATmega16制作IC card 。程序中包含数据的采集和通信。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    {
	 case TX_SYN_CODE_STATUS:
		  //if(wStatusDelay > 0)
		  //{
		   PORTB &= ~SPI_CLK;
		   FMTxStatus = CP_RESET_STATUS;
		   wStatusDelay = 0;
		   //bTxCommand = TRUE;
	       PORTC &= ~CP_RESET;  
		  //}	  
		  break;		
		
	 case CP_RESET_STATUS:
		  if(wStatusDelay > MS_10)
		  {
		   PORTC |= CP_RESET;
	       FMTxStatus = CP_RESET_DELAY_STATUS;
		   TxRetryCounts = TX_RETRY_COUNTS;
		   IdentifyRetryCounts = IDENTIFY_RETRY_COUNTS;
		   FlagBuff1 &= ~IDENTIFY_ACK;
 	       wStatusDelay = 0; 
           //bTxCommand = TRUE;
		  }
		  break; 
		  
	 case CP_RESET_DELAY_STATUS:
		  if(wStatusDelay > MS_30)
		  {
		   if((IdentifyRetryCounts > 0) && !(FlagBuff1 & IDENTIFY_ACK))	//授权是否通过
		   {
			IdentifyRetryCounts--;  
		    if(IdentifyRetryCounts < (IDENTIFY_RETRY_COUNTS -1))
			{
			 if(wStatusDelay > MS_200)
			 {
			  SendIdentifyDeviceLingoes();							//发送CP授权命令
			  wStatusDelay = 0; 
		      //bTxCommand = TRUE;
			 }			 
			}
		    else
			{
    		 SendIdentifyDeviceLingoes();
		     wStatusDelay = 0; 
		     //bTxCommand = TRUE;
			}
		   //FMTxStatus = TX_IDENTIFY_DEVICE_LINGO_STATUS;
		   //AckAuthStatCoun = ACK_AUTHENTICATION_STATUS_COUNTS;
		   }
		   else
		   {
			bTxCommand = FALSE;  
		   }
 		  }
		  break;
	  
	 case IDENTIFY_STATUS:
		  if(wStatusDelay > MS_30)
		  {
		   SendSetIpodPreferences();
		   bTxCommand = FALSE;  
		  }  
		  break;
		  
#if defined(FM_CUP) || defined(FM_CUP_RECORD) 
	 case TX_SEND_CONTEX_BOTTON_PRESS_STATUS:
		  if(wStatusDelay > MS_10)
		  {	
		   SendContextButtonStatus(0x00000001);//PRESS_PAUSE_KEY);
           FMTxStatus = CONTEX_BOTTON_PRESS_STATUS2;
	       wStatusDelay = 0;
		   bTxCommand = TRUE;
		  }
		  break;
		 
     case CONTEX_BOTTON_PRESS_STATUS2:
	      if(wStatusDelay > MS_20)  //10ms
		  {
		   SendContextButtonStatus(RELEASE_PAUSE_KEY);//RELEASE_PLAY_PAUSE_KEY);
           FMTxStatus = FMTxStatusBuff;
		   bTxCommand = FALSE;
          }
		  break;		 
#endif   
		 
	 default:
		  break; 
	}  
   	}   
 }	
////sent iPod  some command to do something			
if(bTxCommand1 == TRUE)
  {
   switch(FMTxStatus1)
   {
    case CONTEX_BOTTON_PRESS_STATUS:
	     if(wStatusDelay1 > MS_20)
		 {
		  SendContextButtonStatus(RELEASE_PAUSE_KEY); 
		  bTxCommand1 = FALSE;
		 }
		 break;
		 
	default:
		 break;
		
   		}
  	}

	
}	
////////////
void	send_bt_command(unsigned char	*p)				//MCU发送蓝牙指令
{
		unsigned char	i=1;
		
		while(i)
		{
			if(!BtTxDataStart)
			{
					if(BtTxDataCount<((*(p+1))+2))
						{
							BtTxData[BtTxDataCount++]=*(p++);
							BtTxDataStart=1;						
						}	
					else
						{i=0;
						BtTxDataStart=0;				
						BtTxDataCount=0;
						}
				
			}
							
	}
	
		
}

///////////key to do things
void ipod_key_dothing(void)
{
  if(bKeyUse == TRUE)
  {
    bKeyUse = FALSE;
    switch(KeyValue)		
    {
/*  
     case KEY_RECORD:
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)	
 		  if((FMTxStatus == IDENTIFY_STATUS) || (FMTxStatus == RECORD_STATUS))
		  {
		   if(FMTxStatus == IDENTIFY_STATUS)
		   {
		    //TxBuff[0] = 0xff;
            //WriteUart(1,UN_WAIT_TX);
			//FMTxStatus = TX_IDENTIFY_DEVICE_LINGO_STATUS;
			//TxRetryCounts = TX_RETRY_COUNTS;
			FMTxStatus = CP_RESET_STATUS;  
			PORTC &= ~CP_RESET;  //Reset cp   
     	   }
		   else
		   {
		    SendContextButtonStatus(0x00400000);//PRESS_PAUSE_KEY);
            ReturnLastMenuLevel = RET_LAST_MENU_LEVEL;
		    FMTxStatus = CONTEX_BOTTON_PRESS_STATUS1;
	        wStatusDelay = 0;
		   }
		   bTxCommand = TRUE;
		   wStatusDelay = 0;
		   TurnOnLed(MS_30000);
		  }
#endif		
#if defined(FM_CUP) || defined(FM_CUP_BLUETOOTH)
		  if(!(FlagBuff & BT_AUDIO_ON))
		  {
		   bFMFrequenceChange = TRUE;
           if((FMFrequenceStep == M4) || (FMFrequenceStep == NO_M))
           {
            FMFrequenceStep = M1;
           }
           else
           {
            FMFrequenceStep <<= 1;  
           }
           FMFrequenceAndMode.FMFrequence.wFMFrequence = FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep) >> 1];
           FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
           FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
           FrequenceAreaToDisplayBuff(FMFrequenceStep);
           DisplayFrequence();
           FMFrequenceAndMode.FMFrequenceMode = FMFrequenceStep;
		  }
		  else
		  {
		   BTTxBuff[2] = 0x03;	  
		   if(FlagBuff1 & MICROPHONE_MUTE_ON)
		   {
		    FlagBuff1 &= ~MICROPHONE_MUTE_ON;
			BTTxBuff[3] = 0x01;
		    BTTxBuff[4] = 0x04;
		   }
		   else
		   {
            FlagBuff1 |= MICROPHONE_MUTE_ON;			
		    BTTxBuff[3] = 0x00;
		    BTTxBuff[4] = 0x03;
		   }
		   
           BTTxBuff[0] = 0x55;	  //No privacy 
		   BTTxBuff[1] = 0x03;    //Command length
		   TIFR2 |= (1 << TOV2);
           TCNT2 = 0xcd;  //0xb4 Wait for 104+52-2-2 us,-2-2 is running time for instruction 
           TCCR2B = 0x02;//Timer 2 init;
           TIMSK2 = 0x01;  //Turn on timer2 interrupt 
	       PORTD &= ~BT_RX; 
		   BTTxBitCount = 0;
		   BTTxByteCount = 0;
	
		   BTTxConfig();   
		  }
          TurnOnLed(MS_30000);         
#endif		  
		  break;
*/
//unsigned char TempFMFrequenceStep;
//unsigned char TempFMFrequenceStep1;
//unsigned int wTempFMFrequence;
/*		  
	 case KEY_FQ_MODE_SET:
	      TurnOnLed(MS_30000);
		  //if(FMFrequenceStep == NO_M)
          //{
           //FMFrequenceStep = M1;
         //}
		  wTempFMFrequence = FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)];
		  FlagBuff1 |= LCD_LIGHT_KEEP;
		  LCDFlashTime = 0;
		  LCDFlashTimePreset = MS_500;
		  FrequenceToDisplayBuff(wTempFMFrequence);
          FrequenceAreaToDisplayBuff(FMFrequenceStep);
          DisplayFrequence();			  
		  i = TRUE;
		  while(i)
		  {
           LCDFlash();
		   if(bKeyUse == TRUE)
           {
            bKeyUse = FALSE;
            switch(KeyValue)
			{
             case KEY_RECORD:
				  i = FALSE;
				  goto LightLED30S;
				 
			 case KEY_FQ_MODE_SET:
                  bFMFrequenceChange = TRUE;
				  FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)]=wTempFMFrequence;
			  	  i = FALSE;
			      goto LightLED30S;
				 
			 case KEY_UP:
	              if(wTempFMFrequence < FM_MAX_FREQUENCE)
		          {  
                   wTempFMFrequence++;
                  }
		          else
		          {
		           wTempFMFrequence = FM_MIN_FREQUENCE;
		          }
                  goto FMFreqControl1;				 
				 				 
			 case KEY_DOWN:
                  if(wTempFMFrequence > FM_MIN_FREQUENCE)
	              {
                   wTempFMFrequence--;
                  }
		          else
		          {
		           wTempFMFrequence = FM_MAX_FREQUENCE;
		          }	  
FMFreqControl1:
                  FlagBuff1 |= LCD_LIGHT_KEEP;
				  LCDFlashTime = 0;
				  WriteCommand(LCD_ON);
				  FrequenceToDisplayBuff(wTempFMFrequence);
                  DisplayFrequence();
LightLED30S:				  
                  TurnOnLed(MS_30000); 				 
			      break;
				 
			 case KEY_ON_OFF:
			      bKeyUse = TRUE;
				  i = FALSE;
                  break;
		
		     default:
			      break;
				  
			}
		   }	
		  }
          FlagBuff1 |= LCD_LIGHT_KEEP;
		  LCDFlashTime = 0;
		  LCDFlashTimePreset = MS_2000;
	      WriteCommand(LCD_ON); 
		  //FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
		  FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
		  FrequenceAreaToDisplayBuff(NO_M);
		  FMFrequenceAndMode.FMFrequenceMode = NO_M;
          DisplayFrequence();
		  break;
*/		  
//////////////
				
				  //FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)]=wTempFMFrequence;
/////////////
/*
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)					  
	 case KEY_FM_TOGGLE:											//模式选择
		  bFMFrequenceChange = TRUE;
		  FMFrequenceAndMode.FMFrequence.wFMFrequence = FMFrequenceStepValue[(FMFrequenceStep) >> 1];
		  FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
          //KT0801Configuration(FMFrequenceAndMode.FMFrequence.wFMFrequence);
		  FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
		  FrequenceAreaToDisplayBuff(FMFrequenceStep);
          DisplayFrequence();
		  FMFrequenceAndMode.FMFrequenceMode = FMFrequenceStep;
		  if((FMFrequenceStep == M4) || (FMFrequenceStep == NO_M))
		  {
		   FMFrequenceStep = M1;
		  }
		  else
		  {
		   FMFrequenceStep <<= 1;  
		  }
		  TurnOnLed(MS_30000);
		  break;
#endif		  
*/
/////////////
case KEY_FQ_MODE_SET:  									//FM频率模式选择            
				  		FmFrequenceData=OsModeSelect[OsMode++];
				  		if(OsMode==4)
				  			OsMode=0;				  						  		
				  		goto	FMFreqControl;
				  				  				  				  


//////////////
     case KEY_UP:																//频率递增
	      if(FmFrequenceData < FM_MAX_FREQUENCE)
		  {  
           FmFrequenceData++;
      }
		  else
		  {
		   FmFrequenceData = FM_MIN_FREQUENCE;
		  }
          goto FMFreqControl;
	  
     case KEY_DOWN:													//频率递减
          if(FmFrequenceData > FM_MIN_FREQUENCE)
	      {
           FmFrequenceData--;
          	}
		  else
		  {
		   FmFrequenceData = FM_MAX_FREQUENCE;
		  }
FMFreqControl:
		  bFMFrequenceChange = TRUE;
		  FMFrequeceControl(FmFrequenceData);
		  //KT0801Configuration(FMFrequenceAndMode.FMFrequence.wFMFrequence);
		  FmFrequenceToLcdDiplaySub(FmFrequenceData);	
          TurnOnLed(MS_30000); 
		  break;
	  
	 case KEY_ON_OFF:								
		/*  
		   if(FMTxStatus == CP_RESET_DELAY_STATUS)
		   {
		    SendIdentify();  									
		    wStatusDelay = 0;
            while(wStatusDelay < MS_20)
		    {
			 asm("wdr");	
		    }
		   }
		  */
		   SendContextButtonStatus(PAUSE);
		   wStatusDelay = 0;
           while(wStatusDelay < MS_20)
		   {
			asm("wdr");	
		   }
		   SendContextButtonStatus(RELEASE_PAUSE_KEY);
		   wStatusDelay = 0;
           while(wStatusDelay < MS_30)
		   {
			asm("wdr");	
		   }	       	   
		   PORTC |= LED; 
		   LedWorkMode = LED_OFF;
   
		   bTxCommand = FALSE;				//关机
		   bTxCommand1 = FALSE;
		   FlagBuff = 0;
/*		    
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)
           if(FMTxStatus == RECORD_STATUS)
		   {
			PORTC &= ~nSHDN;   
			SendContextButtonStatus(0x00400000);//PRESS_PAUSE_KEY);
			wStatusDelay = 0;
			while(wStatusDelay < MS_200)
			{
			 asm("wdr");	
			}
			SendContextButtonStatus(RELEASE_PAUSE_KEY);//RELEASE_PLAY_PAUSE_KEY);	
		   }
#endif		   
*/ 
        WriteCommand(SYS_DIS);
		   UCSRB &= (~(1 << RXEN) &  ~(1 << TXEN));//Disable UART TX and RX
		   PORTD &= (~BT_POWER_ON & ~KT0801_POWER_ON);
		   PORTD &= (~TX & ~RX & ~FM_CLK & ~FM_DATA);//Set tx rx as high impendance input
		   DDRD &= (~TX & ~RX & ~FM_CLK & ~FM_DATA);
		   PORTC &= ~KT0801_RESET;
			
		 
		   do
		   {
		    MCUCR|=(1<<SE);	//SMCR = RE_SE;
            asm("sleep\n");
            	//SMCR &= ~RE_SE;
		    MCUCR&=~(1<<SE);
			asm("wdr");
		   }
			while(!((bKeyUse == TRUE) && (KeyValue == KEY_ON_OFF)));
 			bKeyUse = FALSE;
		   		 	 
		 	  while(!((bKeyUse == TRUE) && (KeyValue == KEY_ON_OFF)));						//开机
		   bKeyUse = FALSE;		   
	       UartReceive = UART_RECEIVE;   		   
		   FMTxStatus = NO_IPOD_CONNECT_STATUS;
		 
           bTxBuffLock = FALSE;
		   PORTD |= (TX | RX | FM_CLK | FM_DATA);
           DDRD =0b11010001; //0xdc;//0xf6;
		   UCSRB |= (1 << RXEN) | (1 << TXEN);
		   PORTD |= (BT_POWER_ON | KT0801_POWER_ON);
		   wStatusDelay = 0;
           while(wStatusDelay < MS_20)
           {
            asm("wdr"); 
           }		   
		   PORTC |= KT0801_RESET;
		   TurnOnLed(MS_30000);
           WriteCommand(BIAS);
           WriteCommand(SYS_EN);
           WriteCommand(LCD_ON);
		   //FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence,STEREO | PLL_OUTPUT_USUAL | FM_TEST);	  		  
		   KT0801Configuration(FmFrequenceData);
		   FlagBuff |= (AUDIO_TRANSMIT | AUDIO_ON);
		   FlagBuff &= (~IPOD_POWER_UP & ~IPOD_POWER_UP_HOLD);
		   FlagBuff1 &= (~IPOD_POWER_STEADY & ~GET_IPOD_PLAY_STATUS);
		   //FlagBuff1 |= (LCD_LIGHT_KEEP | LCD_LIGHT);
		   FlagBuff1 |= LCD_LIGHT_KEEP;
		   //FlagBuff &= ~FM_MUTE_ON;
		  
		  break;

/*
#if defined(FM_CUP) || defined(FM_CUP_RECORD)		  
	 case KEY_PLAY_PAUSE:																
		  if((FMTxStatus == IDENTIFY_STATUS) || (FMTxStatus == RECORD_STATUS))
		  {
		   FMTxStatusBuff = FMTxStatus;
		   if(FMTxStatus == RECORD_STATUS)
		   {
			SendContextButtonStatus(0x00800000);//PRESS_PAUSE_KEY);
            FMTxStatus = CONTEX_BOTTON_PRESS_STATUS2;
		   }  
		   else
		   {
		    TxBuff[0] = 0xff;
            WriteUart(1,UN_WAIT_TX);
		    FMTxStatus = TX_SEND_CONTEX_BOTTON_PRESS_STATUS;
		   }		   
		   wStatusDelay = 0;
		   bTxCommand = TRUE;
	       TurnOnLed(MS_30000);
		  }      
    	  break;
#endif
*/
////////////////////////////////////////////////////IPOD附加功能
			case	KEY_IPOD_NEXT:																								
									
							if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
							{										
									while(IpodLongKey)
									{
									TurnOnLed(MS_30000);
									wStatusDelay=0;
									SendContextButtonStatus(NEXT_TRACK);
									while(wStatusDelay < MS_50);									
									}							
																									

⌨️ 快捷键说明

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