?? adc.c
字號(hào):
//[ADC.c]A/D轉(zhuǎn)換-----------------------------------------------------------*
//本文件包含: *
// (1)ADCInit:A/D轉(zhuǎn)換初始化 *
// (2)ADCvalue:獲取1路A/D轉(zhuǎn)換結(jié)果 *
// (3)ADCmid:獲取中值濾波后的A/D轉(zhuǎn)換結(jié)果 *
// (4)ADCave:獲取均值濾波后的A/D轉(zhuǎn)換結(jié)果 *
//硬件連接: *
// PAD1 接模擬量輸入端 *
//-------------------------------------------------------------------------*
//頭文件
#include "ADC.h" //A/D轉(zhuǎn)換頭文件
//ADCInit:A/D轉(zhuǎn)換初始化----------------------------------------------------*
//功 能:初始化AD轉(zhuǎn)換 *
//參 數(shù):無 *
//返 回:無 *
//-------------------------------------------------------------------------*
void ADCInit(void)
{
//ATDCTL2.ADPU = 1為打開轉(zhuǎn)換電源開關(guān)
//ATDCTL2.AFFC = 1為A/D轉(zhuǎn)換CCF自動(dòng)清0位
ATD0CTL2 = 0xC0;
//ATDCTL3.S4C = 1表示序列長(zhǎng)度為4
//ATDCTL3.FIFO = 0為非FIFO模式
//ATDCTL3.FRZ0~FRZ1 = 00表示凍結(jié)模式
ATD0CTL3 = 0x20;
//ATDCTL4.PRS4~PRS0 = 00111表示總線頻率16分頻
ATD0CTL4 = 0x87;
//ATDCTL4.SRES8 = 1表示8位轉(zhuǎn)換精度
ATD0CTL5 = 0x80;
}
//ADCvalue:1路8位A/D轉(zhuǎn)換函數(shù)----------------------------------------------*
//功 能:獲取通道channel的8位A/D轉(zhuǎn)換結(jié)果 *
//參 數(shù):channel=通道號(hào)(0~15) *
//返 回:該通道的A/D轉(zhuǎn)換結(jié)果(0~1023) *
//-------------------------------------------------------------------------*
INT8U ADCvalue(INT8U channel)
{
INT8U temp; //暫存A/D轉(zhuǎn)換的結(jié)果
//ATDCTL5.DJM = 0,結(jié)果寄存器數(shù)據(jù)采用右調(diào)整
//ATDCTL5.SCAN = 1,連續(xù)轉(zhuǎn)換序列
//ATDCTL5.CC~CA = channel,啟動(dòng)通道轉(zhuǎn)換
ATDCTL5 = (0x80 | channel);
//取A/D轉(zhuǎn)換結(jié)果
while (1)
//判斷ATDSTAT0的第7位是否為1
if ((ATDSTAT0&(1<< 7)) != 0)
{
temp = ATD0DR0L; //從A/D數(shù)據(jù)寄存器0中讀8位數(shù)據(jù)
break;
}
return temp;
}
/*
//ADCmid:1路A/D轉(zhuǎn)換函數(shù)(中值濾波)------------------------------------------*
//功 能:獲取通道channel中值濾波后的A/D轉(zhuǎn)換結(jié)果 *
//參 數(shù):channel=通道號(hào)(0~4) *
//返 回:該通道中值濾波后的A/D轉(zhuǎn)換結(jié)果(0~255) *
//內(nèi)部調(diào)用函數(shù):ADCvalue *
//-------------------------------------------------------------------------*
INT8U ADCmid(INT8U channel)
{
INT8U i,j,k,tmp;
//1.取三次A/D轉(zhuǎn)換結(jié)果
i = ADCvalue(channel);
j = ADCvalue(channel);
k = ADCvalue(channel);
//2.從三次A/D轉(zhuǎn)換結(jié)果中取中值
if (i > j)
{
tmp = i; i = j; j = tmp;
}
if (k >= j)
{
tmp = j;
}
else
{
if (k >= i)
tmp = k;
else
tmp = i;
}
return tmp;
}
//ATDave:1路A/D轉(zhuǎn)換函數(shù)(均值濾波)------------------------------------------*
//功 能:對(duì)通道channel的A/D轉(zhuǎn)換結(jié)果求n次平均值 *
//參 數(shù):n=均值濾波次數(shù)(0~255),channel=通道號(hào)(0~15) *
//返 回:該通道均值濾波后的A/D轉(zhuǎn)換結(jié)果 *
//內(nèi)部調(diào)用函數(shù):ADCmid *
//-------------------------------------------------------------------------*
INT8U ADCave(INT8U n,INT8U channel)
{
//求n次A/D轉(zhuǎn)換的平均值
INT8U i;
INT8U j;
if(0 == n) n = 1;
j = 0;
for (i=0; i<n; i++)
j += ADCmid(channel);
j /= n;
return j;
}
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -