#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar flag1,shi,ge,aa;
void display(uchar);
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
ES=1;
EA=1;
while(1)
{
if(flag1==1)
{
ES=0;
flag1=0;
SBUF=aa;
while(!TI);
TI=0;
ES=1;
}
display(aa);
}
}
void serial() interrupt 4//串口函数
{
RI=0;
aa=SBUF;
flag1=1;
// SBUF=aa;
}
void display(uchar num)//显示函数
{
uchar i;
shi=num/10;
ge=num%10;
P1=0;
P2=table[shi];
i=255;
while(i--);
P1=0x01;
P2=table[ge];
i=255;
while(i--);
}
本人用stc89c52写的一段程序 ,其实现功能是通过串口发送两位的数字,在数码管上显示出来,为了验证发送数据的正确性,并通过串口接收回来,当发送单位数时,数码管显示是正确的,(如01,02),但是如果发送超过10以上的数,显示结不正确了,但串口接收回来的都是正确的,不知道为什么,希望高人指点。 |