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