基于51单片机计数器进行定时的记秒器
平台STC89C52 时钟晶振11.0592MHZ 软件keil4
代码如下:
#include <reg52.h>
#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共阳极数码管。
