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

📄 led.c

📁 TQ公司的STK16x开发系统的源码
💻 C
字号:
/* File: LED.C */

/****************************************************************************
* 
* STK16XSW.LED
* ============
*
* Low level routines for LED control
*
* TQ-Systems GmbH                                                         
* ---------------                                                         
* Customer: TQ-Components
* Project : TQMX16xU
* Tools   : uVision 2.37
*
* Rev: Date:     Name:            Modification:
* ----+---------+----------------+------------------------------------------
* 100  16.01.01  A. Lichte        taken over from STK16X.506 
* 200  26.05.03  Volker Jung      changes for XC16X Controller
* 251  29.07.03  Volker Jung	  Anpassung an TQ_Select                 
*****************************************************************************/

/****************************************************************************
*
*                           availability summary
*
* available for Starterkit: STK16XU 
* available for Modul     : TQMX16XU

* conformed for Modul     : TQMX16XU
*                           
*****************************************************************************/


/*==========================================================================*
* pragmas:
*===========================================================================*/

/*==========================================================================*
* include files (#INCLUDE):
*===========================================================================*/

/*--------------------------------------------------------------------------*
* standard include files: 
*---------------------------------------------------------------------------*/
#include <xc161.h>            /* special function register               */

/*--------------------------------------------------------------------------*
* project specific include files:
*---------------------------------------------------------------------------*/
#include "led.h"                /* LED functions                           */
#include "timer0.h"              /* timer functions                         */

/*==========================================================================*
* module internal definitions (#DEFINE):
*===========================================================================*/
#define LED_DIR_OUT    1 
/*==========================================================================*
* module internal type declarations (TYPEDEF):
*===========================================================================*/

/*==========================================================================*
* module internal constants (CONST):
*===========================================================================*/

/*==========================================================================*
* extern available constants (CONST):
*===========================================================================*/

/*==========================================================================*
* modul internal variables:
*===========================================================================*/

/*--------------------------------------------------------------------------*
* LED control lines:
*---------------------------------------------------------------------------*/
sbit led_8     = LED_8;
sbit led_8_dir = LED_8_DIR;
sbit led_9     = LED_9;
sbit led_9_dir = LED_9_DIR;
sbit led_10    = LED_10;
sbit led_10_dir= LED_10_DIR;
sbit led_11    = LED_11;
sbit led_11_dir= LED_11_DIR;
sbit led_12    = LED_12;
sbit led_12_dir= LED_12_DIR;
sbit led_13    = LED_13;
sbit led_13_dir= LED_13_DIR;
sbit led_14    = LED_14;
sbit led_14_dir= LED_14_DIR;
sbit led_15    = LED_15;
sbit led_15_dir= LED_15_DIR;

/*--------------------------------------------------------------------------*
* current LED state:
*---------------------------------------------------------------------------*/
BYTE led_state[LED_MAX - LED_MIN + 1];

/*--------------------------------------------------------------------------*
* variables for blink controlling:
*---------------------------------------------------------------------------*/
TIMER_COUNTER led_blink_time;      /* time base for blink frequency        */
TIMER_COUNTER led_last_blink;      /* timer counter for LED blinking       */
BYTE          led_blink_state;     /* current blink state (LED_OFF/LED_ON) */

/*==========================================================================*
* globale external available variables (EXTERN):
*===========================================================================*/

/*==========================================================================*
* modul internal functions:
*===========================================================================*/

/*--------------------------------------------------------------------------*
* void led_out()
*---------------------------------------------------------------------------*
* FT: low level LED output routine (LED_OFF/LED_ON/LED_BLINK)
* EP: -
* RV: -
* GP: LED_OFF, LED_ON, LED_BLINK, led_state
*---------------------------------------------------------------------------*/ 
void led_out()
{   
  /* port output: */
  switch (led_state[8])
  {
    case LED_OFF  : led_8 = !(LED_8_ON); break;
    case LED_ON   : led_8 = LED_8_ON; break;
    case LED_BLINK: led_8 = led_blink_state; break;
  }
  switch (led_state[9])
  {
    case LED_OFF  : led_9 = !(LED_9_ON); break;
    case LED_ON   : led_9 = LED_9_ON; break;
    case LED_BLINK: led_9 = led_blink_state; break;
  }
  switch (led_state[10])
  {
    case LED_OFF  : led_10 = !(LED_10_ON); break;
    case LED_ON   : led_10 = LED_10_ON; break;
    case LED_BLINK: led_10 = led_blink_state; break;
  }
  switch (led_state[11])
  {
    case LED_OFF  : led_11 = !(LED_11_ON); break;
    case LED_ON   : led_11 = LED_11_ON; break;
    case LED_BLINK: led_11 = led_blink_state; break;
  }
  switch (led_state[12])
  {
    case LED_OFF  : led_12 = !(LED_12_ON); break;
    case LED_ON   : led_12 = LED_12_ON; break;
    case LED_BLINK: led_12 = led_blink_state; break;
  }
  switch (led_state[13])
  {
    case LED_OFF  : led_13 = !(LED_13_ON); break;
    case LED_ON   : led_13 = LED_13_ON; break;
    case LED_BLINK: led_13 = led_blink_state; break;
  }
  switch (led_state[14])
  {
    case LED_OFF  : led_14 = !(LED_14_ON); break;
    case LED_ON   : led_14 = LED_14_ON; break;
    case LED_BLINK: led_14 = led_blink_state; break;
  }
  switch (led_state[15])
  {
    case LED_OFF  : led_15 = !(LED_15_ON); break;
    case LED_ON   : led_15 = LED_15_ON; break;
    case LED_BLINK: led_15 = led_blink_state; break;
  }
}

/*==========================================================================*
* extern available functions:
*===========================================================================*/

/*--------------------------------------------------------------------------*
* void led_init()
*---------------------------------------------------------------------------*
* FT: init LED control and data ports
* EP: -
* RV: -
* GP: LED_DIR_OUT, LED_0_ON, LED_1_ON, LED_2_ON, LED_3_ON, LED_4_ON,
*     LED_5_ON, LED_6_ON, LED_7_ON
*---------------------------------------------------------------------------*/ 
void led_init()
{
  /* init LED control lines: */

  led_8      = !LED_8_ON;
  led_8_dir  =  LED_DIR_OUT;

  led_9      = !LED_9_ON;
  led_9_dir  =  LED_DIR_OUT;

  led_10     = !LED_10_ON;
  led_10_dir =  LED_DIR_OUT;

  led_11     = !LED_11_ON;
  led_11_dir =  LED_DIR_OUT;

  led_12     = !LED_12_ON;
  led_12_dir =  LED_DIR_OUT;

  led_13     = !LED_13_ON;
  led_13_dir =  LED_DIR_OUT;

  led_14     = !LED_14_ON;
  led_14_dir =  LED_DIR_OUT;

  led_15     = !LED_15_ON;
  led_15_dir =  LED_DIR_OUT;

  /* init default LED blink frequency: */
  led_blink_time = LED_BLINK_DFLT;

  /* clear all LEDs: */
  led_clrall();
}

/*--------------------------------------------------------------------------*
* void led_clrall();
*---------------------------------------------------------------------------*
* FT: clear all LEDs
* EP: -
* RW: -
* GP: LED_MIN, LED_MAX, LED_OFF
*---------------------------------------------------------------------------*/ 
void led_clrall()
{ BYTE i;
  
  /* reset all LEDs: */
  for (i=LED_MIN; i<=LED_MAX; i++)
  {
    led_state[i] = LED_OFF;
  }
  led_out();                                   /* call LED output routine */

  /* reset blink time base and blink state: */
  led_last_blink = timer_get_10ms(TIMER_MIN);
  led_blink_state = LED_OFF;
}

/*--------------------------------------------------------------------------*
* void led_idle()
*---------------------------------------------------------------------------*
* FT: idle function for LED handling (blinking etc.)
* EP: -
* RV: -
* GP: -
*---------------------------------------------------------------------------*/ 
void led_idle()
{
  if (timer_get_10ms(led_last_blink) > led_blink_time)
  {
    led_last_blink = timer_get_10ms(TIMER_MIN);
    if (led_blink_state == LED_ON)
    {
      led_blink_state = LED_OFF;
    }
	else 
	{
      led_blink_state = LED_ON;
    }

    led_out();
  }
}

/*--------------------------------------------------------------------------*
* BOOL led_set(BYTE led_num, BYTE state);
*---------------------------------------------------------------------------*
* FT: LED controlling
* EP: led_num = number of LED to be set
*     state   = led state (LED_OFF/LED_ON/LED_BLINK)
* RV: TRUE = function successfully; FALSE = unvalid LED number
* GP: LED_MIN, LED_MAX, led_state
*---------------------------------------------------------------------------*/ 
BOOL led_set(BYTE led_num, BYTE state)
{
  /* check LED number: */
  if ((led_num < LED_MIN) || (led_num > LED_MAX)) return (FALSE);

  led_state[led_num] = state;                           /* save LED state */

  led_out();                                   /* call LED output routine */

  return (TRUE);
}

/*--------------------------------------------------------------------------*
* BYTE led_get(BYTE led_num);
*---------------------------------------------------------------------------*
* FT: get current LED state
* EP: led_num = number of LED to be detected
* RV: LED state (LED_UNDEF if invalid LED number)
* GP: LED_MIN, LED_MAX, LED_UNDEF, led_state
*---------------------------------------------------------------------------*/ 
BYTE led_get(BYTE led_num)
{
  /* check LED number: */
  if ((led_num < LED_MIN) || (led_num > LED_MAX)) return (LED_UNDEF);
  
  return (led_state[led_num]);
}

⌨️ 快捷键说明

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