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

📄 tmain.c

📁 飞利浦10碟VCD控制程序
💻 C
字号:

#include "Reg52.H"
#include <globe.h>
#include <constant.h>
#include <function.h>

unsigned char code CDCNext[4]={0x53,0x2C,0x68,0x97};    //下一首
unsigned char code CDCPrev[4]={0x53,0x2C,0xA8,0x57};    //上一首
unsigned char code CDCStop[4]={0x53,0x2C,0x10,0xEF};    //停止
unsigned char code CDCPlay[4]={0x53,0x2C,0xE4,0x1B};    //播放
unsigned char code CDCNextDisc[4]={0x53,0x2C,0x38,0xC7};//下一碟
unsigned char code CDCPrevDisc[4]={0x53,0x2C,0x18,0xE7};//上一碟
unsigned int ttt,tmp;
unsigned char status,status1,statusH,ii;
bit FlagSleep,FlagPlay,Flag_Send;

main()
{
	MCU_Init();
	Val_Init();
        InitCDC();
	buf_eeprom[0]=0x01;
	buf_eeprom[1]=0x01;
	WriteEEPROM(0x00,buf_eeprom,2);

	buf_eeprom[0]=0x00;
	WriteEEPROM(0x03,buf_eeprom,1);

	LoadParameters();
	TV_ERROR=TVInit();
/*	SendStr("TV Setting...... ");
	if(TV_ERROR)
		SendStr("Error!");
	else
		SendStr("OK!");

*/
//   EA=0;
   IE = 0x93;
   FlagPlay=0;
   while(1)
   {

           if(FlagSleep)
             {
             EX0=0;
              IT0=0;     //低电平触发
       ttt=50000;
       while(ttt--);
       ttt=50000;
       while(ttt--);

              EX0=1;
              PCON|=0x02;
              }

   	   ReadKey();
	   if(KeyValue==KEY1)  //Play/stop
	   {
                FlagPlay=!FlagPlay;
                if(!FlagPlay)
                {
                    WriteByteToCDC(CDCPlay);
                    ms_delay=54;
                    while(ms_delay);
                    WriteByteToCDC(CDCPlay);
                    ms_delay=54;
                    while(ms_delay);
                    WriteByteToCDC(CDCPlay);
                }
                else
                {
                    WriteByteToCDC(CDCStop);
                    ms_delay=54;
                    while(ms_delay);
                    WriteByteToCDC(CDCStop);

                }
	    }
	   else if(PressKey==KEY2 )        //快进 && 下一首     已经测试通过
	   {
               while(KeyValue==KEYPRESS && keypresstime<=800)ReadKey();
               if(KeyValue==KEYNONE)  //next
               {
                   PressKey=KEYNONE;
                   WriteByteToCDC(CDCNext);
                   ms_delay=54;
                   while(ms_delay);
                   CDCRewrite();
               }
               else if(keypresstime>800 )//forward
               {
                   WriteByteToCDC(CDCNext);
                   ms_delay=54;
                   while(ms_delay);
                   CDCRewrite();
                   ms_delay=95;
                   for(ii=0;ii<8;ii++)  //至少连发9次才能实现快进,否则是下一首
                   {
                       while(ms_delay);
                       CDCRewrite();
                       ms_delay=95;
                   }
                   while((P2&0x1F)!=0x1F)
                   {
                        ReadKey();
                        if(ms_delay==0)
                        {
                           CDCRewrite();
                           ms_delay=95;
                        }
                   }
               }
	   }


/*	   else if(PressKey==KEY2 )        //快退  &&  上一首
	   {
               if(KeyValue==KEYNONE && keypresstime<500)  //next
               {
                   PressKey=KEYNONE;
                   WriteByteToCDC(CDCPrev);
                   ms_delay=54;
                   while(ms_delay);
                   CDCRewrite();
               }
               else if(KeyValue==KEYPRESS && keypresstime>800 && cdcrepeat==0)//forward
               {
                   WriteByteToCDC(CDCPrev);
                   ms_delay=54;
                   while(ms_delay);
                   CDCRewrite();
                   cdcrepeat=1;
                   ms_delay=95;
                   for(ii=0;ii<8;ii++)  //至少连发9次才能实现快进,否则是下一首
                   {
                       while(ms_delay);
                       CDCRewrite();
                       ms_delay=95;
                   }
               }
               else if(cdcrepeat && ms_delay==0)
               {
                   CDCRewrite();
                   ms_delay=95;
               }
	   }
*/
/*	   else if(KeyValue==KEY2)   //Next
	   {
              WriteByteToCDC(CDCNext);
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();
	   }
*/
	   else if(KeyValue==KEY3)   //prev
	   {
              WriteByteToCDC(CDCPrev);
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();
	   }
	   else if(KeyValue==KEY4)   //next disc
	   {
              WriteByteToCDC(CDCNextDisc);
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();

	   }
	   else if(KeyValue==KEY5)
	   {
              WriteByteToCDC(CDCPrevDisc);
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();
              ms_delay=54;
              while(ms_delay);
              CDCRewrite();

	   }

	   if(bFlagSioCmd)
	   {
	      DealSioData();
	      bFlagSioCmd=0;
	   }
           if(Flag_Send)//500ms读取一次cdc的状态
           {
              Flag_Send=0;
              if(CDCRead(buf_eeprom)==OP_SUCCESS)
              {
                 SendBuffer(buf_eeprom,7);
              }
              else 
              {
                 ES=0;
                 SBUF=0x55;
                 while(!TI);
                 TI=0;
                 ES=1;
              }
           }
   }
}





