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

📄 cardadc.cpp.bak

📁 基于单片机ATmega16制作IC card 。程序中包含数据的采集和通信。
💻 BAK
字号:
//cardADC.cpp : source file for the card ADC
//

#include "card.h"
#include "cardADC.h"

volatile	unsigned char adc_data;
volatile	unsigned char ADC_INT_Temp;
volatile	unsigned char ADC_INT_Temp1;
/////////////////////////////////////////////////////////////////////////////
//cardADC

void adc_init(void)
{
	//{{WIZARD_MAP(ADC)
	// ADC Clock: 62.500kHz
	// ADC Voltage Reference: Internal 1.1V, External capacitor
	// ADC Left Adjust Result
	// ADC Noise Canceler Disabled
	//ADCSRB |= 0x0;
	ADMUX = 0x67;
	ADCSRA =0x86; 			//0x8e;
	//}}WIZARD_MAP(ADC)
}
/////

ISR(SIG_ADC)
{
 // Read the ADC conversion result
 adc_data = ADCH;
  // TODO: Add your code here
 ADC_INT_Temp = ADMUX & 0x0f;
 sei();

 if(ADC_INT_Temp == 7)  //A conversion of channel 7 is completed
 {
  if(ADCBuff >= adc_data)
  {
   ADC_INT_Temp1 = ADCBuff - adc_data;  
  }  
  else
  {
   ADC_INT_Temp1 = adc_data - ADCBuff;
  }
  ADCBuff = adc_data;
  if(ADC_INT_Temp1 < 10)
  { 
   if(adc_data < 50)
   {
	FlagBuff1 |= INSERT_IPOD;
   }
   else
   {
    FlagBuff1 &= ~INSERT_IPOD; 
   }
  }
 }
 else if(ADC_INT_Temp == 6) //A conversion of channel 7 is completed
 {
  if(ADCBuff1 >= adc_data)
  {
   ADC_INT_Temp1 = ADCBuff1 - adc_data;  
  }  
  else
  {
   ADC_INT_Temp1 = adc_data - ADCBuff1;
  }
  ADCBuff1 = adc_data;
  if(ADC_INT_Temp1 < 10)
  {
   
   if(adc_data > ADC_DATA)				//没有按键按下
   {
	KeyBuff = KEY_CODE;
    bFastChange = FALSE;
	if(bReleaseKey == FALSE)
	{
     if(KeyValue == KEY_PRIVACY)	//ON/OFF与PRIVACY开关转换
     {
	  bKeyUse = TRUE;	  
     }
	 if(KeyValue == KEY_RECORD)
     {
	  bKeyUse = TRUE;	  
     }		 
	}
    bReleaseKey = TRUE;
   }
   
///////按键码判断   
   
   else if((adc_data > (ADC_DATA1 - ADC_DATA_LEN)) && (adc_data < (ADC_DATA1 + ADC_DATA_LEN)))
   {
	KeyBuff = KEY_CODE5;
   }
   else if((adc_data > (ADC_DATA2 - ADC_DATA_LEN)) && (adc_data < (ADC_DATA2 + ADC_DATA_LEN)))
   {
	KeyBuff = KEY_CODE4;
   }
   else if((adc_data > (ADC_DATA3 - ADC_DATA_LEN)) && (adc_data < (ADC_DATA3 + ADC_DATA_LEN)))
   {
	KeyBuff = KEY_CODE3;  
   }
   else if((adc_data > (ADC_DATA4 - ADC_DATA_LEN)) && (adc_data < (ADC_DATA4 + ADC_DATA_LEN)))
   {
	KeyBuff = KEY_CODE2;
   }
   else if(adc_data < (ADC_DATA5 + ADC_DATA_LEN))
   {
	KeyBuff = KEY_CODE1;   
   }   
  }
  switch(KeyBuff)
  {
   case KEY_CODE2:												//FM发送频率档位设置
   case KEY_CODE3:
   case KEY_CODE5:
	              if(bReleaseKey == TRUE)
				  {
				  KeyValue = KeyBuff;
                   bReleaseKey = FALSE;
	               FastChangeTime = 0;
	               bKeyUse = TRUE;
				  }
				  else if((KeyValue == KeyBuff) && ((KeyBuff == KEY_CODE2) || (KeyBuff == KEY_CODE3)))
				  {
				   if(bFastChange == TRUE)
                   {	 	
	                if(FastChangeCount < FAST_CHANGE_COUNT)
	                {	 
                     if(FastChangeTime > MS_300)
	                 {
	                  bKeyUse = TRUE;
                      FastChangeTime = 0;
	                  FastChangeCount++;
	                 }
	                }
	                else if (FastChangeTime > MS_80)
	                { 
	                 bKeyUse = TRUE;
                     FastChangeTime = 0;
	                } 
	               }
                   else
                   {
                    if(FastChangeTime > MS_500)
	                {
	                 bFastChange = TRUE;				//按键长按起始标志
	                 FastChangeCount = 0;
					 FastChangeTime = 0;
	                }
                   }
  				  }
				  break;
				 
   case KEY_CODE1:												//按键ON/OFF选择
   case KEY_CODE4:												//OS FM频率档位设置
                  if(bReleaseKey == TRUE)
				  {
			       FastChangeTime = 0; 
				   bReleaseKey = FALSE; 
				   KeyValue = KeyBuff;
				  }
				  else if(KeyValue == KeyBuff)
				  {
				   if(KeyValue == KEY_CODE4)
				   {
				    if(FastChangeTime >= MS_2000)
					{
				     KeyValue = KEY_FQ_MODE_SET;	
					 bFastChange = TRUE;
					 bKeyUse = TRUE;
				     //FastChangeTime = 0;				   
				     }
					}
				   else  if(FastChangeTime >= MS_1000) 
				    {
					//KeyValue = (KeyBuff == KEY_CODE4) ? KEY_FM_TOGGLE : KEY_ON_OFF;
				     if(KeyValue == KeyBuff)
					 {
					  KeyValue = KEY_ON_OFF;	
					  bFastChange = TRUE;
					  bKeyUse = TRUE;
				      //FastChangeTime = 0;
					 } 
					}
				   }
                   break; 
   default:
	     break;			  
  } 
//////////////FM与BLUETOOTH状态开关判断   
 //  #if defined(FM_CUP_BLUETOOTH) || defined(FM_CUP_RECORD_BLUETOOTH)
  if((PINB & BT_SWITCH_DETECT) == (PINBBuff & BT_SWITCH_DETECT))
  {
   if(PINBBuff & BT_SWITCH_DETECT)
   {
	FlagBuff |= BT_AUDIO_ON;    
   }
   else
   {
	FlagBuff &= ~BT_AUDIO_ON;   
   }   
  }
  if((PIND & AUDIO_DETECT)== (PINDBuff & AUDIO_DETECT))
  {
   if(PINDBuff & AUDIO_DETECT_OFF)
   {
	wAudioDetectDelay++;
	if(FlagBuff & AUDIO_ON)
	{
	 FlagBuff &= ~AUDIO_ON;	
	 wAudioDetectDelay = 0;	
	}
   }
   else
   {
	if(!(FlagBuff & AUDIO_ON))
	{
	 FlagBuff |= AUDIO_ON;	
	}
   }   
  } 
  if((PINB & IPOD_POWER_UP_DETECT) == (PINBBuff & IPOD_POWER_UP_DETECT))
  {
   if(PINBBuff & IPOD_POWER_UP_DETECT)
   {
	FlagBuff |= IPOD_POWER_UP;
   }
   else
   {
	FlagBuff &= ~IPOD_POWER_UP;
   }   
  }  
//  #endif
  
 }	  
	  
/*	  
   case KEY_CODE2:
   case KEY_CODE3:
   case KEY_CODE5:
	              if(bReleaseKey == TRUE)
				  {
				   KeyValue = KeyBuff;
                   bReleaseKey = FALSE;
	               FastChangeTime = 0;
	               bKeyUse = TRUE;
				  }
				  else if((KeyValue == KeyBuff) && ((KeyBuff == KEY_CODE2) || (KeyBuff == KEY_CODE3)))
				  {
				   if(bFastChange == TRUE)
                   {	 	
	                if(FastChangeCount < FAST_CHANGE_COUNT)
	                {	 
                     if(FastChangeTime > MS_300)
	                 {
	                  bKeyUse = TRUE;
                      FastChangeTime = 0;
	                  FastChangeCount++;
	                 }
	                }
	                else if(FastChangeTime > MS_80)
	                { 
	                 bKeyUse = TRUE;
                     FastChangeTime = 0;
	                } 
	               }
                   else
                   {
                    if(FastChangeTime > MS_500)
	                {
	                 bFastChange = TRUE;
	                 FastChangeCount = 0;
					 FastChangeTime = 0;
	                }
                   }
  				  }
				  break;
				 
   case KEY_CODE1:
   case KEY_CODE4:
                  if(bReleaseKey == TRUE)
				  {
				   KeyValue = KeyBuff;
                   bReleaseKey = FALSE;
	               FastChangeTime = 0;  
				  }
				  else if((KeyValue == KeyBuff) || (KeyValue == KEY_FM_TOGGLE))
				  {
				   if(bFastChange == TRUE)
				   {
					if((KeyValue == KEY_FM_TOGGLE) && (KeyBuff == KEY_CODE4))
					{
					 if(FastChangeTime > MS_1500)
					 {
				      bKeyUse = TRUE;
				      FastChangeTime = 0;			 
					 }
					}
				   }
				   else if(FastChangeTime >= MS_10)
				   {
					KeyValue = (KeyBuff == KEY_CODE4) ? KEY_FM_TOGGLE : KEY_ON_OFF;
				    bFastChange = TRUE;
					bKeyUse = TRUE;
				    FastChangeTime = 0;	
				   }
				  }
				  break; 
   default:
	     break;			  
  }  
 }
*/
 if(ADC_INT_Temp == 7)
 {
  ADMUX = 0x66;    //Select channel 6
  ADCSRA |= (1 << ADSC);
  ADCSRA |= 1 << ADIF;
 }  
}

⌨️ 快捷键说明

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