基于stc15f2k60s2芯片单片机编程(秒表)

用定时器做一个秒表,精确到0.1,S7按下,开始计时,S6按下清零

#include <stc15f2k60s2.h>
#include <intrins.h>
void Timer0Init();
void Timer1Init();
unsigned char abile[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char saomiao[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void Delay100us();
void shumaguan();
void anjian();
sbit S7=P3^0;
sbit S6=P3^1;
unsigned int y;

void main()
{
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
	Timer0Init();
	Timer1Init();
while(1)
{
  shumaguan();
	anjian();
	Delay100us();
}

}
void Timer0Init()		//[email protected]
{
	AUXR |= 0x80;	
	TMOD &= 0xF0;	
	TL0 = 0xAE;	
	TH0 = 0xFB;		
	TF0 = 0;		
	TR0 = 1;		
	EA=1;
	ET0=1;
}
void weixuan() interrupt 1
{
   unsigned char i;
	P2=0XE0;
	P0=0XFF;
	P2=0X1F;
	
	P2=0XC0;
	P0=1<<i;
	P2=0X1F;
	
	P2=0XE0;
	P0=saomiao[i];
	P2=0X1F;
	
	i++;
	if(i==8)
		i=0;
}


void shumaguan()
{
  saomiao[0]=abile[y/100];
  saomiao[1]=abile[y%100/10]&0x7f;
	saomiao[2]=abile[y%10];
	saomiao[3]=0xff;
	saomiao[4]=0xff;
	saomiao[5]=0xff;
	saomiao[6]=0xff;
	saomiao[7]=0xff;
}
void Delay100us()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	i = 2;
	j = 15;
	do
	{
		while (--j);
	} while (--i);
}
void Timer1Init(void)		//[email protected]
{
	AUXR |= 0x40;		//?????1T??
	TMOD &= 0x0F;		//???????
	TL1 = 0xCD;		//??????
	TH1 = 0xD4;		//??????
	TF1 = 0;		//??TF1??
	TR1 = 1;		//???1????
	
	EA=1;
}

void jishu() interrupt 3
{
   unsigned char i;
		 i++;
	 if(i==100)
	 {i=0;
	y++;}
}
void anjian()
{
if(S7==0)
{
	Delay100us();
	if(S7==0)
	{
	ET1=~ET1;
	}
while(!S7);
}
if(S6==0)
{
	Delay100us();
	if(S6==0)
	{
	y=0;
	}
while(!S7);
}
}
发布了10 篇原创文章 · 获赞 1 · 访问量 431

猜你喜欢

转载自blog.csdn.net/lymtics1111/article/details/103974878