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

首先来一段程序:

#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;
        
}

}

其次是仿真图:


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


最后是labview采集到的数据:


  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值