#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
unsigned long num;
uint a1,a2;
uchar num1,flag;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //显示数据编码
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint xms);
void display(unsigned long int value);
void init();
void main()
{
init();
while(1)
{
display(num);
}
}
void init()
{
TMOD=0x20; //定义定时器1为方式2工作
TH1=0xfd; //给T1高位赋初值,设置串口波特率为9600bps.
TL1=0xfd; //给T1低位赋初值,设置串口波特率为9600bps.
TR1=1; //定时器1运行控制位置1,运行T1定时器
SCON=0x50; //定义串口为方式1工作,并开串口允许串行接收位(REN=1)
EA=1; //开总中断
ES=1; //开串口中断
}
void serial() interrupt 4
{
num1++; //设置循环num1
if(num1==1)
{
a1=SBUF; //将第一次的数据给temp
RI=0; //置RI为0以便接收下一个数据
}
if(num1==2)
{
a2=SBUF; //将第二次的数据给temp
num=(a1<<8|a2);//a1的低位数据向左移变成num的高位,低位空出,通过或运算将a2的储存在num的最低位。
RI=0;//置RI为0以便接收下一个数据
num1=0;
}
}
void display(unsigned long int value)
{
uchar N1,N2,N3,N4,N5,N6;
N1=value/100000;
N2=value%100000/10000;
N3=value%100000%10000/1000;
N4=value%100000%10000%1000/100;
N5=value%100000%10000%1000%100/10;
N6=value%10;
/* dula=1;
P0=table[N1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
P0=0xff;
delayms(1); */
dula=1;
P0=table[N2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
P0=0xff;
delayms(1);
dula=1;
P0=table[N3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
P0=0xff;
delayms(1);
dula=1;
P0=table[N4];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
P0=0xff;
delayms(1);
dula=1;
P0=table[N5];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
P0=0xff;
delayms(1);
dula=1;
P0=table[N6];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
P0=0xff;
delayms(1);
}
void delayms(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
|