📄 clock.c
字号:
}
//========================================================================================================//
//=========================================================================================================//
void alarm_display(void) //*显示子函数*//*动态扫描法*//
{
P0=0x80;
b=0;
delay(2);
b=1;
P0=0x80;
g=0;
delay(2);
g=1;
if(AG) //AG为小时位闪烁标志位//
{
P0=shuma[alarm.hour/10];
q=0;
delay(2);
q=1;
P0=shuma[alarm.hour%10];
// P0_7=1;
b=0;
delay(2);
b=1;
}
if(AZ) //AZ为分钟位闪烁标志位//
{
P0=shuma[alarm.minu/10];
s=0;
delay(2);
s=1;
P0=shuma[alarm.minu%10];
// P0_7=1;
g=0;
delay(2);
g=1;
}
if(AD) //AD为秒位闪烁标志位//
{
P0=shuma[alarm.second/10];
m=0;
delay(2);
m=1;
P0=shuma[alarm.second%10];
f=0;
delay(2);
f=1;
}
P0=shuma[10];
z=0;
delay(2);
z=1;
if(AW)
{
P0=shuma[alarm.length];
w=0;
delay(2);
w=1;
}
}
//=================================================================================================//
void alarm_key_flash(void) //*闪烁子函数*//
{
if(P1_3==0)
{
while(P1_3==0)
alarm_display();
p++; //n表示某两位闪烁:n=0 -> 不闪烁,退出调时状态//
} // n=1 -> 小时位闪烁,小时位处于可调时状态//
if(p==5) // n=2 -> 分钟位闪烁,分钟位处于可调时状态//
p=0; // n=3 -> 秒位闪烁,秒位处于可调时状态//
if(p!=1)
AG=1;
if(p!=2)
AZ=1;
if(p!=3) //KT为可调时标志:KT=0 -> 不可调时//
AD=1; // KT=1 -> 可调时//
if(p!=4)
AW=1;
switch(p)
{
case 0:AT=0;break;
case 1:AG=flash;hml=alarm.hour;AT=1;break; //hms为调时临时变量,需要调整某位时则先把其初始值放到hms中//
case 2:AZ=flash;hml=alarm.minu;AT=1;break;
case 3:AD=flash;hml=alarm.second;AT=1;break;
case 4:AW=flash;hml=alarm.length;AT=1;break;
}
}
//=================================================================================================//
void alarm_tiaoshi(void) //*调时子函数*//
{
if(P1_6==0) //按P1_6键进行时间调整//
{
while(P1_6==0)
alarm_display();
if(AT==1) //检验可调标志位KT//
{
hml++;
switch(p)
{
case 1:alarm.hour=hml;break; //根据n不同,返回给不同的位: n=1 -> 返回给小时位//
case 2:alarm.minu=hml;break; // n=2 -> 返回给分钟位//
case 3:alarm.second=hml;break; // n=3 -> 返回给秒位//
case 4:alarm.length=hml;break;
}
}
}
}
//===================================================================================================//
void alarm_tiaozheng(void) //*时间修正子函数*//
{
if(alarm.hour==24)
alarm.hour=0;
if(alarm.minu==60)
alarm.minu=0;
if(alarm.second==60)
alarm.second=0;
if(alarm.length==8)
alarm.length=1;
}
//=====================================================================================================//
void alarm_qingling(void) //*清零子函数*//
{
if(P1_7==0) //P1_0为清零键//
{
while(P1_7==0)
alarm_display();
switch(p)
{
case 0:alarm.hour=0;alarm.minu=0;alarm.second=0;alarm.length=1;break; //根据n不同,清零位不同:n=0 -> 全部位清零//
case 1:alarm.hour=0;break; // n=1 -> 小时位清零//
case 2:alarm.minu=0;break; // n=2 -> 分钟位清零//
case 3:alarm.second=0;break; // n=3 -> 秒位清零//
case 4:alarm.length=1;break;
}
}
}
//========================================================================================================//
//==============================================================================================//
void date_display(void) //*显示子函数*//*动态扫描法*//
{
P0=shuma[2];
q=0;
delay(2);
q=1;
P0=shuma[0];
b=0;
delay(2);
b=1;
P0=0x80;
g=0;
delay(2);
g=1;
P0=0x80;
f=0;
delay(2);
f=1;
if(DG) //AZ为分钟位闪烁标志位//
{
P0=shuma[date.year/10];
s=0;
delay(2);
s=1;
P0=shuma[date.year%10];
// P0_7=1;
g=0;
delay(2);
g=1;
}
if(DZ) //AD为秒位闪烁标志位//
{
P0=shuma[date.month/10];
m=0;
delay(2);
m=1;
P0=shuma[date.month%10];
// P0_7=1;
f=0;
delay(2);
f=1;
}
if(DD)
{
P0=shuma[date.day/10];
z=0;
delay(2);
z=1;
P0=shuma[date.day%10];
w=0;
delay(2);
w=1;
}
}
//=================================================================================================//
void date_key_flash(void) //*闪烁子函数*//
{
if(P1_3==0)
{
while(P1_3==0)
date_display();
u++; //n表示某两位闪烁:n=0 -> 不闪烁,退出调时状态//
} // n=1 -> 小时位闪烁,小时位处于可调时状态//
if(u==4) // n=2 -> 分钟位闪烁,分钟位处于可调时状态//
u=0; // n=3 -> 秒位闪烁,秒位处于可调时状态//
if(u!=1)
DG=1;
if(u!=2)
DZ=1;
if(u!=3) //KT为可调时标志:KT=0 -> 不可调时//
DD=1; // KT=1 -> 可调时//
switch(u)
{
case 0:DT=0;break;
case 1:DG=flash;ymd=date.year;DT=1;break; //hms为调时临时变量,需要调整某位时则先把其初始值放到hms中//
case 2:DZ=flash;ymd=date.month;DT=1;break;
case 3:DD=flash;ymd=date.day;DT=1;break;
}
}
//=================================================================================================//
void date_tiaoshi(void) //*调时子函数*//
{
if(P1_6==0) //按P1_6键进行时间调整//
{
while(P1_6==0)
date_display();
if(DT==1) //检验可调标志位KT//
{
ymd++;
switch(u)
{
case 1:date.year=ymd;break; //根据n不同,返回给不同的位: n=1 -> 返回给小时位//
case 2:date.month=ymd;break; // n=2 -> 返回给分钟位//
case 3:date.day=ymd;break; // n=3 -> 返回给秒位//
}
}
}
}
//===================================================================================================//
void date_tiaozheng(void) //*时间修正子函数*//
{
if(date.year==100)
date.year=0;
if(date.month==13)
date.month=1;
if(date.day==yuefen[date.month])
date.day=1;
}
//=====================================================================================================//
void date_qingling(void) //*清零子函数*//
{
if(P1_7==0) //P1_0为清零键//
{
while(P1_7==0)
date_display();
switch(u)
{
case 0:date.year=0;date.month=0;date.day=0;break; //根据n不同,清零位不同:n=0 -> 全部位清零//
case 1:date.year=0;break; // n=1 -> 小时位清零//
case 2:date.month=0;break; // n=2 -> 分钟位清零//
case 3:date.day=0;break; // n=3 -> 秒位清零//
}
}
}
//========================================================================================================//
//=========================================================================================================//
void key_zhuanhuan(void)
{
if(P1_0==0)
{
while(P1_0==0);
i++;
if(i==3)
i=0;
}
}
//=========================================================================================================//
void naozhong(void)
{
if(time.hour==alarm.hour)
{
if(time.minu==alarm.minu)
{
NZ=1;
}
}
if(NZ==1)
{
P3_7=0;
if(time.minu==alarm.minu+alarm.length)
{
NZ=0;
}
}
else
{
P3_7=1;
}
}
//============================================================================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -