📄 clock_adj.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 + -