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

📄 t_lights.c

📁 schduler for AVR mcu
💻 C
字号:
/*
------------------------------------------------------------------*-

   T_lights.C (v1.00)

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


   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.
 
   --- Modefied by  sylva zhu to apply for  AVR Microcontroller .
   --- Ver 1.0  Sept 25th , 2006 .

-*------------------------------------------------------------------
*/
#include  <iom32.h>
#include  <inavr.h>
#include  <comp_a90.h>

#include  "Main.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 - must call the update task once per second)
//
#define   RED_DURATION                 2
#define   RED_AND_AMBER_DURATION       2

// NOTE: 
// GREEN_DURATION must equal RED_DURATION
// AMBER_DURATION must equal RED_AND_AMBER_DURATION
#define   GREEN_DURATION           RED_DURATION 
#define   AMBER_DURATION           RED_AND_AMBER_DURATION

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

// The state of the system
static eLight_State Light_state_G;

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

  TRAFFIC_LIGHTS_Init()

  Prepare for the scheduled traffic light activity.

-*------------------------------------------------------------------
*/
void TRAFFIC_LIGHTS_Init(const eLight_State START_STATE)
{
   Light_state_G = RED;  // Slave is Green; Master is Red
}


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

  TRAFFIC_LIGHTS_Update()

  Must be called once per 500mS.

-*------------------------------------------------------------------
*/
void TRAFFIC_LIGHTS_Update(void)
{
   static unsigned int Time_in_state;

   switch (Light_state_G)
   {
      case RED: 
       {
         //Red_light on , Green light off .
         PORTA|=(1<<PORTA5);
         PORTA&=~(1<<PORTA4);
         //
         if (++Time_in_state == RED_DURATION)
          {
            Light_state_G = GREEN;
            Time_in_state = 0;
          }

         break;
         }
	  //
	  //
	  //
      case GREEN: 
         {
          //Red_light off , Green light on .
         PORTA|=(1<<PORTA4);
         PORTA&=~(1<<PORTA5);
         //
         if (++Time_in_state == RED_AND_AMBER_DURATION)
          {
            Light_state_G = RED_GREEN;
            Time_in_state = 0;
          }

         break;
         }
	  //
	  //
	  //
      case RED_GREEN: 
         {
          //Red_light = ON;
          //Green_light = ON;
         
         PORTA|=(1<<PORTA4)|(1<<PORTA5);
         //
         if (++Time_in_state == GREEN_DURATION)
          {
            Light_state_G = AMBER;
            Time_in_state = 0;
          }

         break;
         }
	  //
	  //
	  //
      case AMBER: 
        {
         //Red_light = OFF;
         //Green_light = OFF;
         PORTA&=~((1<<PORTA4)|(1<<PORTA5));
         //
         if (++Time_in_state == AMBER_DURATION)
          {
            Light_state_G = RED;
            Time_in_state = 0;
          }
	     //
         break;
        }
      default:
           break;
   }

}

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


















⌨️ 快捷键说明

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