#includeunsigned char num,num2=0;//num用于计数,刷新数码管,num2用于选择要显示的数字 unsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码 unsigned char com[]={0x01,0x02,0x04,0x08};//位选地址 void main() {	TMOD=0x01;//设置定时器0工作方式1	TH0 = (65536-917)/256;	//1ms延时初值计算	TL0 = (65536-917)%256;;	EA=1;//开总中断	ET0=1;//定时器0中断	TR0=1;//开始计时	while(1){	if(num==10){ //定时器中断10次,也就是10ms	num=0; //清零	P1=~com[num2];//送入位选信号	P2=0xff;//消影	P2=display[num2];//送入段选信号	num2++; //num2=0~3,四个数码管轮流显示。	if(num2>=4)	num2=0;	}	} } void Timer0() interrupt 1 //定时器中断 { TH0 = (65536-917)/256;	//重新赋值 TL0 = (65536-917)%256;;	num++;// }
然后就是一个使用点的例子,实现59s的计时,电路图和上边是一样的,直接上代码:
#includeunsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char com[]={0x01,0x02,0x04,0x08}; unsigned char num,num2=0,time[4]; unsigned int num3; void main() {	TMOD=0x01;	TH0 = (65536-917)/256;	TL0 = (65536-917)%256;;	EA=1;	ET0=1;	TR0=1;	time[0]=0;	time[1]=0;	time[2]=0;	time[3]=0;	while(1){	if(num==10){	num=0;	P1=~com[num2];	P2=0xff;	P2=display[time[num2]];	num2++;	if(num2>=4)	num2=0;	}	if(num3==1000)//计数1000次,计时1s	{	time[3]++;//更新第四位	if(time[3]>=10)	{	time[3]=0;	time[2]++;//更新第三位	if(time[2]>=6)	time[2]=0;	}	num3=0;	}	} } void Timer0() interrupt 1 { TH0 = (65536-917)/256;	TL0 = (65536-917)%256;;	num++;	num3++; }
主要程序和上边是一样的,多了一部分计时1s的程序。