打印
[范例教程]

ADC0808多AD路采集

[复制链接]
683|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
janewood|  楼主 | 2023-7-17 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
uchar i,j,CH;
sbit        EOC=P2^7;
sbit        AE=P2^6;
sbit        ST=P2^5;
sbit        OE=P2^4;
sbit        SWITCH=P3^3;
sbit        ADDA=P2^0;
sbit        ADDB=P2^1;
sbit        ADDC=P2^2;
sbit        RS=P3^0;
sbit        LCDEN=P3^1;
sbit        HLE=P3^5;
sbit        HOE=P3^6;
uchar        addata,f,KEY=0,ALERT,x,pro,y,z;
uchar   lastKEY;
uchar        code dis[]="Channel";
uchar        code detalZ[]="IT      ";
uchar        code disp1[]="OT     ";
uchar        code disp2[]="ET    ";
uchar        code disv1[]="YT   ";
uchar        code disv2[]="QA    ";
uchar        code result[]="result     ";

unsigned int canshu_p = 2;
unsigned int canshu_g = 9;
//unsigned int CHA[6] ;
unsigned int CHA[6] ;
float  fenzi,fenmu;
void delay()
{
        for(i=0;i<10;i++)
                for(j=0;j<100;j++);
}
void write_com(uchar com)
{
RS=0;
delay();
P1=com;
delay();
LCDEN=1;
delay();
LCDEN=0;
delay();
}
void write_data(uchar dat)
{
RS=1;
delay();
P1=dat;
delay();
LCDEN=1;
delay();
LCDEN=0;
delay();
}

void display()
{               
   
    if(lastKEY!=KEY)
    {
        write_com(0x01);//清屏
    lastKEY = KEY;
    }

   
   
   
   
        write_com(0x80);
   
            for(x=0;x<7;x++)
        {
                write_data(dis[x]);
        }
   
   
        write_com(0x80+0x08);
           
        //write_data(KEY+0x30);
    if(KEY==0){
   
             for(x=0;x<6;x++)
        {
                write_data(detalZ[x]);
        }   
    }
    if(KEY==1){
           
             for(x=0;x<2;x++)
        {
                write_data(disp1[x]);
        }   
    }
      if(KEY==2){
                       
             for(x=0;x<2;x++)
        {
                write_data(disp2[x]);
        }   
    }  
   
        if(KEY==3){
               
             for(x=0;x<2;x++)
        {
                write_data(disv1[x]);
        }   
    }
        if(KEY==4){
             for(x=0;x<2;x++)
        {
                write_data(disv2[x]);
        }   
    }
        
       if(KEY==5){
              
             for(x=0;x<8;x++)
        {
                write_data(result[x]);
        }   
    }
   
        write_com(0x80+0x47);
        write_data(CHA[KEY]/100+0x30);
        write_data(CHA[KEY]/10%10+0x30);
        write_data(CHA[KEY]%10+0x30);
}
void init()
{        HLE=0;
        LCDEN=0;
        write_com(0x38);//显示设置
        write_com(0x0c);//显示开关
        write_com(0x06);//屏幕不移动
        write_com(0x01);//清屏

        write_com(0x80);
        for(x=0;x<7;x++)
        {
                write_data(dis[x]);
        }

         CH=0;
         IT1=1;
         EX1=1;
         EA=1;

         TMOD=0x01;
         TH0=(65536-1250)/256;
         TL0=(65536-1250)%256;
         ET0=1;
         TR0=1;
         

}
void gettem(uchar x)
{      
        switch(x)
        {
                case 0:{ADDA=0;ADDB=0;ADDC=0;break;}
                case 1:{ADDA=0;ADDB=0;ADDC=1;break;}
                case 2:{ADDA=0;ADDB=1;ADDC=0;break;}
                case 3:{ADDA=0;ADDB=1;ADDC=1;break;}
                case 4:{ADDA=1;ADDB=0;ADDC=0;break;}
//                case 5:{ADDA=1;ADDB=0;ADDC=1;break;}
//                case 6:{ADDA=1;ADDB=1;ADDC=0;break;}
//                case 7:{ADDA=1;ADDB=1;ADDC=1;break;}
        }
        OE=0;
        AE=1;
        ST=1;
        AE=0;
        ST=0;
        while(!EOC);
        OE=1;
        addata=P0;
        CHA[x]=addata;
}
main()
{
        init();
        display();
        while(1)
        {      
                ALERT=0xff;
                z=0x7f;
                for(y=0;y<8;y++)
                {
                        if(CHA[y]>30)
                                ALERT=ALERT&z;
                                z=_cror_(z,1);
                }
                HLE=1;
                P1=ALERT;
                delay();
                HLE=0;

     
      
              fenzi = (float)CHA[0];
              fenmu=(float)CHA[1];

        CHA[5] = (unsigned int)((fenzi/fenmu)*100);
                display();
        }
         

}
void X1_ISR(void) interrupt 2
{
        if(SWITCH==0)               
          {               
                          delay();
                        if(SWITCH==0)
                        {
                                KEY++;
                       
                        }

                        if(KEY==6)
                                KEY=0;
                       
                }
      
}
void T0_ISR(void) interrupt 1
{
        TH0=(65536-1250)/256;
        TL0=(65536-1250)%256;
        CH++;
        if(CH==5)
                CH=0;
        gettem(CH);
}


