#include <reg52.h> //左侧单片机
sbit S0=P2^0; //数码管低位供电
sbit S1=P2^1; //数码管高位供电
unsigned char a[2]={0xff,0xff}; //动态刷新空间
code unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极数码管显示码0~9
void Delay1ms(unsigned char x);
void main()
{
SCON=0x50; //串口UART10位,REN=1,允许接收
PCON=0;
TMOD=0x21; //T1波特率M1MO=10,T0是16位定时器模式
TH1=0xfd; //9600波特率下工作
TL1=0xfd;
TR1=1;
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
EA=1;
ES=1;
ET0=1;
TI=1; //人为除法串口中断
while(1)
{
S0=1;
P0=a[0];
Delay1ms(8);
S0=0;
S1=1;
P0=a[1];
Delay1ms(8);
S1=0;
}
}
//===================================================
void _T0(void) interrupt 1
{
static unsigned char count=0;
static unsigned char flag=0;
TL0=0xb0; //(65536-50000)%256=176=0xb0;
TH0=0x3C; //(65536-50000)/256=60=0x3C;
if(count>=20)
{
count=0;
TR0=0;
SBUF=flag;
if(flag>=60) flag=0;
else flag++;
}
else count++;
}
//===================================================
void _ES(void) interrupt 4
{
unsigned char temp;
if(TI==1) {TI=0; TR0=1;}
if(RI==1)
{
RI=0;
temp=SBUF;
a[0]=seg[temp%10];
a[1]=seg[temp/10];
}
}
//===================================================
void Delay1ms(unsigned char x)
{ //延时时间:1ms*x,
unsigned char i,j,k; //12MHz下延时T=(9+(3+2k)j)x+5=999x+5(k=15,j=30)。
for(i=x;i>0;i--) //Tmin(x=1)=1.004ms,
for(j=30;j>0;j--) //Tmax(x=255)=254.75ms
for(k=15;k>0;k--);}
//***********************************************************