⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mian.c

📁 时钟程序
💻 C
字号:
/*---------------------------------------
;    Clock
;
;    Auther     :  王轩骞
;    File Name  :  main.c
;    Target MCU :  STC 89C58RD
;    Frequency  :  11.0592Mhz
;    Revision   :  1.0
;
;--------------------------------------*/
#include <stdio.h>
#include <AT89X51.H>

/**************声明变量****************/


sbit BUTTOM_SET	= P1^0;
sbit BUTTOM_SEL	= P1^1;
sbit BUTTOM_ADJ = P1^2;
sbit SPEAKER	= P3^4;
char code SEG[]	= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
unsigned char s1,s2,h1,h2,tmp;
unsigned char ts1,ts2,th1,th2;
unsigned char timer_count;
unsigned char beep;
bit sel;
bit sts;
bit ck;
unsigned char *p;

/**************声明函数****************/
void main(void);
void sys_init(void);/*初始化函数*/
void display(void);/*显示函数*/
void delay(unsigned char j);/*延时函数*/
void second(void);
void flash(void);
void keyboard(void);
void keyboard2(void);
void adj_mode(void);
buttom(unsigned char i);

/**************主函数*****************/
void main(void)
{
	sys_init();
	display();
	while(1);
}

/**************初始化******************/
void sys_init(void)
{
	SCON = 0x00;
	TCON = 0x03;
	TMOD = 0x11;
	EA = 1;
	EX0 = 0;
	EX1 = 0;
	ET0 = 1;
	ET1 = 0;
	ES = 0;
	TL0 = 0xB0;
	TH0 = 0x3C;
	TR0 = 1;	

	timer_count = 18;

	s1 = 0;
	s2 = 0;
	h1 = 0;
	h2 = 0;
	ts1 = 0;
	ts2 = 1;
	th1 = 0;
	th2 = 0;
	sel = 1;
	sts = 0;
	ck = 0;
	beep = 0;

	p = &s1;


}


/**************入口程序*****************/
void display(void)
{

for(;;)
{

if(sts == 0)
{
keyboard();
}

else if(sts == 1)
{
keyboard2();
}

if(ck == 0)
{
	P0 = SEG[s1];
	P2 = 0x7F;
	delay(20);
	P0 = SEG[10];
	
	P0 = SEG[s2];
	P2 = 0xBF;
	delay(20);
	P0 = SEG[10];

	P0 = SEG[h1];
	P2 = 0xDF;
	delay(20);
	P0 = SEG[10];

	P0 = SEG[h2];
	P2 = 0xEF;
	delay(20);
	P0 = SEG[10];
}
else if(ck == 1)
{
	P0 = SEG[ts1];
	P2 = 0x7F;
	delay(20);
	P0 = SEG[10];
	
	P0 = SEG[ts2];
	P2 = 0xBF;
	delay(20);
	P0 = SEG[10];

	P0 = SEG[th1];
	P2 = 0xDF;
	delay(20);
	P0 = SEG[10];

	P0 = SEG[th2];
	P2 = 0xEF;
	delay(20);
	P0 = SEG[10];
}

}

}

/**************延时程序****************/
void delay(unsigned char j)
{
	do
	{	} 
	while(j--);
return;
}

/***************扫键1程序**************/
void keyboard(void)
{
	if(BUTTOM_SET == 0)
	{	
		if(buttom(0) == 1)
		{
		adj_mode();	
		sts = 1;
		}
	}
	else
	{}
return;
}
	

/**************进入调整模式***************/
void adj_mode(void)
{

	ET0 = 0;
	TR0 = 0;
	p = &s1;
	timer_count = 5;
	TL1 = 0xB0;
	TH1 = 0x3C;
	ET1 = 1;
	TR1 = 1;

return;
}

