ADCSRA|=(1< //******ADC2初始化********// void ADC2INIT(void) { ADMUX=0x42; //AREF基准压,结果右对齐,通道为ADC2 ADCSRA=0x87; //使能ADC,单次转换,预分频为128 ADCSRA|=(1< //*********获取ADC的采样值*********// int get_ADCdata(void) { int a,b; a=b=0; b=ADCL; //读高位后数据更新 a=ADCH; //再读取ADCH数据 a=(a<<8); //右对齐,左移八位 a=(a|b); //组成10位二进制数据 return a; } //*********去头去尾,获取平均值*********// float get_ave(int a[8]) { float v; unsigned char i; float sum=0; for(i=1;i<7;i++) //从第2次到第6次数据 { sum=sum+a[i]; } v=sum/6; return v; } //********获取ADC0采样8次的平均值**********// float get_ADC0data(void) { unsigned char i=0; 22 float v; int buf[8]={0}; for(i=0;i<8;i++) { ADC0INIT(); //AD初始化一次 buf[i]=get_ADCdata(); //将数据放入数组 } v=get_ave(buf); return v; } //********获取ADC1采样8次的平均值**********// float get_ADC1data(void) { unsigned char i=0; float v; int buf[8]={0}; for(i=0;i<8;i++) { ADC1INIT(); //AD初始化一次 buf[i]=get_ADCdata(); //将数据放入数组 } v=get_ave(buf); return v; } //********获取ADC2采样8次的平均值**********// float get_ADC2data(void) { unsigned char i=0; float v; int buf[8]={0}; for(i=0;i<8;i++) { ADC2INIT(); //AD初始化一次 buf[i]=get_ADCdata(); //将数据放入数组 } v=get_ave(buf); return v; } //*********将数据拆分送显示*******// void display_AD0() { 23 int a,b; uchar s[6],k[6]; uchar i,j,m; a=get_ADC0data()*REF/1024*1000; //将数据转化为十进制 b=get_ADC0data(); //数字量 s[0]=a/1000+'0'; s[1]='.'; s[2]=a00/100+'0'; s[3]=a0/10+'0'; s[4]=a+'0'; s[5]='V'; k[0]='D'; k[1]=':'; k[2]=b/1000+'0'; k[3]=b00/100+'0'; k[4]=b0/10+'0'; k[5]=b+'0'; write_com(0xC0); for(i=0;i<6;i++) { write_dat(s[i]); } write_com(0xC7); for(j=0;j<6;j++) { write_dat(k[j]); } } //*********电压比较*******// void com_vol() { if(get_ADC2data()>=360) // { OCR1A=265; // OCR1B=265; } if(get_ADC2data()<=310) // 实际电压值大于8.4V 钳位到8.4V 实际电压值小于7.6V 24 { OCR1A=240; //钳位到7.6V OCR1B=240; } } //*************KEY.H************// #ifndef _KEY_H_ #define _KEY_H_ void key_init(); void press(); uchar key(); #endif //**************KEY.C*************// #include #define uchar unsigned char #define uint unsigned int uint count_pwm=255; uint count_pwm1=255; //**********按键初始化函数********// void key_init() { DDRD&=~BIT(0); //独立键盘接口置高电平 PORTD|=BIT(0); DDRD&=~BIT(1); //独立键盘接口置高电平 PORTD|=BIT(1); DDRD&=~BIT(2); //独立键盘接口置高电平 PORTD|=BIT(2); DDRD&=~BIT(3); //独立键盘接口置高电平 PORTD|=BIT(3); DDRD&=~BIT(7); //独立键盘接口置高电平 PORTD|=BIT(7); } //*********按键函数***********// void press() 25
相关推荐: