stc12c5a60s2單片機(jī)ad轉(zhuǎn)換
A/D轉(zhuǎn)換寄存器總表:

(1) P1_ADC_EN:特殊功能寄存器
P1.x作為A/D轉(zhuǎn)換輸入通道來用允許特殊功能寄存器。相應(yīng)位為“1”時(shí),對(duì)應(yīng)的P1.x口作為A/D轉(zhuǎn)換使用,內(nèi)部上拉電阻自動(dòng)斷開。

ADC_START是模擬/數(shù)字轉(zhuǎn)換(ADC)啟動(dòng)控制位,設(shè)置為1時(shí),開始轉(zhuǎn)換。
ADC_FLAG是模擬/數(shù)字轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1。
(3) ADC_DATA: A/D轉(zhuǎn)換結(jié)果特殊功能寄存器
模擬/數(shù)字轉(zhuǎn)換結(jié)果計(jì)算公式為 結(jié)果=256×Vin/Vcc
Vin是模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。
內(nèi)置ADC的使用例程:
STC_ADC.h:
sfr P1_ADC_EN=0x97;
sfr ADC_CONTR=0xc5;
sfr ADC_DATA=0xc6;
int GetAD(unsigned char channel)//channel為要取的通道號(hào)(0~7)
{
unsigned char AD_finished=0;
ADC_DATA=0;
ADC_CONTR=channel;
ADC_CONTR|=0x08;
while(!AD_finished)
AD_finished=(ADC_CONTR&0x10);
ADC_CONTR&=0xF7;
return (ADC_DATA);
}
void AD_Init(unsigned char ADin)// ADC 初始化,ADin為八位2進(jìn)制數(shù),分別對(duì)應(yīng)AD7~0,置1代表打開此路
{
P1=P1|ADin;//要設(shè)置為A/D轉(zhuǎn)換的P1.x口,先設(shè)為高
P1_ADC_EN=ADin;
}
_main.c:
#include
#include
/*
-------------------------------------------------
此程序用以說明STC單片機(jī)ADC的使用方法
-------------------------------------------------
*/
void delay(unsigned time)
{
while(time--);
}
void main()
{
AD_Init(0x63);//0110,0011,要設(shè)置為A/D轉(zhuǎn)換的P1.x口,先設(shè)置為高
//0110,0011,P1的P1.0,P1.1,P1.5,P1.6設(shè)置為A/D轉(zhuǎn)換輸入腳
//斷開P1.0,P1.1,P1.5,P1.6內(nèi)部上拉電阻
while(1)
{
P2=GetAD(0);
delay(10000);
P2=GetAD(1);
delay(10000);
P2=GetAD(5);
delay(10000);
P2=GetAD(6);
delay(10000);
}
}