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

📄 dispdled.c

📁 威望公司MP3 + USB MCU 的参考软件
💻 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

开机画面
*/
#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

⌨️ 快捷键说明

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