?? dispdled.c
字號:
/*
1. Display content:
Song Index/Total counter, Long File Name,
Volumn, FM Channel, EQ Setting, PlayMode, U-Disk/SD, Play/Pause
2 Display Status(FSM)
Normal_Status:
Switch_Song_Status
Set_Volumn_Status
Set_FMCH_Status
Set_EQ_Status
Switch_USBSD_Status
Set_PlayPause_Status
Pick Songs/FMCH
開機(jī)畫面
*/
#include "utiltypedef.h"
#include "reg51.h"
#include "va4010reg.h"
#include "config.h"
#include "common.h"
#include "4010UI.h"
#include "halfm.h"
#include "hallcm.h"
#include "display.h"
#include "hali2c.h"
#include "halmp3dec.h"
#include "timer.h"
#include "halvol.h"
#include "halinfo.h"
#include "common.h"
#if (DIGITAL_SHOW == DIGITAL_SHOW_DLED )
#include "dispdled.h"
extern BYTE data bgDispGap;
static BYTE data DispStatus;
static BYTE data DispStatusChg;
BYTE bDigital[4] = {LED_NONE, LED_NONE, LED_NONE, LED_NONE};
static BYTE data bDigIdx =0;
BOOL data pauseplayflag = TRUE;/*amend 20071226 by majia*/
BOOL data flashflag = TRUE;
extern BYTE data flashtick;
static BYTE DledDigMap[] = {
LED_0, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9
}; //, DOT_LED, 1_EXT_LED};
/*
| | | | | | | |
| | | | | | | |
||||||||||
||||||||||
*
*/
static void _DispHex2Dec(WORD wVal)
{
BYTE data bRed;//, byStartX, byStartY;
WORD data wDiv;
WORD data wVa;
wDiv = wVal; //~DIGITAL_SHOW_MASK
bDigIdx = 0;
memclr(bDigital, sizeof(bDigital));
wVa = 1000;
do{
bRed = wDiv/wVa;
wDiv = wDiv%wVa;
wVa /= 10;
if((bDigIdx == 0) && (bRed == 0) && (wVa > 0)){
continue;
}
bDigital[bDigIdx] = DledDigMap[bRed]; //Map the Decimal into DLED show
bDigIdx++;
}while(wVa > 0);
if((mp3status==MP3STATUS_PAUSE)&&(pauseplayflag))/*amend 20071226 by majia*/
bDigital[bDigIdx-1] = LED_NONE;
// if(bDotFlag == TRUE) ADD_DOT(bDigital[2]);
return;
}
static void _halDispGapChk()
{
BYTE bGap = DISP_VOLUMN_GAP;
//if(DispStatus == DISP_NORMAL_STATUS){
// bGap = 8;
//}
/*
if((bgDispGap>bGap)&&(DispStatus!=DISP_NORMAL_STATUS)){
//if(bgDispGap > bGap){
if(irjumptype == IRJUMP_TYPE_PICKSONG){
halIRPickSong();
}else if(irjumptype == IRJUMP_TYPE_CHSET){
halIRChSet();
}else{
DispSetStatus(DISP_NORMAL_STATUS);
}
halIRClrJump();
bgDispGap = 0;
}
*//*amend 20071226 by majia*/
if(bgDispGap>bGap){
if(DispStatus!=DISP_NORMAL_STATUS){
UartOutText("-I-:_halDispGapChk--3ms!NORMAL\r\n");
if(irjumptype == IRJUMP_TYPE_PICKSONG){
halIRPickSong();
}else if(irjumptype == IRJUMP_TYPE_CHSET){
halIRChSet();
}else{
pauseplayflag = FALSE;
DispSetStatus(DISP_NORMAL_STATUS);
}
halIRClrJump();
bgDispGap = 0;
}
if((mp3status==MP3STATUS_PAUSE))
{
UartOutText("-I-:_halDispGapChk--PauseStatus\r\n");
bgDispGap = 0;
DispSetStatus(DISP_NORMAL_STATUS);
pauseplayflag = FALSE;
}
}
return;
}
static void _halDispIdx(void)
{
//UartOutText("-I-:_halDispIdx\r\n");
_DispHex2Dec(10*(Mp3SReq.swIdx));//NOTE: SWORD -> WORD??
return;
}
static void _halDispVol()
{
//UartOutText("-I-:_halDispVol\r\n");
_DispHex2Dec(10*halVolGet());
#if 0
{
BYTE i;
for(i=0; i<bDigIdx; i++){
UartOutText("-I-: bDigital[i] 0x\r\n");UartOutValue(bDigital[i], 2 );
}
}
#endif
return;
}
static void _halDispFM()
{
//UartOutText("-I-:_halDispFM\r\n");
_DispHex2Dec(halFMGetFreq());
return;
}
static void _halDispJump()
{
//UartOutText("-I-:_halDispJump\r\n");
#if (IRCTRL_MODE == IRCTRL_MODE_DIGCTRL)
_DispHex2Dec(halIRGetJump());
//NO dot is needed here.
#endif
return;
}
static void _halDispSimp()
{
UartOutText("-I-:_halDispSimp\r\n");
if(DispStatus == DISP_EQ_STATUS){
bDigital[0] = LED_E;
bDigital[1] = DledDigMap[halEQGet()];
bDigIdx = 3;
}else{
bDigital[0] = LED_E;
bDigital[1] = LED_R;
bDigIdx = 3;
}
return;
}
static void _halDispCtrlDig()
{
// BYTE i;
#if (IRCTRL_MODE == IRCTRL_MODE_CTRLDIG)
WORD wTmp = halIRGetJump();
//here we set
//UartOutText("-I-:_halDispCtrlDig\r\n");
if(wTmp > 0){
if(irjumptype == IRJUMP_TYPE_CHSET)
_DispHex2Dec(wTmp);
else
_DispHex2Dec(10*wTmp);
}else{//wTmp == 0
bDigIdx = 0;
//UartOutText("----------ctrldig----------\r\n");
//UartOutText("-I-bDigIdx\t");UartOutValue(bDigIdx, 2);
}
#endif
return;
}
static void _halDispNoDev()
{
//UartOutText("-I-:_halDispNoDev\r\n");
_halDispFM();
//_halDispIdx();
return;
}
static void _halDispPause()
{
//UartOutText("-I-:_halDispPause\r\n");
//_halDispFM();
/*amend 20071226 by majia*///<
if(pauseplayflag)
{
_halDispIdx();
}
else
_halDispFM();
//<
return;
}
static void _halDispNormal()
{
//UartOutText("-I-:_halDispNormal\r\n");
if(FSMState != FSMSTATE_INIT){ //No device
_halDispNoDev();//Show some thing song idx/fm freq.
return;
}
if((mp3status==MP3STATUS_PAUSE)&&(pauseplayflag)){ //Pause
_halDispPause();
//_halDispIdx();
return;
}
if(mp3status==MP3STATUS_PLAY)
pauseplayflag =TRUE;
//Normal Play //Display fm ch
_halDispFM();
bgDispGap = 0;
return;
}
//The functions in this table should not have parameters and return value for 8051 Platform.
static void (*DispHdMap[DISP_MAX_STATUS])(void) = {
_halDispNormal, //Including NODEV, PAUSE, PLAY
_halDispIdx,
_halDispVol,
_halDispFM,
_halDispSimp, //EQ
_halDispJump,
_halDispSimp, //ERROR
_halDispCtrlDig,
};
//Check if the display status is changed.
BYTE _DispFMSCase(void)
{
BYTE data bRet=FALSE;
_halDispGapChk();
if(DispStatusChg == TRUE){
DispStatusChg = FALSE;
bRet=TRUE;
}
return bRet; //TRUE: Display, FALSE: No Display
}
/////////////////////API for DLED Display Module////////////////////////
void DispFSM(void)
{
BYTE data bRet;
WDT = 0X1F;
bRet = _DispFMSCase();//??????????????
if(!bRet) //No display needed.
return;
//bDotFlag = FALSE;
//gbFlashFlag = FALSE;
DispHdMap[DispStatus]();
WDT = 0X1F;
return;
}
//extern BYTE EQString[EQ_VALUE_MAX+1][6];
void DispInit(void) //This function should be done before any display operation
{
//Init global variable
DispStatus = DISP_NORMAL_STATUS;
bgDispGap = 0;
flashtick =0;
DispStatusChg = FALSE;
flashflag = TRUE;
DispSetStatus(DispStatus);
return;
}
void DispSetStatus(BYTE bStatus)
{
DispStatus = bStatus;
DispStatusChg = TRUE;
bgDispGap = 0;
return;
}
void DispReset(void)
{
//DispStatus = DISP_IDLE_STATUS;
//DispStatusChg = FALSE;
return;
}
static void halModLED(BYTE Status){
//add DOT flag for display Freq.
if((Status == DISP_NORMAL_STATUS)||(Status == DISP_FMCH_STATUS))
ADD_DOT(bDigital[bDigIdx-2]);
else{//for WITLINK_070,show DIG 1,DIG 2,DIG 3 except for display Freq.
if(Status == DISP_VOLUMN_STATUS)
if(halVolGet() == 0){//when Vol==0
bDigIdx = 2;
bDigital[0] = LED_0;
}
if(!((Status == DISP_CTRLDIG_STATUS)&&(irjumptype == IRJUMP_TYPE_CHSET)))
bDigital[bDigIdx-1] = LED_NONE;
}
return;
}
void halDLEDISR(void)
{
static BYTE data SegIdx = 0;
DLED_SEG_OFF();
halModLED(DispStatus);
if(bDigIdx == 0){
return;
}
DLED_DATA(bDigital[SegIdx]);
DLED_SEG_SEL(4-bDigIdx+SegIdx);
//DelayMs(1);
SegIdx++;
if(SegIdx >= bDigIdx){
SegIdx = 0;
}
return;
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -