基于51单片机计数器进行定时的记秒器

平台STC89C52    时钟晶振11.0592MHZ     软件keil4 

代码如下:

#include 
#define uchar unsigned char
#define uint unsigned int
#define WEI1 P2=0xfe
#define WEI2 P2=0xfd
#define WEI3 P2=0xfb
#define WEI4 P2=0xf7
uchar NUM_WEI1,NUM_WEI2,NUM_WEI3,NUM_WEI4,state_cnt;
uint i,NUM,time_count;
uchar NUM_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void SEG_display();
void timer0_init();

void SEG_display()
{
	switch(state_cnt)
	{
		case 0x01:	P0=0xff;WEI1;P0=NUM_code[NUM_WEI1];
					state_cnt++;break;
		case 0x02:	P0=0xff;WEI2;P0=NUM_code[NUM_WEI2];
					state_cnt++;break;
		case 0x03:	P0=0xff;WEI3;P0=NUM_code[NUM_WEI3];
					state_cnt++;break;
		case 0x04:	P0=0xff;WEI4;P0=NUM_code[NUM_WEI4];
					state_cnt=1;break;
		default: break;
	}
	for(i=0;i<10;i++);
}

void timer0_init()
{
	TMOD=0x02;
	TH0=0x19;
	TL0=0x19;
	ET0=1;
	EA=1;
	TR0=1;
	time_count=0;
}

void main()
{
	timer0_init();
	NUM=0;
	state_cnt=1;
	while(1)
	{
		NUM_WEI1=NUM/1000;
		NUM_WEI2=(NUM-NUM_WEI1*1000)/100;
		NUM_WEI3=(NUM%100)/10;
		NUM_WEI4=NUM%10;
		SEG_display();
	}
}

void time0() interrupt 1
{
	time_count++;
	if(time_count==4000)
	{
		NUM++;
		time_count=0;
	}
	if(NUM==9999)
		NUM=0;		
}

 其中P0是控制的数码管段选,P2 0~3控制位选

选用的数码管为F3461BH共阳极数码管。

你可能感兴趣的:(基于51单片机计数器进行定时的记秒器)