怎样通过串行口使PC发送一个字符到单片机在数码管上显示出来?为什么我要发十六进制数才能显示呢的?

#include<reg52.h>
sbit wela=P2^7;
sbit dula=P2^6;
unsigned char z,a;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
void delay(unsigned int m);
display(unsigned char bai);
void init();

void main()
{
init();
while(1)
{
display(a);

}
}

void delay(unsigned int m)
{
unsigned int i,j;
for(i=m;i>0;i--)
for(j=110;j>0;j--);
}

display(unsigned char z)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[z];
dula=0;
delay(200);
}
void init()
{
TMOD=0x20;//自动装入时间常数的八位计数器
TH1=0xfd;
TL1=0xfd;
TR1=1;//运行控制位,1:启动定时器。0关闭定时器
REN=1;//SCON寄存器中 1语允许串行接收 0禁止
SM0=0;
SM1=1;
EA=1;//IE寄存器中,中断允许标志
ES=1;//串口中断允许位
a=0;
}
void ser() interrupt 4
{
RI=0;//接收中断标志
a=SBUF;

}

你可以在程序里面设定好,对于数码管我就是这样搞的。追问

怎么设定啊?具体怎么编?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-30
因为你的表里只有16个数追问

我要在串口调试助手那输入 如字符“1” 然后再数码管显示1出来啊

追答

字符“1”的十六进制是0x31,因此你要这样写
unsigned char code table[128];
table[31] = 0x06;
table[32] = 0x5b;
......

第2个回答  2012-07-30
你需要查看1的ASCII的编码追问

这我知道啊,但不知道具体怎么编。要在程序哪补充什么吗?

追答

比对1的编码 确定是 数码管输出1 你直接输出A的数当然不行 1的ASCII是十六进制31

追问

是ASCII的编码问题 ,我已经知道了。

本回答被提问者采纳
相似回答