pic單片機(jī)A/D轉(zhuǎn)換程序
//選擇RAO做為模擬輸入通道;
//連續(xù)轉(zhuǎn)換4次再求平均值做為轉(zhuǎn)換結(jié)果
//最后結(jié)構(gòu)只取低8位
//結(jié)果送數(shù)碼管的低3位顯示
#include
__CONFIG(0x1832);
//芯片配置字,看門(mén)狗關(guān),上電延時(shí)開(kāi),掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};
//定義常數(shù)0-9的數(shù)據(jù)表格
voidDELAY();//delay函數(shù)申明
voidinit();//I/O口初始化函數(shù)申明
voiddisplay(intx);//顯示函數(shù)申明
//------------------------------------------------
//主程序開(kāi)始
voidmain()
{
intresult=0x00;//定義轉(zhuǎn)換結(jié)果寄存器
while(1)//死循環(huán)
{
inti;//定義循環(huán)次數(shù)控制寄存器
result=0x00;//轉(zhuǎn)換結(jié)果清0
for(i=5;i>0;i--)//求5次轉(zhuǎn)換結(jié)果的平均值
{
init();//調(diào)用初始化函數(shù)
ADGO=0X1;//開(kāi)啟轉(zhuǎn)換過(guò)程
while(ADGO);//等待轉(zhuǎn)換完成
result=result+ADRESL;//累計(jì)轉(zhuǎn)換結(jié)果
}
result=result/5;//求5次結(jié)果的平均值
display(result);//調(diào)用顯示函數(shù)
}
}
//-----------------------------------------------
//初始化函數(shù)
voidinit()
{
PORTA=0XFF;
PORTD=0XFF;//熄滅所有顯示
TRISA=0X1;//設(shè)置RA0為輸入,其他為輸出
TRISD=0X00;//設(shè)置D口全為輸出
ADCON1=0X8E;//轉(zhuǎn)換結(jié)果左對(duì)齊,RA0做模擬輸入口,其它做普通I/O
ADCON0=0X41;//系統(tǒng)時(shí)鐘Fosc/8,選擇RA0通道,允許ADC工作
DELAY();//保證采樣延時(shí)
}
//-----------------------------------------------
//顯示函數(shù)
voiddisplay(intx)
{
intbai,shi,ge,temp;//定義4個(gè)臨時(shí)變量
temp=x;//暫存AD轉(zhuǎn)換的結(jié)果
bai=temp/0x64;//求顯示的百位
shi=(temp%0x64)/0xa;//求顯示的十位
ge=(temp%0x64)%0xa;//求顯示的個(gè)位
PORTD=TABLE[bai];//查表得百位顯示的代碼
PORTA=0x37;//RA3輸出低電平,點(diǎn)亮百位顯示
DELAY();//延時(shí)一定時(shí)間,保證顯示亮度
PORTD=TABLE[shi];//查表得十位顯示的代碼
PORTA=0x2F;//RA4輸出低電平,點(diǎn)亮十位顯示
DELAY();//延時(shí)一定時(shí)間,保證亮度
PORTD=TABLE[ge];//求個(gè)位顯示的代碼
PORTA=0x1F;//RA5輸出低電平,點(diǎn)亮個(gè)位顯示
DELAY();//延時(shí)一定時(shí)間,保證亮度
}
//----------------------------------------------
//延時(shí)程序
voidDELAY()//延時(shí)程序
{
inti;//定義整形變量
for(i=0x100;i--;);//延時(shí)
}