您的位置 首页 嵌入式

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

所谓AD转换器就是模拟数字转换器(AnalogtoDigitalConverter简称ADC)是将输入的模拟信号转换成为数字信号。这里我们用ADC0804做这

所谓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;
Led​​8En = 1;
P0=display; //. a b c d e f g, 高电平亮
Led8En = 0;
delay(duration);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/262211.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部