51单片机—ADC0808—05—①_ adc0808测量电压

早晚也是闲着没事情做~~干脆就发点简单的东西,毕竟所谓的复杂就是一堆简单的堆出来的~~~究其根本,没有什么复杂的~

毕竟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 codeseg_disp[4]={0x10,0x20,0x40,0x00};//LED显示的控制代码
ucharcount;//LED显示位控制
sbit tem=P2^0;
uchar temp_0=0;
//------------------------------------------------------------------------------
//定时器初始化函数
51单片机—ADC0808—05—①_ adc0808测量电压
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;//转换启动信号
sbitOE=P3^1;//输出允许信号
sbitEOC=P3^2;//转换结束状态信号
sbitCLK=P3^7;//时钟信号输入端,ADC0808内部没有时钟电路,所需的时钟信号由外部输入,通常频率为500KHz
ucharget_data;//ADC0808转换后的数值
uchartemp;//用于存储ADC0808转换后处理过程中的临时数值
uchardisplay[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;
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/123485.html

更多阅读

51单片机基础3 80c51单片机

以下资料转摘自网络并经适当整理,请参照使用。选择1、当MCS-51复位时,下面说法正确的是(A )。A、PC=0000HB、SP=00HC、SBUF=00HD、 P0=00H2、PSW=18H时,则当前工作寄存器是( D)。A、 0组B、 1组C、 2组D、

基于51单片机的直流电机驱动L298 l298n电机驱动电路图

L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为1A,最大可达1.

51单片机的中断体系结构 单片机51中断程序

80C51的中断系统有5个中断源(8052有 6个),2个优先级,可实现二级中断嵌套 。MCS-51系列单片机中断系统的机构如下:与中断系统相关的特殊寄存器:1)中断允许控制寄存器(IE)------控制各中断的开放和屏蔽2)中断优先级控制寄存器(IP)------设置各中断

51单片机最小系统制作 51单片机p0口上拉电阻

查看文章自学51单片机很容易,51单片机最小系统制作2009-06-13 23:01第一章 概述1.1 缘起1. 给51初学者提供一个简单的DIY的教材。第二章 跑马灯和串口2.1 第一步:准备准备一下器件:1、 烙铁(质量好点)2、 焊锡(细)

声明:《51单片机—ADC0808—05—①_ adc0808测量电压》为网友一步踏尽一树白分享!如侵犯到您的合法权益请联系我们删除