多语言展示
当前在线:500今日阅读:31今日分享:25

adc0809做一个5v电压表proteus时钟ale分频4017

对于多通道的数据采集,如果精度要求不是很高,那么我们完全没必要使用高位数的adc,特别是对于自己diy,完全可以从淘宝网购买一些拆机的adc0809,价格非常便宜。用来做多通道的数据采集还是很适合的。下面我就抛砖引玉,使用proteus演示一下如何仿真并制作一个adc0809的电压表
工具/原料

proteus7.8 sp2 和谐版

方法/步骤
1

先来说几点比较重要的问题:1 proteus的51单片机仿真模型,ale默认无时钟输出,需要按图设置

2

2 proteus的adc0809无仿真模型 只有pcb模型和原理图符号3 使用adc0808代替adc08094 adc0808的输出端是反的意思是 0808的msb要接到单片机端口的lsb。0808的lsb要接到单片机端口的msb

3

使用4位一体共阳数码管进行显示。573作驱动

4

使用cd4017进行分频,将单片机的ale输出频率 f=OSC/6mhz=2mhz进行分频adc0808(9)的频率为1280khz到20khz之间,我们选择500khz,太快转换精度差,太慢没必要。

5

可调电压电路,使用电位器

6

0v仿真

7

2.5v仿真

8

5v仿真8bit的ADC 单位分辨率是5/256=19.53125mv四舍五入 4.98v注意,这里是0-255一共256个最小单位而不是255

9

源代码 复制到 keil 里面然后调整一下格式就可以拿过来用了#include#define uint unsigned int#define uchar unsigned charsbit st=P3^0;sbit eoc=P3^2;sbit clk=P3^3;sbit a=P3^4;sbit b=P3^5;sbit c=P3^6;sbit OE=P3^1;sbit dian=P1^7;uchar code dt[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint data1,disi,disan,dier,diyi;/*********延时函数************/void delay(uint ms){    uint i,j;    for(i=ms;i>0;i--)    for(j=110;j>0;j--);}/*********初始化函数************/void init(){    EA=1;//开总中断    ET0=1;//开定时器中断    TMOD=0x01;//定时器工作方式2    TH0=(65536-20)/256;    TL0=(65536-20)%256;//设定时器初值    TR0=1;//启动定时器}/*********AD转化函数************/void AD(){            //OE=0;    st=0;    a=b=c=0; //选择通道0          delay(1);    st=1;            st=0;    delay(5);//    while(eoc==1);//等待转换完毕       OE=1;//打开传送数据    data1=P0;//数据送入P0口}/*********计算除法************/void chufa(){    data1=data1*19.53125;      disi=data1/1000;    disan=data1%1000/100;    dier=data1%1000%100/10;    diyi=data1%1000%100%10;     }/*********显示函数************/void xianshi(){    P1=dt[disi];//整数部分    dian=0;//打开小数点    P2=0x01;    delay(1);    P1=0xff;    P1=dt[disan];//小数点后一位    P2=0x02;    delay(1);    P1=0xff;    P1=dt[dier];//小数点后两位    P2=0x04;    delay(1);    P1=0xff;    P1=dt[diyi];//小数点后第三位    P2=0x08;    delay(1);    P1=0xff;}/*********中断函数************/void time() interrupt 1{    clk=~clk;    TH0=(65536-20)/256;    TL0=(65536-20)%256;}/*********主函数************/void main(void){    init();    while(1)    {        AD();        chufa();        xianshi();    }}

注意事项
1

仿真可以不接晶振

2

ale默认无输出,按图设置则有输出

3

adc0808输出引脚是反的

推荐信息