📄 adc._c
字号:
//*********************************************
//ADC转换
//MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
//ADC通道:ADC3,PA3,采用软件方式
//制作人:平顶山工学院计算机系,郭猛
//**********************************************
#include "iom8v.h"
#include "macros.h"
#include "LCDFun.h"
#define Vref 5 //参考电压为3.3V
#define VolMax 945 //电池电量满,4.15V-1.1V=3.05V,对应ADC结果为0x3ff*(3.05/3.3)=945
#define VolMin 728 //电池电量空,3.45V-1.1V=2.35V,对应ADC结果为0x3ff*(2.35/3.3)=728
#define ADC_MUX 0x03 //ADC_PC3通道
unsigned char Bak_DDRC,Bak_PORTC; //记录端口C的原先状态
//ADC初始化函数
void ADC_Init(void)
{
Bak_DDRC=DDRC;
Bak_PORTC=PORTC; //保存原来的端口A状态
DDRC&=~BIT(ADC_MUX); //端口C设置为高阻态
PORTC&=~BIT(ADC_MUX);
//DDRC=0;PORTC=0;
ADCSRA=0x00;
ADMUX=BIT(REFS0)|(3&0x0f); //选择外部ARef为基准,ADC数据左对齐
ACSR=BIT(ACD); //关闭模拟比较器
ADCSRA=BIT(ADEN)|BIT(ADPS2)|BIT(ADPS1); //CLK64分频,不产生ADC中断
}
//ADC转换处理函数:
unsigned char ADC_Convert(void)
{
unsigned int adc_reslt=0; //AD转换结果
unsigned char rslt,i;
ADCSRA|=BIT(ADSC); //启动AD转换
while(!(ADCSRA & BIT(ADIF))) ; //等待AD转换完毕
adc_reslt=ADC&0x03FF; //保存ADC结果
//测试使用,显示adc_reslt:
DisplayNumChar(3,3,adc_reslt);
Delay(500);
//ADMUX=ADC_MUX; //选择外部ARef为基准
ADCSRA|=BIT(ADIF); //ADIF位写入1,清零
ADCSRA&=~BIT(ADEN); //禁止ADC
//恢复原来的端口C状态:
//DDRC=Bak_DDRC;
//PORTC=Bak_PORTC;
return rslt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -