新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)—ADC0808—05—①

51單片機(jī)—ADC0808—05—①

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
早晚也是閑著沒(méi)事情做~~干脆就發(fā)點(diǎn)簡(jiǎn)單的東西,畢竟所謂的復(fù)雜就是一堆簡(jiǎn)單的堆出來(lái)的~~~究其根本,沒(méi)有什么復(fù)雜的~

畢竟ADC這個(gè)東西用的比較多,也很成熟,做出來(lái)的東西也是挺多的,所以這個(gè)東東就用兩三個(gè)實(shí)驗(yàn)來(lái)敘述吧~

本文引用地址:http://m.butianyuan.cn/article/201611/322019.htm

先說(shuō)一下ADC0808 這款A(yù)/D轉(zhuǎn)換器的介紹:

1、ADC0808的簡(jiǎn)介

A/D轉(zhuǎn)換器是一種能把輸入模擬電壓或者電流信息變成與其成正比的數(shù)字量信息的電路芯片。A/D轉(zhuǎn)換器用于實(shí)現(xiàn)模擬量到數(shù)字量的轉(zhuǎn)換。

ADC0808是典型的8通道模擬輸入8位并行數(shù)字輸出的逐次逼近式A/D轉(zhuǎn)換器。該轉(zhuǎn)換器采用COMS工藝,可以實(shí)現(xiàn)8路模擬信號(hào)的分時(shí)采集。片內(nèi)有8路模擬選通開(kāi)關(guān),以及相應(yīng)的通道地址鎖存用譯碼電路。

1)ADC0808芯片的介紹



2)ADC0808的引腳





3)ADC0808的工作流程



4)與51單片機(jī)的借口


基本上也就這么點(diǎn)東西~~~很簡(jiǎn)單吧~~我感覺(jué)也是~~

我艸,然我白白調(diào)了半天程序,就那么一點(diǎn)點(diǎn)的錯(cuò)誤,浪費(fèi)了好多的時(shí)間,真不爽啊~~~


貼圖看看~~



由于以后會(huì)用模塊化編程,便于自己以后直接調(diào)用~~~,這個(gè)主函數(shù):


//------------------------------------------------------------------------------
//實(shí)現(xiàn)由ADC0808作為A/D轉(zhuǎn)換器對(duì)電阻進(jìn)行電壓的測(cè)試
//數(shù)碼管顯示的數(shù)據(jù)范圍為0~255
#include"reg52.h"
#include"macroandconst.h"
#include"delay.h"
#include"adc0808.h"
//------------------------------------------------------------------------------
uchar code seg_disp[4]={0x10,0x20,0x40,0x00};//LED顯示的控制代碼
uchar count;//LED顯示位控制
sbittem=P2^0;
uchar temp_0=0;
//------------------------------------------------------------------------------
//定時(shí)器初始化函數(shù)
void timer_init()
{
TMOD=0X12;//T0工作在模式2,T1工作在模式1
TH0=(256-50)/256;
TL0=TH0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;

ET0=1;
ET1=1;
TR0=1;
TR1=1;
//PT1=1;

EA=1;
}
//------------------------------------------------------------------------------
//main
void main()
{
timer_init();
while(1)
{
ADC0808_init();
}
}
//------------------------------------------------------------------------------
//timer0
void timer0() interrupt 1
{
CLK=~CLK;
if(temp_0==100)
{
temp_0=0;
tem=~tem;
}
}
//------------------------------------------------------------------------------
//timer1
void timer1() interrupt 3
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
for(count=0;count<4;count++)
{
P1=seg_disp[count]|display[count];
delay(10);
}
}

然后就是ADC0808的初始化函數(shù)了(一些輔助的函數(shù)我就不貼出來(lái)了,比如宏定義啊,軟件延時(shí)啊,引腳定義什么的~~):

//------------------------------------------------------------------------------
//adc0808的文件函數(shù)
#include"reg52.h"
#include"delay.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
sbit START=P3^0; //轉(zhuǎn)換啟動(dòng)信號(hào)
sbit OE=P3^1;//輸出允許信號(hào)
sbit EOC=P3^2;//轉(zhuǎn)換結(jié)束狀態(tài)信號(hào)
sbit CLK=P3^7;//時(shí)鐘信號(hào)輸入端,ADC0808內(nèi)部沒(méi)有時(shí)鐘電路,所需的時(shí)鐘信號(hào)由外部輸入,通常頻率為500KHz
uchar get_data;//ADC0808轉(zhuǎn)換后的數(shù)值
uchar temp;//用于存儲(chǔ)ADC0808轉(zhuǎn)換后處理過(guò)程中的臨時(shí)數(shù)值
uchar display[3];//存儲(chǔ)十進(jìn)制的數(shù)值
//------------------------------------------------------------------------------
//ADC0808的啟動(dòng)和轉(zhuǎn)換的初始化函數(shù)
void ADC0808_init()
{
START=0;//START信號(hào)上升沿,將所有內(nèi)部寄存器清0
START=1;
START=0;//START信號(hào)下降沿,開(kāi)始A/D轉(zhuǎn)換,在轉(zhuǎn)換過(guò)程中START保持為低電平

while(EOC==0);//等待轉(zhuǎn)換結(jié)束

OE=1;//允許器件輸出轉(zhuǎn)換的結(jié)果

get_data=P0;//P0口接ADC0808,你懂得~~
temp=get_data;//暫存轉(zhuǎn)換結(jié)果

OE=0;

display[0]=get_data/100;//將轉(zhuǎn)換的結(jié)果轉(zhuǎn)換為10進(jìn)制數(shù)
display[1]=get_data0/10;
display[2]=get_data;
}



關(guān)鍵詞: 51單片機(jī)ADC080

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