//--------------------------------------------
//T0 Interrupt Time is 1ms
//#define TF0_VECTOR	1  /* 0x0B Timer 0 */
//
Timer0Interrupt(void) interrupt TF0_VECTOR using 3
{
    if(MsDelaySelect==MSDELAY )
    {
	TH0 = TIMER_1ms_H;    //定时时间1ms
	TL0 = TIMER_1ms_L;
	sys_ms_count++;
        if(sys_ms_count==60000)sys_ms_count=0;
        if((sys_ms_count%500)==0){P10=!P10;Flag_Send=1;}
        if(ms_delay)ms_delay--;
        if(keypresstime<10000)keypresstime++;
    }
    else if(MsDelaySelect==uSDELAY100)
    {
	TH0 = TIMER_100us_H;    //定时时间100us
	TL0 = TIMER_100us_L;
        if(us_delay100)us_delay100--;
    }
    else if(MsDelaySelect==uSDELAY)    //65536计数范围内的定时
    {
	TH0 = TIMER_1ms_H;    //定时时间1ms
	TL0 = TIMER_1ms_L;
        MsDelaySelect=MSDELAY;
        usTimeOut=1;
    }
}


Ext0Interrupt(void) interrupt IE0_VECTOR using 1
{
     EX0=0;
     if(FlagSleep)
     {
          ttt=50000;
          while(ttt--);
          FlagSleep=0;
          PCON&=0xFD;
          IT0=1;
     }
     else
     {
       FlagSleep=1;
       ttt=50000;
       while(ttt--);
       ttt=50000;
       while(ttt--);
     }
     EX0=1;
}


//-------------------------------------------
//#define UART_VECTOR	4  /* 0x23 UART */
SIOInterrupt(void) interrupt UART_VECTOR using 2
{
	if(RI)
	{
		RI=0;
		if(!bFlagSioCmd)
		{
			buf_sio[13]=buf_sio[12];
			buf_sio[12]=buf_sio[11];
			buf_sio[11]=buf_sio[10];
			buf_sio[10]=buf_sio[9];
			buf_sio[9]=buf_sio[8];
			buf_sio[8]=buf_sio[7];
			buf_sio[7]=buf_sio[6];
			buf_sio[6]=buf_sio[5];
			buf_sio[5]=buf_sio[4];
			buf_sio[4]=buf_sio[3];
			buf_sio[3]=buf_sio[2];
			buf_sio[2]=buf_sio[1];
			buf_sio[1]=buf_sio[0];
			buf_sio[0]=SBUF;

			if(buf_sio[13]==SIO_CMD_HEAD && buf_sio[0]==SIO_CMD_END)
				bFlagSioCmd=1;
//	ES=0;
//	SBUF=0xaa;
//	while(!TI);
//	TI=0;
//	ES=1;
		}
	}
	if(TI)TI=0;
}


⌨️ 快捷键说明

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