📄 adc.c.130217001204
字号:
#define ADC_C
#include "includes.h"
#define MaxAdcBufSize 9
#define AdcBufStep 3 //为了算巴士均值
static volatile unsigned int ADCBuffer[MaxAdcBufSize];
/******************************************************************************/
/******************************************************************************/
static volatile unsigned int addata;
unsigned char adc_mux = 0x00;//选择通道:ADC0
void ad_result(void)
{
float j;
unsigned int count;
unsigned int Vref=50000;
unsigned char *value1 = "0.000 V";
//addata=ADCL;
//addata=addata+ADCH*256;
addata=ADCBuffer[0];
j = (float)(((float)((Vref/1000)))*addata)/1000.00;
count = j*100;
value1[0] = count /1000+0x30;
count = count %1000;
value1[2] = count /100+0x30;
count = count %100;
value1[3] = count /10 + 0x30;
value1[4] = count %10 + 0x30;
//LCD_Cursor(0,1);
LCD_DisplayString(2,1,value1);
// return addata;
}
void init_adc(void)
{
DDRA&=~BIT(PA0);
PORTA&=~BIT(PA0);
ADCSRA = 0x00;
ADMUX =(1<<REFS0)|(adc_mux&0x1f); //AVCC,AREF引脚加滤波电容,单端输入ADC0
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
}
/******************************************************************************/
/******************************************************************************/
//ADC完成中断
//#pragma vector = interrupt_handler adc_isr:iv_ADC
// define the interrupt handler
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
//////////////////////////////////////////////////////////////////////
//ADC初始化
//读取ADC
unsigned char i;
unsigned int temp,sum=0;
temp=ADCL;
temp=temp+ADCH*256;
for(i=1;i<MaxAdcBufSize-1;i++)
{
ADCBuffer[i]=ADCBuffer[i+1];
sum+=ADCBuffer[i];
}
ADCBuffer[MaxAdcBufSize-1]=temp;
sum+=ADCBuffer[MaxAdcBufSize-1];
ADCBuffer[0]=(sum>>AdcBufStep);
//////////////////////////////////////////////////
ad_result();
ADMUX|=(adc_mux&0x1f)|(1<<REFS0);
ADCSRA|=(1<<ADSC);//启动AD转换
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -