当前位置:首页 > 单片机 > 单片机
[导读]所谓A/D转换器就是模拟/数字转换器(Analog to Digital Converter 简称ADC)是将输入的模拟信号转换成为数字信号。这里我们用ADC0804做这个试验,下面的图示它的引脚图。/CS:芯片选择信号。VREF:辅助参考电压。/WR:

所谓A/D转换器就是模拟/数字转换器(Analog to Digital Converter 简称ADC)是将输入的模拟信号转换成为数字信号。这里我们用ADC0804做这个试验,下面的图示它的引脚图。

/CS:芯片选择信号。

VREF:辅助参考电压。

/WR:用来启动转换的控制,当/WR自1变为0时,转换器被清除;当/WR回到1时,转换正式启动。

/RD:外部读取转换结果的控制脚输出信号。

/INTR:中断请求信号输出,低电平动。

AGND,DGND:模拟信号以及数字信号接地。

CLK IN,CLK R:时钟输入或接振荡元件(R,C),频率约限制在100KHz~1460KHz。

VIN(+),VIN(-):差动模拟电压输入。输入单端正电压时,VIN(-)接地。

DB0~DB7:8位数字输出。

ADC0804电压输入与数字输出关系如表所示

 

十六进制

 

二进制码

与满刻度的比率

相对电应值VREF=2.560

高四位字节

低四位字节

高四位字节电压

低四位字节电压

F

1111

15/16

15/256

4.800

0.300

E

1110

14/16

14/256

4.480

0.280

D

1101

13/16

13/256

4.160

0.260

C

1100

12/16

12/256

3.840

0.240

B

1011

11/16

11/256

3.520

0.220

A

1010

10/16

10/256

3.200

0.200

9

1001

9/16

9/256

2.880

0.180

8

1000

8/16

8/256

2.560

0.160

7

0111

7/16

7/256

2.240

0.140

6

0110

6/16

6/256

1.920

0.120

5

0101

5/16

5/256

1.600

0.100

4

0100

4/16

4/256

1.280

0.080

3

0011

3/16

3/256

0.960

0.060

2

0010

2/16

2/256

0.640

0.040

1

0001

1/16

1/256

0.320

0.020

0

0000

 

 

0

0

接下来看看实验电路的原理图

片选CS接P2.4,RD接P3.7,WR接P3.6,为了简单起见INTR没有使用它

AD芯片的VIN(+)接一个可调电阻,改变阻值能够带来不同的电压,以此作为输入。

写程序前还得看看时序图

不同的电阻值显示0-255不同大小的值,延时时间略长,有点闪烁

#include

#include

sbit ADCS = P2^4; //ADC0804片选信号,低电平有效

sbit ADWR = P3^6; //ADC0804写信号,低电平有效

sbit ADRD = P3^7; //ADC0804读信号,低电平有效

unsigned char code_table[]=

{

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0

};

sbit Led8En = P2^6; //数码管,锁存器使能信号,高电平有效 ,数码管输出P0

sbit Led8CS = P2^7; //数码管片选,锁存器使能信号,电平有效,低电平选中

void delay(unsigned int times);

void dlight(unsigned char i, unsigned char number, unsigned int duration);

void ADC0804();

void main()

{

while(1)

{

ADC0804();

delay(100);

}

}

void delay(unsigned int times)

{

unsigned int i,j;

for (i=0; i

for (j=0; j<125; j++)

_nop_();

}

void ADC0804()

{

unsigned char temp;

ADCS = 0;

ADWR = 0;

delay(1);

ADWR = 1;

ADCS = 1;

delay(10);

ADCS = 0;

ADRD = 0;

_nop_();

temp = P1;

ADRD = 1;

ADCS = 1;

dlight(0xEE,code_table[temp % 10],1);

dlight(0xDD,code_table[temp / 100],1);

dlight(0xBB,code_table[(temp/10 )% 10],1);

}

void dlight(unsigned char cs, unsigned char display, unsigned int duration)

{

Led8CS = 1;

P0=cs; //片选

Led8CS = 0;

Led8En = 1;

P0=display; //. a b c d e f g, 高电平亮

Led8En = 0;

delay(duration);

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