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

2024-11-16 09:39:16
推荐回答(2个)
回答1:

#include
#define uchar unsigned char
#define uint unsigned int
uchar c,temp;
uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时函数
void delay(uint x){
uint a,b;
for(a=0;a for(b=0;b<110;b++);
}
}
//显示函数
void disp(){
P0=tab[temp/16]; // 发送
P2=0x02;
delay(5);
P0=tab[temp%16];
P2=0x01;
delay(5);
P0=tab[(temp+1)/16]; //接收
P2=0x80;
delay(5);
P0=tab[(temp+1)%16]; //接收
P2=0x40;
delay(5);
}
//初始化串行口
void csh()
{
SM0=0;
SM1=1;
REN=1;
TI=0;
RI=0;
PCON=0;
TH1=0xF3;
TL1=0XF3;
TMOD=0X20;
EA=1;
ET1=0;
ES=1;
TR1=1;
}
void main()
{

csh();
while(1)
{

disp(); //显示函数
}
}
void intrr() interrupt 4
{
// char temp;
temp=SBUF;
RI=0;
TI=0;
SBUF=temp+1;
while(!TI);
TI=0;
}

回答2:

串行通信,每次只能传送0~255之间的任一数。
这个问题,大概楼主已经解决了。

楼主现在想要发送一个0-65536之间的任一数,那就发送两~三次即可。