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

📄 cloc_adjust.c

📁 自己做的时钟
💻 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 + -