立即注冊(cè) 登錄
返回首頁(yè)

uid:167525的個(gè)人空間

日志

ADC0804工作原理及其在單片機(jī)中的應(yīng)用 基于Proteus仿真

已有 2179 次閱讀2017-8-6 15:02

ADC0804在單片機(jī)中的簡(jiǎn)單應(yīng)用舉例

如下圖所示,本例ADC0804中的VCC=5VVREF/2引腳懸空(懸空則相當(dāng)于與VCC共接5V電源),因此ADC轉(zhuǎn)換的參考電壓為VCC的值,即5V。VIN-接地,而VIN+連接滑動(dòng)變阻器RV1的輸出,因此VIN+的電壓輸入范圍為0V5V,正好處于參考電壓范圍內(nèi)。

引腳接地, 和分別連接單片機(jī)的P3^6P3^7引腳,而DB0~DB7連接單片機(jī)的P1.

P0口接數(shù)碼管的段選線(xiàn),P2口低四位接數(shù)碼管的位選線(xiàn)。

 

程序主要實(shí)現(xiàn)以下功能:

1)控制ADC0804芯片對(duì)VIN(+)引腳輸入的電壓值進(jìn)行正確采樣,讀取采樣結(jié)果。

2)對(duì)采樣值進(jìn)行模數(shù)變換,將轉(zhuǎn)換后數(shù)字量后顯示在4段數(shù)碼管上。

C程序如下:

#include <reg51.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit wr=P3^6;

sbit rd=P3^7;

uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //共陽(yáng)顯示代碼

void delay(uint x)   //延時(shí)函數(shù) delay(1)延時(shí)0.992ms,大約為1ms

{

 uchar i;

 while(x--)

 for(i=0;i<120;i++);

}

void display(uchar db) //數(shù)碼管顯示函數(shù),用于顯示模數(shù)轉(zhuǎn)換后得到的數(shù)字量

{

    uchar bw,sw,gw; //bw,sw,gw分別等于db百位,十位,個(gè)位上的數(shù)

bw=db/100;

sw=db%100/10;

gw=db%10;

 P2=0x01;         //點(diǎn)亮第一只數(shù)碼管

P0=dis[bw]&0x7f;  //最高位置0,點(diǎn)亮第一只數(shù)碼管的小數(shù)點(diǎn),

delay(5);

P2=0x02;   //點(diǎn)亮第二只數(shù)碼管

P0=dis[sw];

delay(5);

P2=0x04;   //點(diǎn)亮第三只數(shù)碼管

P0=dis[gw];

delay(5);  

P2=0x08;   //點(diǎn)亮第四只數(shù)碼管

P0=dis[0];  //第四只數(shù)碼管一直顯示0

delay(5);

}  

 

void main()

{

uchar i;

while(1)

{

wr=0;    //在片選信號(hào)CS為低電平情況下(由于CS接地,所以始終為低電平),

_nop_();    //WR由低電平到高電平時(shí),即上升沿時(shí),AD開(kāi)始采樣轉(zhuǎn)換

wr=1;

delay(1);   //延時(shí)1ms,等待采樣轉(zhuǎn)換結(jié)束

    P1=0xff;   //這條語(yǔ)句不能少,我也還不知道為什么

  rd=0;   //RD腳置低電平后,再延時(shí)大于135ns左右(這里延時(shí)1us),

_nop_();   //即可從DB腳讀出有效的采樣結(jié)果,傳送到P1

for(i=0;i<10;i++)  //刷新顯示一段時(shí)間

display(P1);     //顯示從DB得到的數(shù)字量   

    }

}

Proteus仿真運(yùn)行結(jié)果如下:


路過(guò)

雞蛋

鮮花

握手

雷人

評(píng)論 (0 個(gè)評(píng)論)

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

返回頂部