51单片机串口通讯:把上位机接收的数据在数码管显示

比如在串口助手发送以十六进制发送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();}
电路图

串口助手

建议把这几行代码

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。

追问

取消勾选十六进制发送,用数字对应的ascii码可以正常显示了。不管怎样还是要谢谢你的回答!

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-30
求个程序
求个程序
求个程序
相似回答