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

📄 t_lights.c

📁 Keil uVision2用C语言开发的交通灯嵌入式系统
💻 C
字号:
/*------------------------------------------------------------------*-

   T_lights.C (v1.00)

  ------------------------------------------------------------------
   
   Traffic light control program (Test Version 1.0)

   COPYRIGHT
   ---------

   This code is associated with the book:

   EMBEDDED C by Michael J. Pont 
   [Pearson Education, 2002: ISBN: 0-201-79523-X].

   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 "T_lights.H"

// ------ Private constants ----------------------------------------

// Easy to change logic here
#define ON  0
#define OFF 1

// Times in each of the (four) possible light states
// (Times are in seconds)
#define RED_DURATION  20
#define RED_AND_AMBER_DURATION  5
#define GREEN_DURATION 30
#define AMBER_DURATION 5


// ------ Private variables ----------------------------------------

// The state of the system
static eLight_State Light_state_G;

// The time in that state
static tLong Time_in_state;

// Used by sEOS
static tByte Call_count_G = 0;


/*------------------------------------------------------------------*-

  TRAFFIC_LIGHTS_Init()

  Prepare for the traffic light activity.

-*------------------------------------------------------------------*/
void TRAFFIC_LIGHTS_Init(const eLight_State START_STATE)
   {
   Light_state_G = START_STATE;  // Decide on initial state
   }


/*------------------------------------------------------------------*-

  TRAFFIC_LIGHTS_Update()

  Must be called once per second.

-*------------------------------------------------------------------*/
void TRAFFIC_LIGHTS_Update(void)
   {
   switch (Light_state_G)
      {
      case RED: 
         {
         Red_light = ON;
         Amber_light = OFF;
         Green_light = OFF;

         if (++Time_in_state == RED_DURATION)
            {
            Light_state_G = RED_AND_AMBER;
            Time_in_state = 0;
            }

         break;
         }

      case RED_AND_AMBER: 
         {
         Red_light = ON;
         Amber_light = ON;
         Green_light = OFF;

         if (++Time_in_state == RED_AND_AMBER_DURATION)
            {
            Light_state_G = GREEN;
            Time_in_state = 0;
            }

         break;
         }

      case GREEN: 
         {
         Red_light = OFF;
         Amber_light = OFF;
         Green_light = ON;

         if (++Time_in_state == GREEN_DURATION)
            {
            Light_state_G = AMBER;
            Time_in_state = 0;
            }

         break;
         }

      case AMBER: 
         {
         Red_light = OFF;
         Amber_light = ON;
         Green_light = OFF;

         if (++Time_in_state == AMBER_DURATION)
            {
            Light_state_G = RED;
            Time_in_state = 0;
            }

         break;
         }
      }
   }

/*------------------------------------------------------------------*-
  ---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -