这是A号机代码
#include<reg51.h>
char code map[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int t)
{
unsigned int j;
for(;t>0;t--)
for(j=0;j<125;j--);
}
void main()
{
unsigned char a=0;
char *p;
p=0x40;
TMOD=0x02;
TH1=TL1=0xf4;
PCON=(PCON&0x7f);
SCON=0x50;
TR1=1;
while(1)
{
SBUF=a;
while(TI==0);
TI=0;
while(RI==0);
*p=SBUF;
RI=0;
if(SBUF==a)
{
P2=map[a];
a++;
if(a>9)
a=0;
delay(500);
}
}
}
这是B号机代码
#include<reg51.h>
char code map[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
unsigned char rec;
unsigned char *p;
p=0x40;
TMOD=0x20;
TH1=TL1=0xf4;
PCON=(PCON&0x7f);
SCON=0x50;
TR1=1;
while(1)
{
while(RI==0);
rec=SBUF;
*p=SBUF;
SBUF=rec;
RI=0;
while(TI==0);
TI=0;
P2=~map[rec];
}
}
这是仿真图
代码是照着书本打的,有一点细微改动,都在P2口接个数码管,问题就是甲(左)可以正常显示0——9,而乙(右)只显示0,并在甲发送数据的时候闪烁一次,我用了指针看了一眼,在闪烁那一瞬间乙接受到的是F0,同样我用指针也看了一眼甲接受的数据,是正确的。