?? 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 + -