首先来一段程序:
#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采集到的数据: