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

📄 cd.c

📁 ST72321 control tuner(FST) and CD servo (STA1052).
💻 C
📖 第 1 页 / 共 3 页
字号:

#include "public.h"

void CDInit(void)
{
	/*Pin_CD_POWER=;
	PD_CD_POWER=;
	PO_CD_POWER=;*/
        
	PD_CD_RESET=1;
	PO_CD_RESET=1;
	Pin_CD_RESET=0;

	PD_CD_ON=1;
	PO_CD_ON=1;
	Pin_CD_ON=0;
	
	PD_CD_CRQ=0;
	PO_CD_CRQ=0;

}

void CDMain(void)
{
	CDSendAndRead();
	CDDecodeData();
	CDPowerMode();
	CDWorkMode();
	CDKey();
	CDDisplay();
}

void CDKey(void)
{
	switch(KeyCode)
	{
		case S_AD_EJECT:
			if(CD.PowerMode==CD_POWER_NORMAL)
			{
				if(CD.LoaderMode==CD_LODER_EJECTING|| CD.LoaderMode==CD_LODER_EJECT_POS)
					CDSendCommand(CD_CMD_LOADDISC);
				else
					CDSendCommand(CD_CMD_EJECTDISC);
			}
			else
			{
				CDWork(POWERON_LOAD_EJECT);
				CD.WorkMode=CD_WORKMODE_POWER_ON_REQ;
			}
			break;
	}
	
	if(System.FWorkMode.Current!=WORKMODE_DISC&&System.FWorkMode.Current!=WORKMODE_USB&&System.FWorkMode.Current!=WORKMODE_SD)return;
	if(F_MuteKey)return;

	switch(KeyCode)
	{
		case S_AD_M1:
			if(CD.PlayMode!=CD_PLAY_PLAY)
				CDSendCommand(CD_CMD_PLAY);
			else
				CDSendCommand(CD_CMD_PAUSE);
			break;
		case S_AD_M2:
			if(CD.SubPlayMode==CD_SUBPLAY_INT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_INT_ON);
			}
			break;
		case S_AD_M3:
			if(CD.SubPlayMode==CD_SUBPLAY_RPT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_RPT_ON);
			}
			break;
		case L_AD_M3:
			CDSendCommand(CD_CMD_WRAP);
			break;
		case S_AD_M4:
			if(CD.SubPlayMode==CD_SUBPLAY_SHF)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_SHF_ON);
			}
			break;
		case S_AD_SEEKUP:
			CDSendCommand(CD_CMD_NEXT_FILE);
			break;
		case S_AD_SEEKDN:
			CDSendCommand(CD_CMD_PREVIOUS_FILE);
			break;
		case L_AD_SEEKUP:
			CDSendCommand(CD_CMD_FAST_FF);
			break;
		case L_AD_SEEKDN:
			CDSendCommand(CD_CMD_FAST_FB);
			break;
		case R_AD_SEEKUP:
		case R_AD_SEEKDN:
			CDSendCommand(CD_CMD_PLAY);
			break;

		case S_AD_DISP:
			if(System.DispMode.Current==DISPMODE_CD)
			{
				CD.DispMode=MaxMinChangeProtect(CD.DispMode, 1, CD_DISP_DISCTITLE, CD_DISP_NORMAL, 0);	
				if(CD.DispMode!=CD_DISP_NORMAL)CD.Anibegin=1;
				CD.F_DispReq=1;
			}	
			break;
			
		/*case S_AD_M5:
			CDSendCommand(CD_CMD_CHECK_MEMORY);
			break;
		case S_AD_M6:
			CDSendCommand(CD_CMD_REQ_MECHPARA);
			break;*///This's for test
			
	}
	
}

void CDDisplay(void)
{
	if(System.DispMode.Next==DISPMODE_CD)
	{
		CD.F_DispReq=1;
	}
	
	if(System.DispMode.Last==DISPMODE_CD)
	{
		DisplayClear(CLEARNUM9);
		F_DISP_ST=0;
		F_DISP_MP3=0;
		F_DISP_CD=0;
		F_DISP_CD1=0;
		F_DISP_CD2=0;
		F_DISP_CD3=0;
	}
	
	if(System.DispMode.Current!=DISPMODE_CD)return;

	if(F_HalfSecondOut)
	{
		if(System.FWorkMode.Current==WORKMODE_DISC)
			if(CD_DISCTYPE_MP3)F_DISP_MP3=1;
		else if(System.FWorkMode.Current==WORKMODE_USB||System.FWorkMode.Current==WORKMODE_SD)
			if(CD_DEVICETYPE_MP3)F_DISP_MP3=1;
		else F_DISP_MP3=0;
		
		//if(CD.CurrentSource==1)
		//{
			F_DISP_CD=1;
			if(CD.PlayMode==CD_PLAY_PLAY)
			{
				if(!F_DISP_CD3)
				{
					F_DISP_CD1=0;
					F_DISP_CD2=1;
					F_DISP_CD3=1;
				}
				else if(!F_DISP_CD2)
				{
					F_DISP_CD1=1;
					F_DISP_CD2=1;
					F_DISP_CD3=0;
				}
				else if(!F_DISP_CD1)
				{
					F_DISP_CD1=1;
					F_DISP_CD2=0;
					F_DISP_CD3=1;
				}
				else
				{
					F_DISP_CD1=0;
					F_DISP_CD2=1;
					F_DISP_CD3=1;
				}
			}
			else
			{
				F_DISP_CD1=1;
				F_DISP_CD2=1;
				F_DISP_CD3=1;
			}
		//}
		/*if((CD.CurrentSource==2)||(CD.CurrentSource==3))
		{
			F_DISP_CD=0;
			F_DISP_CD1=0;
			F_DISP_CD2=0;
			F_DISP_CD3=0;
		}*/
	}
	
	if(!CD.F_DispReq)return;
	CD.F_DispReq=0;
	F_DISP_P=0;
	
	switch(CD.DispMode)
	{
		case CD_DISP_IDLE:
			
			break;
		case CD_DISP_READING:
			CopyString(DispNum," WAIT    ");
			DispNum[5]=45;
			DispNum[6]=45;
			DispNum[7]=45;
			break;
		case CD_DISP_NODISC:
			CopyString(DispNum,"  NO CD  ");
			break;
		case CD_DISP_NOUSB:
			CopyString(DispNum," NO USB  ");
			break;
		case CD_DISP_NOSD:
			CopyString(DispNum,"  NO SD  ");
			break;
		case CD_DISP_DISC_READ:
			CopyString(DispNum," READ CD  ");
			break;
		case CD_DISP_USB_READ:
			CopyString(DispNum,"READ USB ");
			break;
		case CD_DISP_SD_READ:
			CopyString(DispNum," READ SD ");
			break;
		case CD_DISP_DISC_ERROR:
			CopyString(DispNum," CD ERR ");
			break;
		case CD_DISP_USB_ERROR:
			CopyString(DispNum," USB ERR ");
			break;
		case CD_DISP_SD_ERROR:
			CopyString(DispNum," SD ERR  ");
			break;
		case CD_DISP_COMMUNICATION_ERROR:
			CopyString(DispNum," COM ERR ");
			break;
			
		case CD_DISP_NORMAL:
			Animation(ANIMATION_STOP);
			if(CD.PlayMode==CD_PLAY_PAUSE)
			{
				CopyString(DispNum,"  PAUSE  ");
				break;
			}
			/*switch(CD.CurrentSource)
			{
				case CD_DEVICETYPE_DISC:
					DispNum[8]='C';
					break;
				case CD_DEVICETYPE_USB:
					DispNum[8]='U';
					break;
				case CD_DEVICETYPE_SD:
					DispNum[8]='5';
					break;
			}*/

			switch(System.FWorkMode.Current)
			{
				case WORKMODE_DISC:
					DispNum[8]='C';
					break;
				case WORKMODE_USB:
					DispNum[8]='U';
					break;
				case WORKMODE_SD:
					DispNum[8]='5';
					break;
			}
			switch(CD.SubPlayMode)
			{
				case CD_SUBPLAY_NORMAL:
					DispNum[0]='T';
					break;
				case CD_SUBPLAY_INT:
					DispNum[0]='I';
					break;
				case CD_SUBPLAY_SHF:
					DispNum[0]='S';
					break;
				case CD_SUBPLAY_RPT:
					DispNum[0]='R';
					break;
			}
			DispNum[1]=ReturnDispNum(CD.AbsFileNum,10);
			DispNum[2]=ReturnDispNum(CD.AbsFileNum,1);
			DispNum[3]=' ';
			DispNum[4]=ReturnDispNum(CD.PlayMin,10);
			DispNum[5]=ReturnDispNum(CD.PlayMin,1);
			DispNum[6]=ReturnDispNum((unsigned int)CD.PlaySec,10);
			DispNum[7]=ReturnDispNum((unsigned int)CD.PlaySec,1);
			F_DISP_P=1;
			break;
		case CD_DISP_FILENAME:
		case CD_DISP_ALBUMTITLE:
		case CD_DISP_TITLE:
		case CD_DISP_ARTIST:
		case CD_DISP_GENRE:
		case CD_DISP_YEAR:
		case CD_DISP_COMMENT:
		case CD_DISP_DISCARTIST:
		case CD_DISP_DISCTITLE:
			DispNum[8]=' ';
			if(CD.PlayMode==CD_PLAY_PAUSE)
			{
				Animation(ANIMATION_STOP);
				CopyString(DispNum,"  PAUSE  ");
				CD.Anibegin=1;
			}
			else
			{	
				if(CD.Anibegin)
				{
					CD.Anibegin=0;
					if(CD.DispMode==CD_DISP_FILENAME)
					{
						if(CD.CurrentFileName[0])
						{
							CopyString(AniBuff,"File name-");
							CopyString2(AniBuff+10, CD.CurrentFileName);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Fl name--none",20);
					}
					if(CD.DispMode==CD_DISP_ALBUMTITLE)
					{
						if(CD.AlbumTitle[0])
						{
							CopyString(AniBuff," Album--");
							CopyString2(AniBuff+8, CD.AlbumTitle);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Album--none",20);
					}
					else if(CD.DispMode==CD_DISP_TITLE)
					{
						if(CD.TrackTitle[0])
						{
							CopyString(AniBuff," Title--");
							CopyString2(AniBuff+8, CD.TrackTitle);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Title--none",20);
					}
					else if(CD.DispMode==CD_DISP_ARTIST)
					{
						if(CD.TrackArtist[0])
						{
							CopyString(AniBuff,"Artist--");
							CopyString2(AniBuff+8, CD.TrackArtist);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Artist--none",20);
					}
					else if(CD.DispMode==CD_DISP_GENRE)
					{
						if(CD.Genre[0])
						{
							CopyString(AniBuff," Genre--");
							CopyString2(AniBuff+8, CD.Genre);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Genre--none",20);
					}
					else if(CD.DispMode==CD_DISP_YEAR)
					{
						if(CD.Year[0])
						{
							CopyString(AniBuff," Year-- ");
							CopyString2(AniBuff+8, CD.Year);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, " Year--none",20);
					}
					else if(CD.DispMode==CD_DISP_COMMENT)
					{
						if(CD.Comment[0])
						{
							CopyString(AniBuff,"Comment--");
							CopyString2(AniBuff+9, CD.Comment);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "Comment--none",20);
					}
					else if(CD.DispMode==CD_DISP_DISCARTIST)
					{
						if(CD.DiscArtist[0])
						{
							CopyString(AniBuff,"CD Art--");
							CopyString2(AniBuff+8, CD.DiscArtist);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "CD Art--none",20);
					}
					else if(CD.DispMode==CD_DISP_DISCTITLE)
					{
						if(CD.DiscTitle[0])
						{
							CopyString(AniBuff,"CD TITLE--");
							CopyString2(AniBuff+10, CD.DiscTitle);
							Animation(ANIMATION_START, AniBuff,20);
						}
						else
							Animation(ANIMATION_START, "CD TITLE--none",20);
					}

				}
			}
			break;

	}
	DisplayRefresh();
}

void CDPower(unsigned char mode)
{
	CD.PowerReq=mode;
	switch(CD.PowerReq)
	{
		case OFF_TO_STANDBY:
			CD.PowerMode=CD_POWER_OFF_TO_STANDBY_REQ;
			break;
		case OFF_TO_NORMAL:
			CD.PowerMode=CD_POWER_OFF_TO_STANDBY_REQ;
			break;
		case STANDBY_TO_OFF:
			CD.PowerMode=CD_POWER_STANDBY_TO_OFF_REQ;
			break;
		case STANDBY_TO_NORMAL:
			CD.PowerMode=CD_POWER_STANDBY_TO_NORMAL_REQ;
			break;
		case NORMAL_TO_OFF:
			CD.PowerMode=CD_POWER_NORMAL_TO_STANDBY_REQ;
			break;
		case NORMAL_TO_STANDBY:
			CD.PowerMode=CD_POWER_NORMAL_TO_STANDBY_REQ;
			break;
		
	}
	
}

void CDPowerMode(void)
{
	switch(CD.PowerMode)
	{
		case CD_POWER_OFF:
			if(CD.PowerReq==STANDBY_TO_OFF ||CD.PowerReq==NORMAL_TO_OFF)
				CD.PowerReq=0;
			
			break;
		case CD_POWER_OFF_TO_STANDBY_REQ:
			//Pin_CD_POWER=1;
			CD.PowerTimer10ms=10;
			CD.PowerMode=CD_POWER_RESET_ON;
			break;
		case CD_POWER_RESET_ON:
			if(CD.PowerTimer10ms>0)break;
			Pin_CD_RESET=1;
			CD.PowerMode=CD_POWER_WAIT_INIT_MSG;
			CD.PowerTimer10ms=100;
			break;
		case CD_POWER_WAIT_INIT_MSG:
			//if(CD.PowerTimer10ms==0)
			//	CD.PowerMode=CD_POWER_ERROR;
			//break;
		case CD_POWER_INIT:
			//if(CD.PowerTimer10ms==0)
			//	CD.PowerMode=CD_POWER_ERROR;
			if(CD.PowerTimer10ms==0)
				CD.PowerMode=CD_POWER_STANDBY;
			break;
		case CD_POWER_STANDBY:
			if(CD.PowerReq==OFF_TO_NORMAL)
				CD.PowerMode=CD_POWER_STANDBY_TO_NORMAL_REQ;
			else if(CD.PowerReq==NORMAL_TO_OFF)
				CD.PowerMode=CD_POWER_STANDBY_TO_OFF_REQ;
			else if(CD.PowerReq==OFF_TO_STANDBY ||CD.PowerReq==NORMAL_TO_STANDBY)
				CD.PowerReq=0;
				
			break;
		case CD_POWER_STANDBY_TO_NORMAL_REQ:
			Pin_CD_ON=1;
			CD.PowerMode=CD_POWER_STANDBY_TO_NORMAL;
			CD.PowerTimer10ms=100;
			break;
		case CD_POWER_STANDBY_TO_NORMAL:
			//if(CD.PowerTimer10ms==0)
			//	CD.PowerMode=CD_POWER_ERROR;
			if(CD.PowerTimer10ms==0)
				CD.PowerMode=CD_POWER_NORMAL;
			break;
		case CD_POWER_NORMAL:
			if(CD.PowerReq==OFF_TO_NORMAL ||CD.PowerReq==STANDBY_TO_NORMAL)
				CD.PowerReq=0;
			
			break;
		case CD_POWER_NORMAL_TO_STANDBY_REQ:
			Pin_CD_ON=0;
			CD.PowerMode=CD_POWER_NORMAL_TO_STANDBY;
			CD.PowerTimer10ms=10;
			break;
		case CD_POWER_NORMAL_TO_STANDBY:
			if(CD.PowerTimer10ms==0)
				CD.PowerMode=CD_POWER_STANDBY_TO_OFF_REQ;
			break;
		case CD_POWER_STANDBY_TO_OFF_REQ:
			Pin_CD_RESET=0;
			//Pin_CD_POWER=0;
			CD.PowerMode=CD_POWER_OFF;
			break;
		case CD_POWER_ERROR:
			
			break;
		
	}
	
}

void CDWork(unsigned char command)
{
	CD.WorkReq=command;
}

void CDWorkMode(void)
{
	
	switch(System.FWorkMode.Next)
	{
		case WORKMODE_DISC:
			CD.WorkMode=CD_WORKMODE_DISC;
			CDSendCommand(CD_CMD_SOURCE_TO_DISC);
			CD.WorkTimer1s=5;
			CD.DispMode=CD_DISP_DISC_READ;
			CD.F_DispReq=1;
			break;
		case WORKMODE_USB:
			CD.WorkMode=CD_WORKMODE_USB;
			CDSendCommand(CD_CMD_SOURCE_TO_USB);
			CD.WorkTimer1s=12;//when CD power on, USB inserting msg need long time to feedback
			CD.DispMode=CD_DISP_USB_READ;
			CD.F_DispReq=1;
			break;
		case WORKMODE_SD:
			CD.WorkMode=CD_WORKMODE_SD;
			CDSendCommand(CD_CMD_SOURCE_TO_SD);
			CD.WorkTimer1s=15;
			CD.DispMode=CD_DISP_SD_READ;
			CD.F_DispReq=1;
			break;

⌨️ 快捷键说明

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