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

📄 clock_adj.c

📁 时间调整程序供参考时间小时和分钟每一个单位增加
💻 C
字号:

#include "declare.h"
#include <pic.h>
//////////////////////////////////////////////////////////////////////////////
//     变量定义区
/////////////////////////////////////////////////////////////////////////////
uchar old_key,new_key;
uchar adj_counter;
uchar counter30s;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////		小时和分钟每一个单位增加
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TIME_ADJ_ONE(void)
{uchar hour,minute,data;
 uchar hight,low;

	if(adj_counter==0)
		{data=DS1302_Read(DS1302_HR_Reg);
		 hight=(data&0xf0)>>4;
	   	 low=data&0x0f;
		 hour=hight*10+low;
		 hour++;
		 if(hour>23)
		 	hour=0;
		 BCD(hour);
		 data=((BCD2&0x0f)<<4)|(BCD1&0x0f);
		 DS1302_Write(DS1302_HR_Reg,data);		//hour
		 DS1302_Write(DS1302_SEC_Reg,0x00);			//秒
		}
	else if(adj_counter==1)
		{data=DS1302_Read(DS1302_MIN_Reg);
		 hight=(data&0xf0)>>4;
	   	 low=data&0x0f;
		 minute=hight*10+low;
		 minute++;
		 if(minute>59)
			minute=0;
		BCD(minute);
		data=((BCD2&0x0f)<<4)|(BCD1&0x0f);
	 	DS1302_Write(DS1302_MIN_Reg,data);		//minute
		 DS1302_Write(DS1302_SEC_Reg,0x00);			//秒
		}								
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////		小时和分钟每5个单位增加
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TIME_ADJ_FIVE(void)
{uchar hour,minute,data;
 uchar hight,low;

	if(adj_counter==0)
		{data=DS1302_Read(DS1302_HR_Reg);
		 hight=(data&0xf0)>>4;
	   	 low=data&0x0f;
		 hour=hight*10+low;
		 hour=hour+5;
		 if(hour>23)
		 	hour=0;
		 BCD(hour);
		 data=((BCD2&0x0f)<<4)|(BCD1&0x0f);
		 DS1302_Write(DS1302_HR_Reg,data);		//hour
		 DS1302_Write(DS1302_SEC_Reg,0x00);			//秒
		}
	else if(adj_counter==1)
		{data=DS1302_Read(DS1302_MIN_Reg);
		 hight=(data&0xf0)>>4;
	   	 low=data&0x0f;
		 minute=hight*10+low;
		 minute=minute+5;
		 if(minute>59)
			minute=0;
		BCD(minute);
		data=((BCD2&0x0f)<<4)|(BCD1&0x0f);
	 	DS1302_Write(DS1302_MIN_Reg,data);		//minute
		DS1302_Write(DS1302_SEC_Reg,0x00);			//秒
		}												
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////		时钟调整处理程序
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ADJ_CLOCK(void)
{
	counter30s=0;															//30秒计数清零
	adj_counter=0;

	while(status == ADJ_CLOCK_MODE)
		{ADJ_CLOCK_DISPLAY();
		 if(counter30s>30)								//若30秒后无键按下则退出并转换成时钟模式
			{status = CLOCK_MODE;
			 old_key = 0xff;			
			 new_key = 0xff;			
			 return;
			}
		 while(read_key()!=0xff)
			{
			 counter30s=0;								//只要有键按下,此变量清零 
			 if(old_key==new_key)
				{if(key_dowm_2s<=2000)
			 		break;
			 	 else									//------按键时间超过2秒
					{					 
					 switch(new_key)
			 			{ 	case KEY_A:	
								TIME_ADJ_FIVE();
								delay(50);
								CLOCK_DISPLAY();
								key_dowm_2s = 2001;		//增加次句是避免在长时间按键时	key_dowm_2s 做自加循环				
								break;
							case KEY_B:	
								status = CLOCK_MODE;
			 					old_key = 0xff;			
			 					new_key = 0xff;									
								return;
						}
					} 
				}
			else
			{	old_key=new_key;						//-------短时间按键操作
				switch(new_key)
			 	{ 	case KEY_A:
							key_dowm_2s=0;	
							TIME_ADJ_ONE();
							ADJ_CLOCK_DISPLAY();
							break;
					case KEY_B:	
							key_dowm_2s=0;
							adj_counter=adj_counter+1;
							if(adj_counter==2)
								adj_counter = 0;
							break;
				}
			}
		}
		if(new_key==0xff)
			old_key=new_key;
		}
}

⌨️ 快捷键说明

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