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

📄 dinosaur.c

📁 Embedded C 这本书的范例光碟程式
💻 C
字号:
/*------------------------------------------------------------------*-

   Dinosaur.C (v1.00)

  ------------------------------------------------------------------
   
   Demonstration of multi-state (timed) architecture:
   Dinosaur control system.

   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 "Dinosaur.h"

// ------ Private data type declarations ---------------------------
// Possible system states
typedef 
enum {SLEEPING, WAKING, GROWLING, ATTACKING} eDinosaur_State;

// ------ Private function prototypes ------------------------------
void DINOSAUR_Perform_Sleep_Movements(void);
void DINOSAUR_Perform_Waking_Movements(void);
void DINOSAUR_Growl(void);
void DINOSAUR_Perform_Attack_Movements(void);

// ------ Private constants ----------------------------------------
// Times in each of the (four) possible states
// (Times are in seconds)
#define SLEEPING_DURATION 255
#define WAKING_DURATION 60
#define GROWLING_DURATION 40 
#define ATTACKING_DURATION 120

// ------ Private variables ----------------------------------------
// The current state of the system
static eDinosaur_State Dinosaur_state_G;

// The time in the state
static tByte Time_in_state_G;

// Used by sEOS
static tByte Call_count_G = 0;

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

  DINOSAUR_Init()

  Prepare for the dinosaur activity.

-*------------------------------------------------------------------*/
void DINOSAUR_Init(void)
   {
   // Initial dinosaur state
   Dinosaur_state_G = SLEEPING;  
   }


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

  DINOSAUR_Update()

  Must be called once per second.

-*------------------------------------------------------------------*/
void DINOSAUR_Update(void)
   {
   switch (Dinosaur_state_G)
      {
      case SLEEPING: 
         {
		 // Call relevant function
		 DINOSAUR_Perform_Sleep_Movements();

         if (++Time_in_state_G == SLEEPING_DURATION)
            {
            Dinosaur_state_G = WAKING;
            Time_in_state_G = 0;
            }

         break;
         }

      case WAKING: 
         {
		 // Call relevant function
		 DINOSAUR_Perform_Waking_Movements();

         if (++Time_in_state_G == WAKING_DURATION)
            {
            Dinosaur_state_G = GROWLING;
            Time_in_state_G = 0;
            }

         break;
         }

      case GROWLING: 
         {
		 // Call relevant function
		 DINOSAUR_Growl();

         if (++Time_in_state_G == GROWLING_DURATION)
            {
            Dinosaur_state_G = ATTACKING;
            Time_in_state_G = 0;
            }

         break;
         }

      case ATTACKING: 
         {
		 // Call relevant function
		 DINOSAUR_Perform_Attack_Movements();

         if (++Time_in_state_G == ATTACKING_DURATION)
            {
            Dinosaur_state_G = SLEEPING;
            Time_in_state_G = 0;
            }

         break;
         }
      }
   }

/*------------------------------------------------------------------*/
void DINOSAUR_Perform_Sleep_Movements(void)
   {
   // Demo only...
   P1 = (tByte) Dinosaur_state_G;
   P2 = Time_in_state_G; 
   }

/*------------------------------------------------------------------*/
void DINOSAUR_Perform_Waking_Movements(void)
   {
   // Demo only...
   P1 = (tByte) Dinosaur_state_G;
   P2 = Time_in_state_G; 
   }

/*------------------------------------------------------------------*/
void DINOSAUR_Growl(void)
   {
   // Demo only...
   P1 = (tByte) Dinosaur_state_G;
   P2 = Time_in_state_G; 
   }

/*------------------------------------------------------------------*/
void DINOSAUR_Perform_Attack_Movements(void)
   {
   // Demo only...
   P1 = (tByte) Dinosaur_state_G;
   P2 = Time_in_state_G; 
   }

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

⌨️ 快捷键说明

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