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

2025-11-01 08:21:35

1、先来说几点比较重要的问题:

1 proteus的51单片机仿真模型,ale默认无时钟输出,需要按图设置

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

2、2 proteus的adc0809无仿真模型 只有pcb模型和原理图符号

3 使用adc0808代替adc0809

4 adc0808的输出端是反的

意思是 0808的msb要接到单片机端口的lsb。0808的lsb要接到单片机端口的msb

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

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

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

4、使用cd4017进行分频,将单片机的ale输出频率 f=OSC/6mhz=2mhz进行分频

adc0808(9)的频率为1280khz到20khz之间,我们选择500khz,太快转换精度差,太慢没必要。

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

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

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

6、0v仿真

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

7、2.5v仿真

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

8、5v仿真

8bit的ADC 单位分辨率是5/256=19.53125mv

四舍五入 4.98v

注意,这里是0-255一共256个最小单位

而不是255

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

9、源代码 复制到 keil 里面

然后调整一下格式

就可以拿过来用了

#include<reg52.h>#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();    }}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