使用特权

评论回复
沙发
Pretext| | 2023-7-21 11:30 | 只看该作者
ADC0808是一款很经典的ADC传感器。

使用特权

评论回复
板凳
V853| | 2023-7-21 11:31 | 只看该作者
以前做设计基本用的就是它,不过现在工作了就不用它了

使用特权

评论回复
地板
软核硬核| | 2023-7-21 11:31 | 只看该作者
8位分辨率,其实挺低的,不过倒是能用的了。

使用特权

评论回复
5
中国龙芯CDX| | 2023-7-24 13:17 | 只看该作者
ADC0808这个ADC硬件驱动确实很经典,ADC精度高

使用特权

评论回复
6
OKAKAKO| | 2023-7-25 13:10 | 只看该作者
多路采集是不是需求硬件得支持?如果一路AD如何实现多路呢?

使用特权

评论回复
7
jf101| | 2023-7-25 13:25 | 只看该作者
ADC0808这个芯片其实是支持多路采集的吧

使用特权

评论回复
8
星辰大海不退缩| | 2023-7-25 15:56 | 只看该作者
ADC0808是CMOS单片型逐次逼近式A/D转换器

使用特权

评论回复
9
小夏天的大西瓜| | 2023-7-25 22:00 | 只看该作者
ADC0808的精度为 1/2LSB

使用特权

评论回复
10
AdaMaYun| | 2023-7-26 11:31 | 只看该作者
ADC0808这个芯片是如何与芯片通信的?

使用特权

评论回复
11
sheflynn| | 2023-8-7 07:39 | 只看该作者
要根据实际应用场景和输入信号的电压范围进行选择,以免出现输入电压超出范围的问题。

使用特权

评论回复
12
plsbackup| | 2023-8-7 08:12 | 只看该作者
提供稳定的电源给 ADC0808 是非常重要的。

使用特权

评论回复
13
yeates333| | 2023-8-7 17:16 | 只看该作者
ADC0808 需要使用多个引脚来连接到单片机或其他控制器。

使用特权

评论回复
14
mattlincoln| | 2023-8-7 19:40 | 只看该作者
在使用ADC0808多路模拟采集芯片进行模拟信号采集时,需要注意输入电压范围、输入信号幅度、采样时间、输出格式和信号线连接等方面的问题

使用特权

评论回复
15
updownq| | 2023-8-7 21:18 | 只看该作者
在进行多路采样时,需要考虑信号转换的时间,以便在下一次转换之前给予足够的时间。确保采样速率不超过 ADC 的最大限制,并根据需求合理安排采样间隔。

使用特权

评论回复
16
yeates333| | 2023-8-7 22:26 | 只看该作者
ADC0808 的输入电压范围为 0V 到 Vref(参考电压),需要确保被采集的模拟信号在此范围内。如果信号超出了该范围,可能会导致测量误差或损坏 ADC。

使用特权

评论回复
17
pmp| | 2023-8-9 21:14 | 只看该作者
采集到的数据可能会受到噪声、偏移和非线性等因素的影响

使用特权

评论回复
18
saservice| | 2023-8-14 15:11 | 只看该作者
DC0808 需要一个稳定的参考电压 Vref。

使用特权

评论回复
19
fengm| | 2023-8-14 16:46 | 只看该作者
ADC0808 的输入是一个采样保持电路,需要提供足够的输入阻抗以避免额外的信号失真。选择合适的放大器或缓冲器来驱动 ADC 输入引脚,并确保输入阻抗足够高。

使用特权

评论回复
20
hearstnorman323| | 2023-8-14 21:39 | 只看该作者
在需要高精度测量时,可能需要进行校准和数据处理,例如校准偏移量、线性化处理和滤波等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1254

帖子

1

粉丝