如何用c语言写一个单片机秒表程序

60秒制作,用定时器0中断做数码管动态刷新,用定时器1做计时用,三个按键






首先打开keil,创建工程和文件

Snipaste_2020-03-31_02-45-30.png


点击这里创建一个后者为.c的文件然后保存

Snipaste_2020-03-31_02-49-21.png



程序如下


Snipaste_2020-03-31_02-58-25.png

//60秒制作,用定时器0中断做数码管动态刷新,用定时器1做计时用,三个按键,
#include<reg52.h>
#include<intrins.h>
sbit S1=P3^0;
sbit S2=P3^1;
sbit S3=P3^2;
sbit wei=P2^7;
sbit duan=P2^6;
unsigned char start,stop,reset,sec;//启动,停止,清零,秒;
unsigned char code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
unsigned char code SMGwei[] = {0xfe, 0xfd};
void delay(void) ;
void keyscan();
void timer_init();
void display(unsigned char sec);
void main()
{
	unsigned char counter;
	timer_init();
	while(1)
	{
		keyscan();
		if(start==1)  //启动
		{
			
			if(TF1==1)
			{
				
				TF1=0;
				TH1 = 0xB8;
  			    TL1 = 0x00;
				counter++;
				if(counter==50)
				{
					counter=0;
					sec++;
					if(sec==60)
					{
						sec=0;	//60秒自动清零
					}
				}
			} 
		}
		if(stop==1)	 //停止键
		{
		   display(sec);		 
		}
		if(reset==1)  //手动清零
		{
		   sec=0;
		}
		
	}
}
void keyscan()
{
	if(S1==0)
	{
	  delay();
	  if(S1==0)
	  {
	  	start=1;
		stop=0;
		reset=0;
	  }	
	  while(!S1);	
	}
	if(S2==0)
	{
	  delay();
	  if(S2==0)
	  {
		start=0;
		stop=1;
		reset=0;
	  }	
	  while(!S2);	
	}
	if(S3==0)
	{
	  delay();
	  if(S3==0)
	  {
	  	start=0;
		stop=0;
		reset=1;
	  }	
	  while(!S3);	
	}
}
void delay(void)   //误差 -0.000000000001us
{
    unsigned char a,b;
    for(b=15;b>0;b--)
        for(a=152;a>0;a--);
}
void timer_init()
{
	TMOD = 0x11;
    TH1 = 0xB8;
    TL1 = 0x00;
    TR1 = 1;
	TH0 = 0xEE;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;

}
void display(unsigned char sec)
{
	   static unsigned char weishu;
	   P0=0xff;
	   wei=1;
	   P0=SMGwei[weishu];
	   wei=0;
	   switch(weishu)
	   {
	   	case 0:duan=1;P0=SMGduan[sec/10]; duan=0;break;
		case 1:duan=1;P0=SMGduan[sec%10]; duan=0;break;
	   }
	   weishu++;
	   if(weishu==2)
	   weishu=0;

}
void timer_0()interrupt 1
{
	TH0 = 0xEE;
    TL0 = 0x00;
	display(sec);
}
打赏 支付宝打赏 微信打赏