/**************菜单调整***************/
void keyboard2(void)
{

if( ck == 0)
{
if(BUTTOM_SET == 0)
{
		if(buttom(0) == 1)
		{
		TR0 = 0;
		TR1 = 0;
		 	if(sel == 0)
			{
			*p = tmp;
			sel = 1;
			}
		p = &ts1;
		ck = 1;
		TR0 = 1;
		TR1 = 1;
		}

return;
}

else if(BUTTOM_SEL == 0)
{
	if(buttom(1) == 1)
	{
 	if(sel == 0)
	{
	*p = tmp;
	sel = 1;
	}
	if(p == &s1)
	{	p = &s2;	}
	else if(p == &s2)
	{	p = &h1;	}
	else if(p == &h1)
	{	p = &h2;	}
	else if(p == &h2)
	{	p = &s1;	}
	}
return;
}	

else if(BUTTOM_ADJ == 0)
{
	if(buttom(2) == 1)
	{
 	if(sel == 0)
	{
	*p = tmp;
	sel = 1;
	}
	if(p == &s2)
	{
		if( *p == 5)
		{
		*p = 0;
		}
		else
		{
		(*p)++;
		}
	}		
	else
	{
		if( *p == 9)
		{
		*p = 0;
		}
		else
		{
		(*p)++;
		}
	}	
	}
return;
}
}

else if( ck == 1)
{
if(BUTTOM_SET == 0)
{


		if(buttom(0) == 1)
		{
		ET1 = 0;
		TR1 = 0;
		 	if(sel == 0)
			{
			*p = tmp;
			sel = 1;
			}
		p = &s1;
		ck = 0;
		sts = 0;
		TL0 = 0xB0;
		TH0 = 0x3C;
		ET0 = 1;
		TR0 = 1;

		}

return;
}

else if(BUTTOM_SEL == 0)
{
	if(buttom(1) == 1)
	{
 	if(sel == 0)
	{
	*p = tmp;
	sel = 1;
	}
	if(p == &ts1)
	{	p = &ts2;	}
	else if(p == &ts2)
	{	p = &th1;	}
	else if(p == &th1)
	{	p = &th2;	}
	else if(p == &th2)
	{	p = &ts1;	}
	}
return;
}	

else if(BUTTOM_ADJ == 0)
{
	if(buttom(2) == 1)
	{
 	if(sel == 0)
	{
	*p = tmp;
	sel = 1;
	}
	if(p == &ts2)
	{
		if( *p == 5)
		{
		*p = 0;
		}
		else
		{
		(*p)++;
		}
	}		
	else
	{
		if( *p == 9)
		{
		*p = 0;
		}
		else
		{
		(*p)++;
		}
	}	
	}
return;
}
}

}

/***************去抖动*****************/
buttom(unsigned char i)
{
delay(5);
if(i == 0)
{
	if(BUTTOM_SET == 0)
	{
		do{ SPEAKER = 0; }
		while(BUTTOM_SET == 0);
		SPEAKER = 1;
		delay(5);
		if(BUTTOM_SET == 0)
		{	return(0);	}
	}
	else
	{	return(0);	}
}

else if(i == 1)
{
	if(BUTTOM_SEL == 0)
	{
		do{ SPEAKER = 0; }
		while(BUTTOM_SEL == 0);
		SPEAKER = 1;
		delay(5);
		if(BUTTOM_SEL == 0)
		{	return(0);	}
	}
	else
	{	return(0);	}
}

else if(i == 2)
{
	if(BUTTOM_ADJ == 0)
	{
		do{ SPEAKER = 0; }
		while(BUTTOM_ADJ == 0);
		SPEAKER = 1;
		delay(5);
		if(BUTTOM_ADJ == 0)
		{	return(0);	}
	}
	else
	{	return(0);	}
}
	delay(10);
	return(1);
}


/***************读秒程序***************/
void second(void) interrupt 1
{
	EA = 0;
	ET0 = 0;
	TR0 = 0;

if(timer_count == 0)
{

	timer_count = 18;

	if(s1 == 9 && s2 == 5 && h1 == 9 && h2 == 9)
		{
			h2=0;h1=0;s2=0;s1=0;
		}
	else if(s1 == 9 && s2 == 5 && h1 ==9)
		{	
			h2++;h1=0;s2=0;s1=0;	
		}
	else if(s1 == 9 && s2 == 5)
		{
			h1++;s2=0;s1=0;
		}
	else if(s1 == 9)
		{
			s2++;s1=0;
		}
	else
		{	
			s1++;		
		}

if(beep==0)
{	SPEAKER=1;	}
else
{	beep--;	}


if(s1==ts1)
{
	if(s2==ts2)
	{
		if(h1==th1)
		{
			if(h2==th2)
			{
			SPEAKER=0;
			beep=5;
			}
		}
	}
}

}
else
{	timer_count--;	}



	TL0 = 0xB0;
	TH0 = 0x3C;
	TR0 = 1;
	ET0 = 1;
	EA = 1;

}


/**************闪烁*******************/
void flash(void) interrupt 3
{

	EA = 0;
	ET1 = 0;
	TR1 = 0;

	if(timer_count == 0)
	{
		if( sel == 1)
		{
		tmp = *p;
		*p = 10;
		sel = 0;
		}
		else if(sel == 0)
		{
		*p = tmp;
		sel = 1;
		}
		timer_count = 5;
	}
	
	else
	{	timer_count--;	}

	
	TL1 = 0xB0;
	TH1 = 0x3C;
	TR1 = 1;
	ET1 = 1;
	EA = 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -