145 lines
3.2 KiB
C
145 lines
3.2 KiB
C
/*
|
||
******************************************************************************
|
||
*
|
||
* @file led.c
|
||
* @brief led module
|
||
* @ic TP3102
|
||
*
|
||
* @version 1.0
|
||
* @date 2022/08/04 15:00:40
|
||
* @author Alex Xu
|
||
*
|
||
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
|
||
* All Rights Reserved
|
||
*
|
||
* History:
|
||
* Revision Date Author Desc
|
||
* 1.0.0 2022/08/04 Alex build this file
|
||
******************************************************************************/
|
||
/*_____ I N C L U D E S ____________________________________________________*/
|
||
|
||
#include "led.h"
|
||
|
||
|
||
#ifdef LED_DISPLAY
|
||
|
||
/******************************************************************************\
|
||
Macro definitions
|
||
\******************************************************************************/
|
||
|
||
/******************************************************************************\
|
||
Variables definitions
|
||
\******************************************************************************/
|
||
static idata TS_LED_INFO LED;
|
||
|
||
/******************************************************************************\
|
||
Functions definitions
|
||
\******************************************************************************/
|
||
|
||
/*
|
||
* 函数名称 : LED_Init
|
||
* 功能描述 : LED初始化
|
||
* 参 数 : NONE
|
||
* 返回值 : NONE
|
||
*/
|
||
/******************************************************************************/
|
||
void LED_Init(void)
|
||
/******************************************************************************/
|
||
{
|
||
SFRADDR = P0_OE;
|
||
SFRDATA |= 0x08;
|
||
|
||
SFRADDR = P0_DRV;
|
||
SFRDATA = 0x0C;
|
||
|
||
pin_LED_1 = 0;
|
||
}
|
||
|
||
/*
|
||
* 函数名称 : LED_Set
|
||
* 功能描述 : LED工作方式设置
|
||
* 参 数 : State:工作方式 / Period:闪烁周期(频率,单位ms) / Times:闪烁次数
|
||
* 返回值 : NONE
|
||
*/
|
||
/******************************************************************************/
|
||
void LED_Set(uint8_t State,uint8_t Period,uint8_t Times)
|
||
/******************************************************************************/
|
||
{
|
||
LED.State = State;
|
||
LED.Flash_Duty = Period / 2;
|
||
LED.Flash_Period = Period;
|
||
LED.Flash_Times = Times;
|
||
LED.Timer = 0;
|
||
}
|
||
|
||
/*
|
||
* 函数名称 : LED_Service
|
||
* 功能描述 : LED驱动,需放在100ms时间片中
|
||
* 参 数 : NONE
|
||
* 返回值 : NONE
|
||
*/
|
||
/******************************************************************************/
|
||
void LED_Drv(void)
|
||
/******************************************************************************/
|
||
{
|
||
switch(LED.State)
|
||
{
|
||
case LED_ON:
|
||
LEDR_ON();
|
||
break;
|
||
|
||
case LED_OFF:
|
||
LEDR_OFF();
|
||
break;
|
||
|
||
case LED_FLASH:
|
||
if( LED.Timer < LED.Flash_Duty )
|
||
{
|
||
LEDR_ON();
|
||
}
|
||
else
|
||
{
|
||
LEDR_OFF();
|
||
}
|
||
|
||
if( LED.Timer >= LED.Flash_Period )//LED.Timer[i]表示累加的时间
|
||
{
|
||
LED.Timer = 0;
|
||
if( LED.Flash_Times > 0 )
|
||
{
|
||
LED.Flash_Times--;
|
||
}
|
||
if( LED.Flash_Times == 0 )
|
||
{
|
||
LED.State = LED_OFF;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case LED_KEEP_FLASHING:
|
||
if( LED.Timer <= LED.Flash_Duty )
|
||
{
|
||
LEDR_ON();
|
||
}
|
||
else
|
||
{
|
||
LEDR_OFF();
|
||
}
|
||
if( LED.Timer >= LED.Flash_Period )
|
||
{
|
||
LED.Timer = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
LEDR_OFF();
|
||
break;
|
||
}
|
||
|
||
LED.Timer += LED_PLUS_TIME;
|
||
}
|
||
|
||
#endif
|
||
|
||
|