📄 time.c
字号:
#include "hardware.h"
#include "Clock_Time.h"
extern int G_TimeCount; // 1秒计数
extern int G_SecTime; // 2MS 计数
extern int G_KeyCount; // 按键次数计数
extern int G_Sec ; // 秒计数
extern int G_SecH ; // 秒显示的高位
extern int G_SecL ; // 秒显示的低位
extern int G_Step ; // 程序运行的步骤
extern int G_MiunteH ; // 分钟显示高位
extern int G_MiunteL ; // 分钟显示低位
extern int G_Miunte ; // 分钟计数
extern int G_HourH ; // 小时显示高位
extern int G_HourL ; // 小时显示低位
extern int G_Hour ; // 小时计数
extern int G_Destine_MiunteH ;
extern int G_Destine_MiunteL ;
extern int G_Destine_Miunte ;
extern int G_Destine_Hour ;
extern int G_Destine_HourH ;
extern int G_Destine_HourL ;
extern int G_Key_Vaule;
extern int G_KeyCount3;
extern Key_Down(); // 子函数是否有键按下
//====================================================
//函数: Time()
//语法:void Time(void)
//描述:时钟显示时、分、秒
//参数:无
//返回:无
//====================================================
void Time(void)
{
G_SecTime = 0;
while(G_SecTime != 1) // 2MS 是否到了
{;} // 2MS没有到等待
G_SecTime = 0;
Clear_WatchDog(); // 清看们狗
if ( G_TimeCount == 500)
{
G_Sec++; // 1秒到了,则秒计数
if (G_Sec == 60)
{
Clear_WatchDog();
G_Miunte++; // 1分钟到,分钟计数
G_SecH = 0;
G_SecL = 0;
G_Sec = 0; // 秒显示计数清零
if (G_Miunte == 60)
{
Clear_WatchDog();
G_Hour ++; // 1小时到,小时计数
G_Miunte = 0;
G_MiunteH = 0; // 分钟显示计数清零
G_MiunteL = 0;
G_Sec = 0;
if (G_Hour == 24)
{
Clear_WatchDog();
G_Hour = 0; // 1天到,清分,秒,小时的计数、显示
G_HourH = 0;
G_HourL = 0;
G_Miunte = 0; // 清分,秒,小时的计数、显示
G_MiunteH = 0;
G_MiunteL = 0;
G_Sec = 0;
G_SecH = 0;
G_SecL = 0;
}
}
}
G_TimeCount = 0; // 清计数
}
switch(G_Step)
{
case 5:
if (G_Sec > 9) // 秒显示高低位分解
{
G_SecH = (G_Sec / 10); // 高位
G_SecL = (G_Sec % 10); // 低位
}
else
G_SecL = G_Sec;
G_Step = 6;
break;
case 6:
if (G_Miunte>9) // 分钟显示高低位分解
{
G_MiunteH = (G_Miunte / 10);
G_MiunteL = (G_Miunte % 10);
}
else
G_MiunteL = G_Miunte;
G_Step = 7;
break;
case 7:
if (G_Hour>9) // 小时显示高低位分解
{
G_HourH = (G_Miunte / 10);
G_HourL = (G_Miunte % 10);
}
else
G_HourL = G_Hour;
G_Step = 8;
break;
case 8:
Clear_WatchDog();
F_Show(6,G_SecL); // 显示秒低位
G_Step = 9;
break;
case 9:
F_Show(4,G_MiunteL); // 显示分钟低位
G_Step = 10;
break;
case 10:
F_Show(2,G_HourL); // 显示小时低位
G_Step = 11;
break;
case 11:
Clear_WatchDog();
F_Show(5,G_SecH); // 显示秒高位
G_Step = 12;
break;
case 12:
F_Show(3,G_MiunteH); // 显示分钟高位
G_Step = 13;
break;
case 13:
F_Show(1,G_HourH); // 显示小时高位
G_Step = 5;
break;
default:
break;
}
}
//====================================================
//函数: Key2_Vaule()
//语法:int Key2_Vaule()
//描述:按键KEY2的计时功能
//参数:无
//返回:无
//====================================================
int Key2_Vaule()
{
int I_Step,KK;
G_TimeCount = 0;
G_SecTime = 0;
KK = 0;
while (G_KeyCount == 1) // 按键KEY2 1次计时开始
{
Key_Down(); // 是否有键按下
Time(); // 时间计算并实时显示
if (KK == 0) // 是否闹铃
{
if(G_Destine_HourH == 0) // 开始的时间闹钟是不响的
if(G_Destine_HourL == 0)
if( G_Destine_MiunteH == 0)
if( G_Destine_MiunteL == 0)
{
KK = 0;
}
else
{
if(G_Destine_HourH == G_HourH)
if(G_Destine_HourL == G_HourL)
if( G_Destine_MiunteH == G_MiunteH)
if( G_Destine_MiunteL == G_MiunteL)
{
SACM_A2000_Initial(1); // 比较时、分到就播放声音
SACM_A2000_Play(0,3,3);
while(SACM_A2000_Status()&0x01)
{
SACM_A2000_ServiceLoop(); // 播放
}
G_TimeCount = 0;
G_SecTime = 0;
KK = 1;
SP_INT_TIMEA(); // 开中断
}
}
}
}
while (G_KeyCount == 2) // KEY2次数为2显示暂停的时间
{
Key_Down(); // 是否有键按下
switch(I_Step)
{
case 0:
Clear_WatchDog();
F_Show(6,G_SecL); // 第一步显示秒的低位
I_Step = 1;
break;
case 1:
Clear_WatchDog(); // 第二步显示秒的高位
F_Show(5,G_SecH);
I_Step = 2;
break;
case 2:
Clear_WatchDog();
F_Show(4,G_MiunteL); // 第三步显示分钟的低位
I_Step = 3;
break;
case 3:
Clear_WatchDog();
F_Show(3,G_MiunteH); // 第四次显示分钟的高位
I_Step = 4;
break;
case 4:
Clear_WatchDog();
F_Show(2,G_HourL); // 第五次显示小时的低位
I_Step = 5;
break;
case 5:
Clear_WatchDog();
F_Show(1,G_HourH); // 第六次显示小时的高位
I_Step = 0; // 步骤为第一次,循环
break;
default:
break;
}
}
while (G_KeyCount == 3) // KEY2次数3次的时候显示全0
{
SP_Export(Port_IOB_Data ,0x7f3f);
G_KeyCount = 0;
G_Sec = 1; // 秒计数
G_SecH = 0; // 秒显示的高位
G_SecL = 0; // 秒显示的低位
G_MiunteH = 0; // 分钟显示高位
G_MiunteL = 0; // 分钟显示低位
G_Miunte = 0; // 分钟计数
G_HourH = 0; // 小时显示高位
G_HourL = 0; // 小时显示低位
G_Hour = 0; // 小时计数
}
}
//====================================================
//函数: Alarm_Clock()
//语法:void Time(void)
//描述:时钟的预定
//参数:无
//返回:无
//====================================================
int Alarm_Clock()
{
int i,j,k;
j = 0;
k = 0;
i = G_Key_Vaule;
while(i == 3 )
{
Key_Down();
switch(G_KeyCount3)
{
Key_Down();
Clear_WatchDog();
case 1:
Key_Down();
if (G_Key_Vaule == 1)
{
G_Key_Vaule = 0;
if (G_Destine_Miunte == 59)
{
G_Destine_Miunte = 0;
G_Destine_MiunteH = 0;
}
else G_Destine_Miunte ++;
Clear_WatchDog();
}
else if (G_Key_Vaule == 2)
{
G_Key_Vaule = 0;
if (G_Destine_Miunte == 0) G_Destine_Miunte = 59;
else G_Destine_Miunte --;
Clear_WatchDog();
}
if (G_Destine_Miunte > 9) // 秒显示高低位分解
{
G_Destine_MiunteH = (G_Destine_Miunte / 10); // 高位
G_Destine_MiunteL = (G_Destine_Miunte % 10); // 低位
Clear_WatchDog();
}
else
G_Destine_MiunteL = G_Destine_Miunte;
if ( j ==0)
{
F_Show(4,G_Destine_MiunteL); // 第一步显示秒的低位
j = 1;
}
else if (j == 1)
{
F_Show(3,G_Destine_MiunteH); // 第一步显示秒的低位
j = 0;
}
Clear_WatchDog();
break;
case 2:
Key_Down();
if (G_Key_Vaule == 1)
{
G_Key_Vaule = 0;
if (G_Destine_Hour == 24)
{
G_Destine_Hour = 0;
G_Destine_HourH = 0;
}
else G_Destine_Hour ++;
Clear_WatchDog();
}
else if (G_Key_Vaule == 2)
{
G_Key_Vaule = 0;
if (G_Destine_Hour == 0) G_Destine_Hour = 24;
else G_Destine_Hour --;
Clear_WatchDog();
}
if (G_Destine_Hour > 9) // 秒显示高低位分解
{
G_Destine_HourH = (G_Destine_Hour / 10); // 高位
G_Destine_HourL = (G_Destine_Hour % 10); // 低位
Clear_WatchDog();
}
else
G_Destine_HourL = G_Destine_Hour;
if (k == 0)
{
F_Show(2,G_Destine_HourL); // 第一步显示秒的低位
k = 1;
}
else if (k == 1)
{
F_Show(1,G_Destine_HourH); // 第一步显示秒的低位
k = 0;
}
Clear_WatchDog();
break;
default:
G_KeyCount3 = 0;
G_Key_Vaule = 0;
i = 0;
Key_Down();
SP_Export(Port_IOB_Data ,0x7f3f); // 显示全0
Clear_WatchDog();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -