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

📄 key.c~

📁 AVR单片机控制实现播放CD音频数据
💻 C~
字号:

#define Uchar        unsigned char
#define Uint         unsigned int
#define Ulong        unsigned long
//unsigned char keystatus; 
//unsigned char TemREG;
unsigned char ADC_Timeout;
sfrb ADCSRA=6;
#define ADPS0         0x01
#define ADPS1         0x02
#define ADPS2         0X04
#define ADIE          0X08   //ADC_Int_EN
#define ADIF          0X10   //Int_Flag
#define ADATE         0X20   //AUTO Conversion
#define ADSC          0X40   //ADC STSRT
#define ADEN          0X80 
#define ADC6          0X06 
#define DIV_8         0X03   //ADPS0ADPS1ADPS2=011
#define AREF_AVCC     0X40   //Avcc                  REFS1&0=01 note:(REFS1&0=11 save)
#define CLK_IO_64     0X03   //Come form  divider
#define TOIE0         0x01   //T0 overflow  EN
#define TOV0          0x01   //TO overflow  Flag
#define OCF0          0x02   //TO compare   Flag
#define TOV1          0X04   //T1 overflow  Flag
#define OCF1B         0X08   //T1 compare B Flag
#define OCF1A         0X10   //T1 compare A Flag
#define ICF1          0X20   //T1 Catch     Flag
#define TOV2          0X40   //T2 overflow  Flag
#define OCF2          0X80   //T2 compare   Flag
#define ON            0 
/*bit KEY0;
bit KEY1;
bit KEY2;
bit KEY3;
bit KEY4;
bit KEY5;
void Time0_Close(void);
void Time0_Open(void);
void ADC_start(void);
void ADC_init(void);
void adc_key_scan(void);*/

void Time0_Open(void)
      {         //定时器溢出中断允许
      TCCR0|=CLK_IO_64;   //8us
      TCNT0=0X83;         //125 counter 8us -> 1MS
      TIMSK|=TOIE0;
      TIFR|=TOV0;
      }
void  Time0_Close(void)
      {  //关闭中断
      TIMSK&=~TOIE0;
      TIFR&=~TOV0;
      } 
void ADC_start(void)
      {
       ADCSRA|=(ADSC|ADEN|ADATE);         //OPEN ADC
       } /*
void ADC_close(void){
       ADCSRA&=~(ADEN|ADSC);
       }  */            
void ADC_init(void){
       ADMUX|=(ADC6|AREF_AVCC);          //choose channel adc6 AND AVCC
       ADCSRA|=DIV_8;                    //8 division 
       }                    
void adc_key_scan(void){
       Uchar i,j;
       Uint  Temp,key_data[20];
       Ulong Sum_data;   
       ADC_init(); 
       Time0_Open();
       for (i=0;i<20;i++){
           ADC_start();
           ADC_Timeout=200;
           while(!ADCSRA.4|(!ADC_Timeout));   
           if (~ADC_Timeout) break;
           key_data[i]=ADCW&0X03FF;         //read conversion 20 times
           }  
       Time0_Close();                       //compositor,从大到小排序
       for (i=0;i<19;i++){
           for (j=i;j<20;j++){              
               if (key_data[i]>key_data[j]){       
                  Temp=key_data[i]; 
                  key_data[i]=key_data[j];
                  key_data[j]=Temp;
                  }
               }
           }  
        for (i=0;i<10;i++)
           {Sum_data+=key_data[i+5];}               //except top5 and bottom5 Sum
           Temp=(Uint)(Sum_data/10);                    //average conversion for sum
       if ((Temp>=0x0028)&(Temp<=0x007a))
           {KEY0=ON;return KEY0;}
       else if ((Temp>=0x00a3)&(Temp<=0x00f5))
           {KEY1=ON;return KEY1;}
       else if ((Temp>=0x0170)&(Temp<=0x0199))
          { KEY2=ON;return KEY2;}
       else if ((Temp>=0x023c)&(Temp<=0x28f))
           {KEY3=ON;return KEY3;}
       else if ((Temp>=0x0309)&(Temp<=0x035b))
           {KEY4=ON;return KEY4 ;}  
       else if ((Temp>=0x03ad)&(Temp<=0x3ff))
           {KEY5=ON;return KEY5;}
       else{  
           return ;
          } 
     }   


⌨️ 快捷键说明

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