51単片機単純時計

39000 ワード

シミュレーションとプログラムはここでコードを抽出してください:azxy
#include
#include
typedef unsigned char u8;
typedef unsigned int u16;

sbit P20=P2^0;												// , , 
sbit P21=P2^1;												// stan , , 
sbit P22=P2^2;												// stan , , 

u8 code duan[12]={
     0x3f,0x06,0x5b,0x4f,0x66,0x6d,
				  0x7d,0x07,0x7f,0x6f,0x00,0x40};	        // 

u8 code wala[8]={
     0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};	// 
u8 smg_cout[8];
														 
u8 i=0;														//i=1 50ms i=20 1s
u8 hour=0,min=0,s=0;										// , , 

u8 stan=0;													// 
															//stan=0   
															//stan=1   
															//stan=2   
															//stan=3   

/*****************************************************
********************* *************************
*****************************************************/
void delay(u16 i)	
{
     
	while(i--);
}
/*****************************************************
********************* *************************
*****************************************************/
void Timer0Init()		
{
     
	TMOD=0x01;					
	TH0=(65536-50000)/255;
	TL0=(65536-50000)%255;	
	TR0=1;		
	ET0=1;
	EA=1;
}
/*****************************************************
******************* *********************
*****************************************************/
void smg_display()
{
     
	static u8 num=0;
	while(num<8)
	{
     
		P1=wala[num];
		P0=smg_cout[num];
		num++;
		delay(200);
	}
	if(num==8) num=0;	
}
/*****************************************************
********************* *********************
*****************************************************/
void clock_display()
{
     
	if(stan==0)
	{
     
		smg_cout[7]=duan[hour/10];
		smg_cout[0]=duan[hour%10];
		smg_cout[1]=duan[11];
		smg_cout[2]=duan[min/10];
		smg_cout[3]=duan[min%10];
		smg_cout[4]=duan[11];
		smg_cout[5]=duan[s/10];
		smg_cout[6]=duan[s%10];
		smg_display();
	}
	if(stan==1)
	{
     
		if(s%2==1)
		{
     
			smg_cout[7]=duan[hour/10];
			smg_cout[0]=duan[hour%10];
		}
		else
		{
     
			smg_cout[7]=duan[10];
			smg_cout[0]=duan[10];	
		}
		smg_cout[1]=duan[11];
		smg_cout[2]=duan[min/10];
		smg_cout[3]=duan[min%10];
		smg_cout[4]=duan[11];
		smg_cout[5]=duan[s/10];
		smg_cout[6]=duan[s%10];
		smg_display();	
	}
	if(stan==2)
	{
     
		if(s%2==1)
		{
     
			smg_cout[2]=duan[min/10];
			smg_cout[3]=duan[min%10];	
		}
		else
		{
     
			smg_cout[2]=duan[10];
			smg_cout[3]=duan[10];	
		}
		smg_cout[7]=duan[hour/10];
		smg_cout[0]=duan[hour%10];
		smg_cout[1]=duan[11];
		smg_cout[4]=duan[11];
		smg_cout[5]=duan[s/10];
		smg_cout[6]=duan[s%10];
		smg_display();	
	}
	if(stan==3)
	{
     
		if(s%2==1)
		{
     
			smg_cout[5]=duan[s/10];
			smg_cout[6]=duan[s%10];	
		}
		else
		{
     
			smg_cout[5]=duan[10];
			smg_cout[6]=duan[10];	
		}
		smg_cout[7]=duan[hour/10];
		smg_cout[0]=duan[hour%10];
		smg_cout[1]=duan[11];
		smg_cout[2]=duan[min/10];
		smg_cout[3]=duan[min%10];
		smg_cout[4]=duan[11];
		smg_display();	
	}		
}
/*****************************************************
********************* *********************
*****************************************************/
void key_down()
{
     
	if(P20==0)
	{
     
		delay(100);
		if(P20==0)
		{
     
			stan++;
			if(stan==4) stan=0;
		}
		while(P20==0) clock_display();
	}
	if(P21==0)
	{
     
		delay(100);
		if(P21==0)
		{
     
			if(stan==1)
			{
     
				hour++;
				if(hour==24) hour=0;
			}
			if(stan==2)
			{
     
				min++;
				if(min==60) min=0;
			}
			if(stan==3)
			{
     
				s++;
				if(s==60) s=0;
			}
		}
		while(P21==0) clock_display();
	}
	if(P22==0)
	{
     
		delay(100);
		if(P22==0)
		{
     
			if(stan==1)
			{
     
				hour--;
				if(hour==-1) hour=23;
			}
			if(stan==2)
			{
     
				min--;
				if(min==-1) min=59;
			}
			if(stan==3)
			{
     
				s--;
				if(s==-1) s=59;
			}
		}
		while(P22==0) clock_display();
	}
}
/*****************************************************
********************** **************************
*****************************************************/
void main()
{
     
	Timer0Init();
	while(1)
	{
     
		key_down();
		clock_display();			
	}	
}
/*****************************************************
******************** **********************
*****************************************************/
void timer0() interrupt 1
{
     	i++;
	TH0=(65536-50000)/255;
	TL0=(65536-50000)%255;
	if(i==20)
	{
     
		i=0;
		s++;
	}
	if(s==60)
	{
     
		s=0;
		min++;
	}
	if(min==60)
	{
     
		min=0;
		hour++;
	}
	if(hour==24)
	{
     
		hour=0;
		min=0;
		s=0;
	}				
}