📄 disp_task.c
字号:
/*C**************************************************************************
* NAME: disp_task.c
*----------------------------------------------------------------------------
* Copyright (c) 2002 Atmel.
*----------------------------------------------------------------------------
* RELEASE: snd1c-refd-nf-3_0_0
* REVISION: 1.4.2.11
*----------------------------------------------------------------------------
* PURPOSE:
* This file contains the display task and attached routines
*
* NOTES:
* Global Variables:
* - gl_cpt_tick: global tick counter in data space
*****************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "config.h" /* system configuration */
#include FILE_BOARD_H /* board definition */
#include "modules\file\file.h" /* file definition */
#include "modules\display\disp.h" /* display definition */
#include "disp_task.h" /* display task definition */
#include "modules\display\led.h" /* led definition */
/*_____ M A C R O S ________________________________________________________*/
#define REF_STATE_SONG 0
#define REF_STATE_VOICE 1
#define REF_STATE_USB 2
#define REF_STATE_FORMAT 3
/*_____ D E F I N I T I O N ________________________________________________*/
extern data Byte gl_cpt_tick; /* general tick counter */
static bdata bit disp_scroll_on; /* set to TRUE to scroll name */
static bdata bit disp_clock_on; /* set to TRUE to start clock */
static data Byte disp_sec_cpt; /* second counter */
static data Byte disp_min_cpt; /* minute counter */
static data char pdata * disp_buffer;
static data Byte disp_state; /* task state */
extern xdata Byte func_state;
extern xdata Byte func_timeout; // Time out special function
extern xdata Byte ref_state;
extern bit playing;
extern bit pause;
extern bit recording;
extern bit connected;
extern xdata Byte LED_ON;
extern xdata Byte LED_FAST;
/*_____ D E C L A R A T I O N ______________________________________________*/
/*F**************************************************************************
* NAME: disp_task_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Display task initialization
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_task_init (void)
{
disp_scroll_on = FALSE;
disp_clock_on = FALSE;
disp_state = DISP_IDLE;
print_init();
}
/*F**************************************************************************
* NAME: disp_task
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Display task handling display of clock and scrolling of file name
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_task (void)
{
led_task();
switch (disp_state)
{
case DISP_IDLE:
{
break;
}
case DISP_INIT:
{
disp_state = DISP_TICK0;
gl_cpt_tick = 0;
disp_buffer = File_get_name();
if (print_name(disp_buffer) != TRUE) /* test if not short name */
{
disp_scroll_on = TRUE; /* activate name scrolling */
}
else
{
disp_scroll_on = FALSE; /* no scrolling */
}
break;
}
case DISP_TICK0:
{
if (gl_cpt_tick > DISP_TICK_500) /* 1/2 sec expiration */
{
gl_cpt_tick -= DISP_TICK_500;
if (disp_scroll_on)
{
if (print_name(disp_buffer))
{
disp_buffer = File_get_name();
}
else
{
disp_buffer++;
}
}
disp_state = DISP_TICK1;
}
break;
}
case DISP_TICK1:
{
if (gl_cpt_tick > DISP_TICK_500) /* 1/2 sec expiration */
{
gl_cpt_tick -= DISP_TICK_500;
if (disp_scroll_on)
{
if (print_name(disp_buffer))
{
disp_buffer = File_get_name();
}
else
{
disp_buffer++;
}
}
if (disp_clock_on)
{
disp_state = DISP_SEC;
}
else
{
disp_state = DISP_TICK0;
}
}
break;
}
case DISP_SEC:
{
if (disp_sec_cpt == DISP_SEC_MIN) /* 1 min expiration */
{
disp_sec_cpt = 0;
print_sec(disp_sec_cpt);
disp_state = DISP_MIN;
}
else
{
disp_sec_cpt++;
print_sec(disp_sec_cpt);
disp_state = DISP_TICK0;
}
break;
}
case DISP_MIN:
{
disp_min_cpt++;
print_min(disp_min_cpt);
disp_state = DISP_TICK0;
break;
}
}
}
/*F**************************************************************************
* NAME: disp_name_start
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Start name display
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_name_start (void)
{
disp_state = DISP_INIT;
}
/*F**************************************************************************
* NAME: disp_name_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Suspend name display
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_end_of_play (void)
{
LED_ON = (8>>ref_state);
LED_FAST = 3;
if (recording)
{
SHUT_MIC = 1;
pause=FALSE;
recording=FALSE;
}
else if (playing && ref_state==REF_STATE_VOICE)
{
func_state=0;
recording=TRUE;
LED_FAST=2;
}
else func_state=0;
playing=FALSE;
disp_state = DISP_IDLE;
}
/*F**************************************************************************
* NAME: disp_name_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Suspend name display
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_name_stop (void)
{
disp_state = DISP_IDLE;
}
/*F**************************************************************************
* NAME: disp_clock_reset
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Reset chrono to 0:00
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_clock_reset (void)
{
LED_VOL = 0;
LED_BASS = 0;
LED_MED = 0;
LED_TREEB = 0;
disp_clock_on = FALSE;
disp_sec_cpt = 0;
disp_min_cpt = 0;
print_time(0, 0); /* display 0:00 */
// disp_state = DISP_INIT; /* reset task */
}
/*F**************************************************************************
* NAME: disp_clock_start
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Start or re-start clock display
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_clock_start (void)
{
disp_clock_on = TRUE;
}
/*F**************************************************************************
* NAME: disp_clock_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Suspend clock display
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void disp_clock_stop (void)
{
disp_clock_on = FALSE;
}
/*F**************************************************************************
* NAME: disp_get_min
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
* minutes
*----------------------------------------------------------------------------
* PURPOSE:
* Return minutes of current time
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte disp_get_min (void)
{
return disp_min_cpt;
}
/*F**************************************************************************
* NAME: disp_get_sec
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
* seconds
*----------------------------------------------------------------------------
* PURPOSE:
* Return seconds of current time
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte disp_get_sec (void)
{
return disp_sec_cpt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -