📄 cloc_adjust.c
字号:
/*------------------------------------------------------------------*-
Cloc_Adjust.C (v1.00)
------------------------------------------------------------------
Simple library function for keeping track of elapsed time
This version for (Mx) LED display
COPYRIGHT
---------
This code is from the book:
PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont
[Pearson Education, 2001; ISBN: 0-201-33138-1].
This code is copyright (c) 2001 by Michael J. Pont.
See book for copyright details and other information.
-*------------------------------------------------------------------*/
#include "Main.h"
#include "Port.h"
#include "Cloc_Adjust.h"
// ------ Public variable declarations -----------------------------
extern tByte LED_Mx4_Data_G[4];
extern tByte code LED_Table_G[20];
// Time variables
extern tByte Hou_G, Min_G, Sec_G;
// ------ Private variable definitions------------------------------
static tByte Time_in_state;
static tByte Time_in_state1;
static tByte Time_Sub;
tByte state;
// Possible system states
typedef
enum { NO_CHANGE,CH_HOUR,CH_MIN}eChange_State;
static eChange_State Change_State_G;
/*------------------------------------------------------------------*-
CLOCK_LED_Time_Adjust_init
_*------------------------------------------------------------------*/
void CLOCK_LED_Time_Adjust_Init(void)
{
Change_State_G = NO_CHANGE;
state = 0;
}
/*------------------------------------------------------------------*-
CLOCK_LED_Time_Adjust
Adjust the global time variables.
*** Must be scheduled once per 200 ~500 ms
-*------------------------------------------------------------------*/
void CLOCK_LED_Time_Adjust(void)
{
SET_pin = 1;
if(SET_pin == 0)
{
if(++Time_in_state1 == 2)
{
Time_in_state1 = 0;
if(++state ==3)
{
state = 0;
}
}
switch (state)
{
case 0:
{
Change_State_G = NO_CHANGE;
break;
}
case 1:
{
Change_State_G = CH_HOUR;
break;
}
case 2:
{
Change_State_G = CH_MIN;
break;
}
}
}
else
{
Time_in_state1 = 0;
}
switch (Change_State_G)
{
case NO_CHANGE:
{
state = 0;
break;
}
case CH_HOUR:
{ ADD_pin = 1;
if(ADD_pin == 0)
{
if(++Time_in_state ==2 )
{ Time_in_state = 0;
if(++Hou_G == 24)
{
Hou_G = 0;
}
}
break;
}
SUB_pin = 1;
if(SUB_pin == 0)
{
if(++Time_Sub > 2)
{
Time_Sub = 0;
if(--Hou_G < 0)
{
Hou_G = 23;
}
}
break ;
}
Time_Sub = 0;
Time_in_state = 0;
LED_Mx4_Data_G[2] = LED_Table_G[(Hou_G % 10) + 10];
LED_Mx4_Data_G[3] = LED_Table_G[(Hou_G / 10) + 10];
LED_Mx4_Data_G[1] = LED_Table_G[Min_G / 10];
LED_Mx4_Data_G[0] = LED_Table_G[Min_G % 10];
break ;
}
case CH_MIN:
{
ADD_pin = 1;
if(ADD_pin == 0)
{
if(++Time_in_state >2 )
{ Time_in_state = 0;
if(++Min_G > 23)
{
Min_G = 0;
}
}
break;
}
SUB_pin = 1;
if(SUB_pin == 0)
{
if(++Time_Sub > 2)
{
Time_Sub = 0;
if(--Min_G < 0)
{
Min_G = 23;
}
}
break ;
}
Time_in_state = 0;
Time_Sub = 0;
LED_Mx4_Data_G[2] = LED_Table_G[Hou_G % 10];
LED_Mx4_Data_G[3] = LED_Table_G[Hou_G / 10];
LED_Mx4_Data_G[1] = LED_Table_G[(Min_G / 10) + 10];
LED_Mx4_Data_G[0] = LED_Table_G[(Min_G % 10) + 10];
break ;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -