首先来一段程序:

#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit CLK=P2^0;
sbit ST=P2^1;
sbit EOC=P2^2;
sbit OE=P2^3;
sbit ADDA=P2^5;
sbit ADDB=P2^6;
sbit ADDC=P2^7;
sbit X1=P3^4;
sbit X2=P3^5;
sbit X3=P3^6;
sbit P07=P0^7;
sbit LED=P3^7;
uint temp;
uchar getdata;
bit read_flag=0;//bit在RAM中的可位寻址
uchar b;
uchar s;
uchar g;
uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delayus(uchar us){
        uchar i;
        while(us--)
        for(i=0;i<120;i++)        
        ;
}
void init(){
        TMOD=0x21;//T1为方式2,8位自动重装,T0为方式1,16位
        TH0=(65536-200)/256;
        TL0=(65536-200)%256;
        TH1=0XFD;//波特率9600
        TL1=0XFD;
        PCON=0X00;
        SCON=0X50;//SCON:模式1,8-bitUART,使能接收
        ES=1;
        ET0=1;
// ET1=0;
        EA=1;
        TR1=1;
        TR0=1;
}
void timer0()interrupt 1
{        TH0=(65535-200)/256; 
        TL0=(65535-200)%256; 
        CLK=~CLK;
}


void disp(){
                X1=1;
                X2=0;
                X3=0;
                P0=table[b];
                P07=0;
                X1=1;
                X2=0;
                X3=0;
                delayus(5);
                P0=0XFF;
        
                P0=table[s];
                X1=0;
                X2=1;
                X3=0;
                delayus(5);
                P0=0XFF;


                P0=table[g];
                X1=0;
                X2=0;
                X3=1;
                delayus(5);
                P0=0XFF;
}
void adda(uchar c,uchar x,uchar z){//通道选择
        ADDA=z;
        ADDB=x;
        ADDC=c;


}
void send(uchar x){//串口发送数据
        EA=0;
        SBUF=x;
        while(TI==0);//发送成功,必须将TI置为零
        TI=0;
        EA=1;
}
void main(){
uchar i;
        P1=0XFF;
        init();
        LED=0;
        P2=0XFF;
       // adda(1,0,0);
        while(1){
for(i=0;i<8;i++){
if(i==0)
{
adda(0,0,0);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(25);
}
else if(i==1)
{
adda(0,0,1);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else if(i==2)
{
adda(0,1,0);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else if(i==3)
{
adda(0,1,1);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else if(i==4)
{
adda(1,0,0);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else if(i==5)
{
adda(1,0,1);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else if(i==6)
{
adda(1,1,0);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);
}
else
{
adda(1,1,1);
        ST=0;
        OE=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P1;
        send(getdata);
        OE=0;
        temp=getdata*1.0/255*500;
        b=temp/100;
        s=temp/10%10;
        g=temp%10;
        disp();
delayus(200);//串口传输需要时间
//while(1);
}
}
        }
}
void ser()interrupt 4
{        
        if(RI==1){
        RI=0;
        
        LED=~LED;
        
}

}

其次是仿真图:

ADC0809,8路通道采集和串口通信,labview上位机显示

再次是和串口助手的通信:

ADC0809,8路通道采集和串口通信,labview上位机显示

最后是labview采集到的数据:

ADC0809,8路通道采集和串口通信,labview上位机显示

相关文章:

  • 2022-02-23
  • 2022-02-15
  • 2022-02-08
  • 2022-02-08
  • 2022-12-23
  • 2021-12-27
  • 2021-05-02
  • 2021-11-23
猜你喜欢
  • 2021-11-18
  • 2021-09-20
  • 2021-05-14
  • 2021-09-07
  • 2022-01-09
  • 2021-11-29
  • 2021-11-07
相关资源
相似解决方案