你好!欢迎来到 !
语言
当前位置: 首页>> 技术中心>> 单片机入门>> 从零开始学单片机(五)A/D转化

从零开始学单片机(五)A/D转化

关键字: 单片机 AD转换 作者:admin 来源:不详 发布时间:2018-05-19 浏览:1

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

ylt

/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

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

11

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

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

写程序前还得看看时序图

1额

不同的电阻值显示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);

}

编辑:admin 最后修改时间:2018-05-19

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright ? 2014-2023 All Rights Reserved.粤ICP备14043402号-4

Baidu
map