#include
#define uchar unsigned char
#define uint unsigned int
uchar num[6]={0,0,0,0,0,0};//定义显示数组
uint temp;
uchar flag;
uchar i,t;
uint dat;
sbit dula=P2^6;//段选锁存器使能端
sbit wela=P2^7;//位选锁存器使能端
uchar code wei[]= {
0xfe,0xfd,0xfb,
0xf7,0xef,0xdf,};
uchar code teble[]= {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint z)//毫秒延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void uart_init()//串口初始化 波特率9600
{
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ES=1;
EA=1;
}
void display()//数码管显示函数
{
uchar i;
for(i=0;i<6;i++)
{
wela=1;
P0=wei[i];
wela=0;
dula=1;
P0=num[i];
dula=0;
P0=0xff;
delay(3);
}
}
void main()
{
wela=0;
dula=0;
uart_init();
while(1)
{
display();
}
}
void uart() interrupt 4//串口中断服务函数
{
if(RI)
{
RI=0;
t++;//接收计数
if(t==2)
{
dat=dat<<8;//位左移准备接受下一字节数据
}
temp=SBUF;
dat=temp|dat;
P1=0;
if(t==2)
{
t=0;
flag=1;//数据接收完成标志
P1=0xff;
}
}
else
{
TI=0;
}
if(flag==1)//数据接收完成
{
num[0]=teble[dat/10000];//取万位
num[1]=teble[dat/1000%10];//取千位
num[2]=teble[dat/100%10];//取百位
num[3]=teble[dat/10%10];//取十位
num[4]=teble[dat%10];//取个位
flag=0;//数据接收完成标志复位
dat=0x0000;//数据清零,准备再次接收
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)