51單片機(jī)教程ADC0809模數(shù)轉(zhuǎn)換
//晶振:12M
//采用查詢方式讀AD轉(zhuǎn)換后的值
#include
#include "math.h"
#include "intrins.h"
unsigned char
0x92,0x82,0xf8,0x80,0x90,
0xC1,0XB7,0xFF
};//數(shù)字0~9及"U="”“共陽(yáng)數(shù)碼管代碼
unsigned char
0X12,0X02,0X78,0X00,0X10
};//帶數(shù)點(diǎn)的0~9共陽(yáng)數(shù)碼管代碼
unsigned char
0xef,0xdf,0xbf,0x7f};//數(shù)碼管位選代碼
unsigned char
unsigned char
unsigned char
unsigned char
unsigned long int
sbit START=P3^0;
sbit EOC=P3^2;
sbit OE=P3^1;
sbit AD_ALE=P3^3;
voidmain(void)
{
TMOD=0x01;//選擇定時(shí)器T0,方式為1(16位定時(shí)器)
TH0=(65536-3000)/256;//定時(shí)3MS初值
TL0=(65536-3000)%6;
TR0=1;
ET0=1;
EA=1;
AD_ALE=0;
START=0;
OE=0;
while(1)
{
if(flag==1)//每隔40ms啟動(dòng)一次AD采樣
{
flag=0;
AD_ALE=1;//鎖存輸入通道
START=0;//驅(qū)動(dòng)AD轉(zhuǎn)換
START=1;
AD_ALE=0;
START=0;//保持低電平
while(EOC==0);//等待AD轉(zhuǎn)換結(jié)束
TR0=0;//AD轉(zhuǎn)換結(jié)束時(shí)先停止T0
P0=0XFF;//關(guān)閉數(shù)碼管顯示,呵呵,其實(shí)人眼是感覺(jué)不到數(shù)碼管熄滅的
P1=0XFF;// 這個(gè)很重要
OE=1;//轉(zhuǎn)換結(jié)束,允許AD值輸出
getdata=P1;//讀出AD值,如果硬件連接上改成P2口來(lái)讀AD值,這句就改成"getdata=P2;"
OE=0;//禁止輸出
getdata=(unsigned long int)((unsigned long int)(getdata*500)/255);//轉(zhuǎn)換成電壓
dispbuff[2]=getdata/100;
dispbuff[1]=(getdata0)/10;
dispbuff[0]=getdata;
TR0=1;//重新啟動(dòng)T0
}
}
}
voidt0(void) interrupt1
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%6;
if(disp_count==2)
P0=dot_numcode[dispbuff[disp_count]];
else
P0=numcode[dispbuff[disp_count]];
P1=bitcode[disp_count];
disp_count++;
flag_count++;
if(disp_count==8)
{
disp_count=0;
}
if(flag_count==100)
{
flag=1;
flag_count=0;
}
}
關(guān)鍵詞: 51單片機(jī)ADC0809模數(shù)轉(zhuǎn)
相關(guān)新聞