www.pudn.com > MIANshizhong.rar > MIAN.C


/*--------------------------------------- 
;    Clock 
; 
;    Auther     :  王轩骞 
;    File Name  :  main.c 
;    Target MCU :  STC 89C58RD 
;    Frequency  :  11.0592Mhz 
;    Revision   :  1.0 
; 
;--------------------------------------*/ 
#include  
#include  
 
/**************声明变量****************/ 
 
 
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; 
}