#include <reg51.h>
#include <absacc.h>
#define ZX XBYTE[0xffdc] //字型口
#define ZW XBYTE[0xffdd] //字位口
unsigned char code aa[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char second=50; //秒
unsigned char minute=59; //分
unsigned char hours=23; //时
unsigned char j;
unsigned char i;
void T0_inti(void)
{
TMOD=0x01; //工作方式1 16位
TH0=(65536-50000)/256; //初始化初值
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1; //开启定时器0中断
TR0=1; //开启计时器
}
void T1_inti(void)
{
TMOD=0x10; //工作方式1 16位
TH1=(65536-1000)/256; //初始化初值
TL1=(65536-1000)%256;
EA=1; //开启总中断
ET1=1; //开启定时器0中断
TR1=1; //开启计时器
}
void delay_ms(unsigned int x)
{
unsigned int i;
unsigned int j;
for(i=0;i<x;i++)
for(j=0;j<20;j++);
}
void main(void)
{
T0_inti();
T1_inti();
while(1);
}
void T0_int(void) interrupt 1
{
TH0=(65536-50000)/256; //初始化初值
TL0=(65536-50000)%256;
i++;
if(i==10)
{
i=0;
second++;
if(second==60)
{
minute++;
second=0;
}
if(minute==60)
{
hours++;
minute=0;
}
if(hours==24)
{
hours=0;
}
}
}
void T1_int(void) interrupt 3
{
TH1=(65536-1000)/256; //初始化初值
TL1=(65536-1000)%256;
j++;
switch(j)
{
case 1 : {ZX=aa[second%10];ZW=0x01;delay_ms(5);ZW=0;break;}
case 2 : {ZX=aa[second/10];ZW=0x02;delay_ms(5);ZW=0;break;}
case 3 : {ZX=aa[minute%10];ZW=0x04;delay_ms(5);ZW=0;break;}
case 4 : {ZX=aa[minute/10];ZW=0x08;delay_ms(5);ZW=0;break;}
case 5 : {ZX=aa[hours%10];ZW=0x10;delay_ms(5);ZW=0;break;}
case 6 : {ZX=aa[hours/10];ZW=0x20;delay_ms(5);ZW=0;break;}
}
if(j==6)
j=0;
}