以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定

首先为什么我的最后一位显示的比较亮,其次每次复位时显示255,最后怎么显示255以上的数字
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar flag;
uint num;
void display(uchar,uchar,uchar,uchar,uchar);
void delay(uchar);
main()
{
EA=1;
ES=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
while(1)
{
display(num/10000,num%10000/1000,num%10000%1000/100,num%10000%1000%100/10,num%10);
if(flag==1)
{
ES=0;
flag=0;
SBUF=num;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
num=SBUF;
RI=0;
flag=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[wan];
dula=0;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[qian];
dula=0;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xef;
wela=0;
}

第1个回答  2013-12-15
做而论道 指出了你数据接收后显示不正确的问题,是接收数据不正确。关于你的LED亮度不均匀的问题,是由于你的数码管是动态扫描的,但没有使用定时器中断,这样每个数码管点亮的时间就不等,造成亮度不均匀。从程序中看,你是五个LED,你应该使用定时器中断,比如2mS中断一次,每次点亮一个LED,下一次点亮下一个,周而复始,这样亮度就均匀了。
第2个回答  2013-12-15
串口通信,每次仅仅能传送一个字节,0~255。

如果需要传送更大的数字,就要分成几次来传送,如 6、5、5、3、6。

多字节的传输,可以参考:

http://hi.baidu.com/do_sermon/item/c2db620200031af4a110340b
第3个回答  2014-09-05
亲 你现在还解决问题了!!!
相似回答