ADC0809模数转换与显示 您所在的位置:网站首页 8位ad转换器参考电压5V的理论值计算 ADC0809模数转换与显示

ADC0809模数转换与显示

2024-07-02 23:47| 来源: 网络整理| 查看: 265

ADC0809简介

ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。 ADC0808芯片有28条引脚,采用双列直插式封装,各引脚功能如下:

1~5和26~28(IN0~IN7):8路模拟量输入端。   8、14、15和17~21:8位数字量输出端。   22(ALE):地址锁存允许信号,输入,高电平有效。(这里接START,跟随变化)   6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。   7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。   9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。   10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。   12(VREF(+))和16(VREF(-)):参考电压输入端   11(Vcc):主电源输入端。   13(GND):地。   23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路

精华部分(ADC0809运作函数)

ST = 0;// ST = 1;//复位 ST = 0;//开始转换 while(EOC == 0);//等待EOC变1,等待AD转换信号结束 OE = 1;//数据输出开启 Display_Result(P3);//p3采集完的数据送到数码管 OE = 0;//数据输出关闭

在这里插入图片描述

A B C来控制通道输入

数码管显示

ADC0809驱动有7个输出端口 0000 0000,所以我们可以知道他的值得范围0x00—0xFF(换算成十进制0—255),对应的电压值以5V 为例,取比例值,举例子:

当你数码管显示204时,那么你对应的电压值: 204/255=x/5V x=4V 测量的电压V=5-4=1V

可见数码管的数值=滑动变阻器下部分电压值(接地那一端)

在这里插入图片描述

/*************** writer:shopping.w ******************/ #include #define uint unsigned int #define uchar unsigned char uchar code LEDData[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f//数码管显示 }; sbit OE = P1^0; sbit EOC = P1^1; sbit ST = P1^2; sbit CLK = P1^3; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i TMOD = 0x02;//定时模式2 TH0 = 0x14; TL0 = 0x00; IE = 0x82; TR0 = 1; P1 = 0x3f; while(1) { ST = 0;// ST = 1;//复位 ST = 0;//开始转换 while(EOC == 0);//等待EOC变1,等待AD转换信号结束 OE = 1;//数据输出开启 Display_Result(P3);//p3采集完的数据送到数码管 OE = 0;//数据输出关闭 } } void Timer0_INT() interrupt 1 { CLK = !CLK;//高低电平转换 } 问题一:滑动电阻调到最大或者最少时,数码管可以显示正确值,但是当调至中间位置时,显示乱码。

解决:说明你的ADC0808输出引脚接反了!ADC0808 OUT0.1.2.3.4.5.6.7引脚,对应的引脚Px.7.6.5.4.3.2.1.0,。之前掉这个坑花了我好几个小时!

PWM输出

输出口P3.0,能够通过滑动电阻进行调节,输出电压的占空比,后续可加个直流电机进行调速

在这里插入图片描述

#include #define uint unsigned int #define uchar unsigned char sbit adc = P2^0;//add a 控制 sbit CLK = P2^4;//时钟脉冲输入端。要求时钟频率不高于640KHZ sbit ST = P2^5;// A/D转换启动信号 sbit EOC = P2^6;//A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 sbit OE = P2^7;//数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量 sbit PWM = P3^0; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i adc=0; ST = 0;// ST = 1;//复位 ST = 0;//开始转换 while(!EOC);//当EOC等于1, OE = 1;//打开输出 Val = P1;// OE = 0;//关闭输出 if(Val == 0)//当电压等于0的时候 { PWM = 0; DelayMS(0xff);//无限延迟 continue; } if(Val == 0xff)//当电压等于最大值的时候 { PWM = 1; DelayMS(0xff);//无线延迟 continue; } PWM = 1; DelayMS(Val);//高电平占空比 PWM = 0; DelayMS(0xff - Val);//低电平占空比 } } void Timer0_INT() interrupt 1 { CLK = !CLK; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有