要求是:通过串口程序,写入数据,然后在数码管上显示出来。
但是结果:送入十六进制的0——f,数码管显示0--15.正确
送入十六进制10以上的,数码管显示的,就不正确了。10显示48,11显示49,20显示64,30显示112,这是为什么呢?
程序如下:#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint shuma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint wei[]={0,1,2,3,4,5,6,7};
uchar temp,temp1;
int a,b,c;
void delay(unit);
void display();
void ck_csh();
void main()
{while(1)
{ck_csh();
display();
}
}
void display()
{
P2=wei[0];
P0=shuma[a];
delay(5);
P2=wei[1];
P0=shuma[b];
delay(5);
P2=wei[2];
P0=shuma[c];
delay(5);
}
/******************毫秒延时********************************************/
void delay(uint xms)
{ int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/***********************串口初始化*********************/
void ck_csh()
{SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TR1=1;
EA=1;
ES=1; }
/*****************串口中断服务子程序**********************/
void sr() interrupt 4
{
if(RI)
{RI=0;
temp=SBUF;
P1=temp;
a=temp/100;
temp1=temp%100;
b=temp1/10;
c=temp1%10;
SBUF=temp;
if(TI)
{TI=0;}
}
}