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

📄 adc._c

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 _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 + -