📄 key.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 + -