蓝桥杯单片机练习——可调节时钟源代码

可调节时钟,通过外部中断0进行小时、分钟、秒的调节
S5:进入调节模式
S6:向左切换调节对象
S5:向右切换调节对象
S7:加1
S4:减1

#include<reg51.h>
#include<intrins.h>
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
unsigned char code num[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0xbf,0xff};
unsigned char count=0;
unsigned char second=0;
unsigned char minute=59;
uchar hour=23;
int mode;
void hour_blink()
{
							int mode=1;
							int i=50,j=50;
	if(R1==0)
	{
		delay_ms(50);
		if(R1==0)
		{
			hour++;
			if(hour==24) hour=0;
			while(R1==0);
		}
	}
	if(R4==0)
	{
		delay_ms(50);
		if(R4==0)
		{
			hour--;
			if(hour==0) hour=24;
			while(R4==0);
		}
	}
							while(i--)
							{
								P2=0xC0;P0=weizhi[0];
								P2=0xFF;P0=num[hour/10];
								delay_ms(1);
								P2=0xC0;P0=weizhi[1];
								P2=0xFF;P0=num[hour%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[second%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[second/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[3];
								P2=0xFF;P0=num[minute/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[4];
								P2=0xFF;P0=num[minute%10];
								delay_ms(1);
							
							}
							i=50;
							while(j--)
							{
											
					P2=0xC0;P0=weizhi[0];
					P2=0xFF;P0=num[11];				
					delay_ms(1);
					P2=0xC0;P0=weizhi[1];
					P2=0xFF;P0=num[11];
					delay_ms(1);	
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[second%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[second/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[3];
								P2=0xFF;P0=num[minute/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[4];
								P2=0xFF;P0=num[minute%10];
								delay_ms(1);
							}
							j=50;
													}

void minute_blink()
{
	int mode=2;
	int i=50,j=50;
	if(R1==0)
	{
		delay_ms(50);
		if(R1==0)
		{
			minute++;
			if(minute==60) minute=0;
			while(R1==0);
		}
	}
	if(R4==0)
	{
		delay_ms(50);
		if(R4==0)
		{
			minute--;
			if(minute==0) minute=60;
			while(R4==0);
		}
	}

	
							
							while(i--)
							{
								P2=0xC0;P0=weizhi[3];
								P2=0xFF;P0=num[minute/10];
								delay_ms(1);
								P2=0xC0;P0=weizhi[4];
								P2=0xFF;P0=num[minute%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[second%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[second/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[0];
								P2=0xFF;P0=num[hour/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[1];
								P2=0xFF;P0=num[hour%10];
								delay_ms(1);
							
							}
							i=50;
							while(j--)
							{
											
					P2=0xC0;P0=weizhi[3];
					P2=0xFF;P0=num[11];				
					delay_ms(1);
					P2=0xC0;P0=weizhi[7];
					P2=0xFF;P0=num[11];
					delay_ms(1);	
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[second%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[second/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[0];
								P2=0xFF;P0=num[hour/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[1];
								P2=0xFF;P0=num[hour%10];
								delay_ms(1);
							}
							j=50;
													
}
void second_blink()
{
	int mode=3;
	int i=50,j=50;
	if(R1==0)
	{
		delay_ms(50);
		if(R1==0)
		{
			second++;
			if(second==60) second=0;
			while(R1==0);
		}
	}
	if(R4==0)
	{
		delay_ms(50);
		if(R4==0)
		{
			second--;
			if(second==0) second=60;
			while(R4==0);
		}
	}
	while(i--)
							{
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[second/10];//ÃëµÄʮλ
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[second%10];//ÃëµÄ¸öλ
								delay_ms(1);
								
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[4];
								P2=0xFF;P0=num[minute%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[3];
								P2=0xFF;P0=num[minute/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[0];
								P2=0xFF;P0=num[hour/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[1];
								P2=0xFF;P0=num[hour%10];
								delay_ms(1);
							
							}
							i=50;
							while(j--)
							{
											
								P2=0xC0;P0=weizhi[6];
								P2=0xFF;P0=num[11];				
								delay_ms(1);
								P2=0xC0;P0=weizhi[7];
								P2=0xFF;P0=num[11];
								delay_ms(1);	
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[5];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[2];
								P2=0xFF;P0=num[10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[4];
								P2=0xFF;P0=num[minute%10];
								delay_ms(1);
											
								delay_ms(1);
								P2=0xC0;P0=weizhi[3];
								P2=0xFF;P0=num[minute/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[0];
								P2=0xFF;P0=num[hour/10];
								delay_ms(1);
								
								delay_ms(1);
								P2=0xC0;P0=weizhi[1];
								P2=0xFF;P0=num[hour%10];
								delay_ms(1);
							}
							j=50;
}
void Init()
{
	R1=R2=R3=R4=1;
}
void INT0_Init(void)//ÍⲿÖжÏ0
	{
  IT0 = 1;  
  EX0 = 1;    
  EA = 1; 
	IT1=1;
	EX1=1;		
}
void Init_timer0()      
{
	TMOD = 0x01;      
	TH0 = (65535 - 50000) / 256;    
	TL0 = (65535 - 50000) % 256;	
	EA  = 1;     
	ET0 = 1;     
	TR0 = 1;     
}

void INT0_handle(void) interrupt 0
	{
		int hour_data=0;
		int minute_data=0;
		int second_data=0;
		int i=50,j=50;
		int count_left =0;
		int count_right =0;
				
while(1)
				{
					second_blink();
					if(R2==0)
									{
										delay_ms(50);
										if(R2==0)
										{			
											count_right++;
											while(R2==0);
										}
									}
switch(count_right)
									{
										case 1: 
													while(1)
													{
											hour_blink();
											if(R2==0) break;
											if(R3==0) 
												{
													count_left=0;
													break;
												}
											}
										case 2:
											while(1)
												{
													minute_blink();
													if(R2==0)
																	{
																		count_right=0;
																		break;
																	}
													if(R3==0) 
																	{
																		count_left=2;
																		break;
																	}
												}
									}	
					if(R3==0)
									{
										delay_ms(50);
										if(R3==0)
										{			
											count_left++;
											while(R3==0);
										}
									}
switch(count_left)
									{
										case 1: 
											while(1)
											{
											minute_blink();
											if(R3==0) break;
											if(R2==0) 
												{
													count_right=0;
													break;
												}
											}
										case 2:
											while(1)
												{
													hour_blink();
													if(R3==0)
																	{
																		count_left=0;
																		break;
																	}
													if(R2==0) 
																	{
																		count_right=2;
																		break;
																	}
												}
									}	
					}
														
		}
void Service_timer0() interrupt 1
{
	TH0 = (65535 - 50000) / 256;    
	TL0 = (65535 - 50000) % 256;	
	count++;
	if(count == 20)   
	{
		second++;
		count = 0;
	}	
	if(second == 60)
	{
		minute++;
		second=0;
	}
	if(minute==60)
	{
		hour++;
		minute=0;
		if(hour==24) hour=0;
	}
}

void main()
	{
		allinit();
		INT0_Init();
	Init_timer0();
		while(1)
			{		
				
	delay_ms(1);
	shumaguan_control(6,second/10);
//	P2=0xC0;P0=weizhi[6];
//	P2=0xFF;P0=num[second/10];//ÃëµÄʮλ
	delay_ms(1);

	shumaguan_control(7,second%10);
//	P2=0xC0;P0=weizhi[7];
//	P2=0xFF;P0=num[second%10];//ÃëµÄ¸öλ
	delay_ms(1);

	P2=0xC0;P0=weizhi[5];
	P2=0xFF;P0=num[10];
	delay_ms(1);
				
shumaguan_control(4,minute%10);
//	P2=0xC0;P0=weizhi[4];
//	P2=0xFF;P0=num[minute%10];
	delay_ms(1);
				
	delay_ms(1);
	P2=0xC0;P0=weizhi[3];
	P2=0xFF;P0=num[minute/10];
	delay_ms(1);
	
	delay_ms(1);
	P2=0xC0;P0=weizhi[0];
	P2=0xFF;P0=num[hour/10];
	delay_ms(1);
	
	delay_ms(1);
	P2=0xC0;P0=weizhi[1];
	P2=0xFF;P0=num[hour%10];
	delay_ms(1);
	
	delay_ms(1);
	P2=0xC0;P0=weizhi[2];
	P2=0xFF;P0=num[10];
	delay_ms(1);
		}
	}




  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sol-itude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值