第1个回答 2010-03-27
若不用芯片扩展数码管,可用定时器。
#include<reg52.h>
uchar TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar disp[2]={0xc0,0xc0};
void delay(char x)
{
uchar i,j;
for (i=0;i<x;i++);
for(j=0;j<120;j++);
}
void main(void)
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=256;TL1=256;
TR0=1;
TR1=1;
IE=0x8a;
while(1);
}
void int_int0(void) interrupt 1 using 0
{
static uchar flag=0,sec=0,min=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(flag++==20)
{
flag=0;
if(sec++==59)
{
sec=0;
}
}
disp[1]=TAB[sec/10];
disp[0]=TAB[sec%10];
}
void t1(void)interrupt 3
{
unsigned char flag1=0,scan;
if(++flag1==32)
{
scan=0;
if(++scan==3)
{
scan=0;
P0=disp[scan];
P2=~scan;
delay(5);
P0=0xff;
}
}
}