|
|
學(xué)了一段時(shí)間了,感覺封裝庫(kù)用起來是越來越方便了,把最近用的庫(kù)分享出來http://m.raoushi.com/bbs/dpj-50215-1.html
#include "adc.h"
//========================================================================
// 函數(shù): void ADC_Inilize(ADC_InitTypeDef *ADCx)
// 描述: ADC初始化程序.
// 參數(shù): ADCx: 結(jié)構(gòu)參數(shù),請(qǐng)參考adc.h里的定義.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_Inilize(ADC_InitTypeDef *ADCx)
{
P1ASF = ADCx->ADC_Px;
ADC_CONTR = (ADC_CONTR & ~ADC_90T) | ADCx->ADC_Speed;
if(ADCx->ADC_Power == ENABLE) ADC_CONTR |= 0x80;
else ADC_CONTR &= 0x7F;
if(ADCx->ADC_AdjResult == ADC_RES_H2L8) PCON2 |= (1<<5); //10位AD結(jié)果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
else PCON2 &= ~(1<<5); //10位AD結(jié)果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
if(ADCx->ADC_Interrupt == ENABLE) EADC = 1; //中斷允許 ENABLE,DISABLE
else EADC = 0;
if(ADCx->ADC_Polity == PolityHigh) PADC = 1; //優(yōu)先級(jí)設(shè)置 PolityHigh,PolityLow
else PADC = 0;
}
//========================================================================
// 函數(shù): void ADC_PowerControl(u8 pwr)
// 描述: ADC電源控制程序.
// 參數(shù): pwr: 電源控制,ENABLE或DISABLE.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_PowerControl(u8 pwr)
{
if(pwr == ENABLE) ADC_CONTR |= 0x80;
else ADC_CONTR &= 0x7f;
}
//========================================================================
// 函數(shù): u16 Get_ADC10bitResult(u8 channel)
// 描述: 查詢法讀一次ADC結(jié)果.
// 參數(shù): channel: 選擇要轉(zhuǎn)換的ADC.
// 返回: 10位ADC結(jié)果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC10bitResult(u8 channel) //channel = 0~7
{
u16 adc;
u8 i;
if(channel > ADC_CH7) return 1024; //錯(cuò)誤,返回1024,調(diào)用的程序判斷
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
NOP(4); //對(duì)ADC_CONTR操作后要4T之后才能訪問
for(i=0; i<250; i++) //超時(shí)
{
if(ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
if(PCON2 & (1<<5)) //10位AD結(jié)果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
{
adc = (u16)(ADC_RES & 3);
adc = (adc << 8) | ADC_RESL;
}
else //10位AD結(jié)果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
{
adc = (u16)ADC_RES;
adc = (adc << 2) | (ADC_RESL & 3);
}
return adc;
}
}
return 1024; //錯(cuò)誤,返回1024,調(diào)用的程序判斷
}
//========================================================================
// 函數(shù): void ADC_int(void) interrupt ADC_VECTOR
// 描述: ADC中斷函數(shù).
// 參數(shù): none.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_int (void) interrupt ADC_VECTOR
{
ADC_CONTR &= ~ADC_FLAG;
}
部分,全部下文件里面。失效了可以私聊我發(fā)
|
|