#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit H=P2^2;
sbit M=P2^3;
sbit L=P2^4;
sbit EN=P1^0;
uint receiver,store,s,g;
void init()
{
SCON=0x50;
PCON=0x80;
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
TR1=1;
EA=1;
ES=1;
}
void display()
{
uint y;
if(store>9)
{
H=0;
M=1;
L=1;
P0=table[store/100];
EN=1;
for(y=800;y>0;y--);
EN=0;
for(y=100;y>0;y--);
H=1;
M=0;
L=1;
P0=table[(store%100)/10];
EN=1;
for(y=800;y>0;y--);
EN=0;
for(y=100;y>0;y--);
H=0;
M=0;
L=1;
P0=table[(store%100)%10];
EN=1;
for(y=800;y>0;y--);
EN=0;
for(y=100;y>0;y--);
}
else
{
H=0;
M=0;
L=1;
P0=table[store];
EN=1;
}
}
void main()
{
init();
while(1)
{
display();
}
}
void user() interrupt 4
{
uint x=1;
receiver=SBUF;
while(!RI);
store=receiver;
RI=0;
SBUF=receiver;
while(!TI);
TI=0;
}
H,M,L这三位是发送到138译码器,选择数码管位号,EN是控制段位。
通过上位机传送0~9之间的数值,数码管显示正确,但是发送10以上的数值时,显示就出现问题。现象为:发送10时,显示16,依次递增。
求大神给解读一下。 |