单片机串口控制数码管显示两位数字时显示不对。
//我的就是通过串口功能使四位数码管显示发送给单片机的数字。我发送时选择HEX模式发送,结果只能正确显示1~9的数字,10以后的就显示其他异常数字了。如果用文本模式,什么...
//我的就是通过串口功能使四位数码管显示发送给单片机的数字。我发送时选择HEX模式发送,结果只能正确显示1~9的数字,10以后的就显示其他异常数字了。如果用文本模式,什么数字都显示不对。(输入1的话,显示49,2显示50.。)怎么回事啊。???
#include<reg52.h>
#include"Basic.h"
unsigned char shu=0;
void main()
{
InitUART();
while(1)
shumaguang_xianshishuzi(shu); //数码管动态显示的函数,此处没有问题,所以我就没把代码写上去 //了。函数定义在其他Basic.c文件
}
void UARTInterrupt(void) interrupt 4
{
ES=0;
RI = 0;
shu=SBUF;
ES=1;
}
void InitUART(void)
{
AUXR = 00000000;
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
EA = 1;
ES = 1;
TR1 = 1;
} 展开
#include<reg52.h>
#include"Basic.h"
unsigned char shu=0;
void main()
{
InitUART();
while(1)
shumaguang_xianshishuzi(shu); //数码管动态显示的函数,此处没有问题,所以我就没把代码写上去 //了。函数定义在其他Basic.c文件
}
void UARTInterrupt(void) interrupt 4
{
ES=0;
RI = 0;
shu=SBUF;
ES=1;
}
void InitUART(void)
{
AUXR = 00000000;
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
EA = 1;
ES = 1;
TR1 = 1;
} 展开
2个回答
展开全部
程序都是对的,你对16进制 10进制数。可能没理解透彻。。。
你的数码管显示是10进制显示模式。所以出现了这种情况。你可以改成16进制显示。也可以自己发送数据的时候换算一下10进制应该是什么?是否跟显示的值一样?
文本模式也是显示的对的。。。
下面网址是ASII码表。你发送的文本1ASII码值就是49(10进制)文本2就是ASII码值就是50(10进制)
http://www.asciima.com/
你的数码管显示是10进制显示模式。所以出现了这种情况。你可以改成16进制显示。也可以自己发送数据的时候换算一下10进制应该是什么?是否跟显示的值一样?
文本模式也是显示的对的。。。
下面网址是ASII码表。你发送的文本1ASII码值就是49(10进制)文本2就是ASII码值就是50(10进制)
http://www.asciima.com/
更多追问追答
追问
请问怎么换算呢,有没有换算的头文件函数之类的?
追答
贴你那个显示函数上来。。。。在那上面改!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询