51单片机串口通讯:把上位机接收的数据在数码管显示
比如在串口助手发送以十六进制发送6,让数码管也显示6。我感觉自己写的程序最后接收数据那部分有错误,大家帮看看吧程序:#include<reg51.h>#defineuch...
比如在串口助手发送以十六进制发送6,让数码管也显示6。我感觉自己写的程序最后接收数据那部分有错误,大家帮看看吧
程序:
#include<reg51.h>#define uchar unsigned char #define uint unsigned intuchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极void delay(void) //延时{ uchar i,j; for(i=100;i>0;i--) for(j=500;j>0;j--); }main(){ uint n; TMOD=0x20; SM0=0; SM1=1; REN=1; PCON=0; TH1=0xFD; TL1=0xFD; TR1=1; n=SBUF;while(! RI);RI=0; SBUF=n;while(! TI);TI=0; P0=dis[n]; dislay();}
电路图
串口助手 展开
程序:
#include<reg51.h>#define uchar unsigned char #define uint unsigned intuchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极void delay(void) //延时{ uchar i,j; for(i=100;i>0;i--) for(j=500;j>0;j--); }main(){ uint n; TMOD=0x20; SM0=0; SM1=1; REN=1; PCON=0; TH1=0xFD; TL1=0xFD; TR1=1; n=SBUF;while(! RI);RI=0; SBUF=n;while(! TI);TI=0; P0=dis[n]; dislay();}
电路图
串口助手 展开
2个回答
展开全部
建议把这几行代码
n=SBUF;while(! RI);RI=0;
SBUF=n;while(! TI);TI=0;
P0=dis[n];
dislay();
改为
while(1){
while(! RI);
RI=0;
n=SBUF;
SBUF=n;
while(! TI);
TI=0;
P0=dis[n];
dislay();
}
另外,如果是实际制作电路,P0口和数码管之间的七根连线中间要串入7个电阻才比较好,阻值在几百欧,例如200~510欧之间。
更多追问追答
追问
测试不行,勾选十六进制的情况下输入一位数字没反应,需要输入两位数数码管才会亮,但也不一定会显示数字。我的目的是想从上位机输入一个个位数,然后数码管显示该数。串口助手那里的十六进制取消勾选的话不管输入多少都是显示8
追答
你给出的代码不完整,只能给你提供可能的解决途径供参考。
如果你希望有人帮你调通的话,你应该提供完整的软件project以及proteus的design或project。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询