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

#include<reg52.h>

char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
char code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
char nam_bit[5]={0,0,0,0,0};
unsigned int i,j,a,flag;
//数字分离函数
void separate(unsigned int i)
{

nam_bit[2]=i%16;
nam_bit[1]=i/16%16;
nam_bit[0]=i/256%16;

}
//设置几位数码管亮
void bit1(unsigned int i)
{
if(i>=10000)
j=5;
else if(i>=1000)
j=4;
else if(i>=100)
j=3;
else if(i>=10)
j=2;
else j=1;
}

void delay(int b)
{ int c;
for(b;b>0;b--)
for(c=150;c>0;c--);
}
int main()
{
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
TR1=1;
SCON=0x50;
EA=1;
ES=1;

while(1)
{
separate(i);
bit1(i);

for(a=0;a<3;a++)
{
P0=table1[nam_bit[a]];
P1=table2[a];
delay(4);
}

}
}

void ser() interrupt 4
{
RI=0;
i=SBUF;
}

这个问题 发送255以内的数据,你中断可以这样写,但是你上位机当发送大于255的时候,你就要在中断内组合数据了。

串口通信助手以字节为单位收发信息的,如果你要发送大于255的数,那就是两个字节了,你分开发送两个字节就行了,但是要注意你的协议是高字节在前还是低字节在前。

这个你试试
温馨提示:答案为网友推荐,仅供参考
相似回答