还是郭老师的那个题目:以16进制发送一个0-65536之间的任一数,当
单片机收到后在数码管上动态显示出来,波特率自定。我的问题是,我在串口助手上输入任何数,五个数码管只显示11366,代码如下:
#include<reg52.h>
#define uchar unsigned char
uchar flag;
int a,ge,shi,bai,qian,wan; //个位、十位、百位、千位、万位
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x06,0x5b,0x4f,
0x66,0x6d,0x7d};
void init()
{
EA=1;
ES=1;
TMOD=0x20;//定时器1工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
dula=0;
}
void delay(uchar y)
{
uchar i,j;
for(i=y;i>0;i--)
for(j=118;j>0;j--);
}
void display(int x)
{
wan=x/10000;
qian=x%10000/1000;
bai=x%10000%1000/100;
shi=x%100/10;
ge=x%10;
//从左到右,第1个数码管
dula=1;
P0=table[wan];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1; //第2个数码管
P0=table[qian];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
//第3 个数码管
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(5);
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0 ;
SBUF=a; //向PC端返回要显示的值
while(!
ti);
TI=0;
display(a);
ES=1;
}
}
}
void serial() interrupt 4
{
RI=0;
a=SBUF; //将接受到的值给a
flag=1;
}
@一抹阳光 @爱我别走 麻烦你们了
-
谢谢版主的建议,我已经做了修改,问题基本解决
一周热门 更多>