微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机—ADC0808—05—①

51单片机—ADC0808—05—①

时间:11-26 来源:互联网 点击:
早晚也是闲着没事情做~~干脆就发点简单的东西,毕竟所谓的复杂就是一堆简单的堆出来的~~~究其根本,没有什么复杂的~

毕竟ADC这个东西用的比较多,也很成熟,做出来的东西也是挺多的,所以这个东东就用两三个实验来叙述吧~

先说一下ADC0808 这款A/D转换器的介绍:

1、ADC0808的简介

A/D转换器是一种能把输入模拟电压或者电流信息变成与其成正比的数字量信息的电路芯片。A/D转换器用于实现模拟量到数字量的转换。

ADC0808是典型的8通道模拟输入8位并行数字输出的逐次逼近式A/D转换器。该转换器采用COMS工艺,可以实现8路模拟信号的分时采集。片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路。

1)ADC0808芯片的介绍



2)ADC0808的引脚





3)ADC0808的工作流程



4)与51单片机的借口


基本上也就这么点东西~~~很简单吧~~我感觉也是~~

我艹,然我白白调了半天程序,就那么一点点的错误,浪费了好多的时间,真不爽啊~~~

贴图看看~~



由于以后会用模块化编程,便于自己以后直接调用~~~,这个主函数:

//------------------------------------------------------------------------------
//实现由ADC0808作为A/D转换器对电阻进行电压的测试
//数码管显示的数据范围为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;
//------------------------------------------------------------------------------
//定时器初始化函数
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的初始化函数了(一些辅助的函数我就不贴出来了,比如宏定义啊,软件延时啊,引脚定义什么的~~):

//------------------------------------------------------------------------------
//adc0808的文件函数
#include"reg52.h"
#include"delay.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
sbit START=P3^0; //转换启动信号
sbit OE=P3^1;//输出允许信号
sbit EOC=P3^2;//转换结束状态信号
sbit CLK=P3^7;//时钟信号输入端,ADC0808内部没有时钟电路,所需的时钟信号由外部输入,通常频率为500KHz
uchar get_data;//ADC0808转换后的数值
uchar temp;//用于存储ADC0808转换后处理过程中的临时数值
uchar display[3];//存储十进制的数值
//------------------------------------------------------------------------------
//ADC0808的启动和转换的初始化函数
void ADC0808_init()
{
START=0;//START信号上升沿,将所有内部寄存器清0
START=1;
START=0;//START信号下降沿,开始A/D转换,在转换过程中START保持为低电平

while(EOC==0);//等待转换结束

OE=1;//允许器件输出转换的结果

get_data=P0;//P0口接ADC0808,你懂得~~
temp=get_data;//暂存转换结果

OE=0;

display[0]=get_data/100;//将转换的结果转换为10进制数
display[1]=get_data0/10;
display[2]=get_data;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top