vfd_58.h

来自「代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考」· C头文件 代码 · 共 487 行

H
487
字号
#ifndef __VFD_R_H
#define __VFD_R_H




/*
**     777777
**     5    6
**     5    6
**     444444     
**     2    3
**     2    3
**     111111     
*/
//wangbin 02-07-09
#define VFD_7SEG_SG     (1<<4)
#define VFD_7SEG_SF     (1<<5)
#define VFD_7SEG_SE     (1<<2)
#define VFD_7SEG_SD     (1<<1)
#define VFD_7SEG_SC     (1<<3)
#define VFD_7SEG_SB     (1<<6)
#define VFD_7SEG_SA     (1<<7)

/*must include file after define VFD_7SEG_SA--G*/
#include "vfd_7seg.h"
#include "macro.h"

#define VFD_DOT_MIC1    (45)
#define VFD_DOT_MIC2    (46)
#define VFD_DOT_MP3     (7)
#define VFD_DOT_SVCD    (10)
#define VFD_DOT_VCD     (8)
#define VFD_DOT_CD      (7)
#define VFD_DOT_PLAYB   (1)
#define VFD_DOT_PLAYA   (2)
#define VFD_DOT_REPALL  (0)
#define VFD_DOT_REP1    (3)
#define VFD_DOT_REPEAT  (13)
#define VFD_DOT_MINSEC  (100)
#define VFD_DOT_COLON   (64)
#define VFD_DOT_DASH    (43)
#define VFD_DOT_RESUME  (13)
#define VFD_DOT_REMAIN  (72)
#define VFD_DOT_PAUSE   (4)
#define VFD_DOT_PLAY    (5)
#define VFD_DOT_PBC     (9)
#define VFD_DOT_RAN (56)
#define VFD_DOT_PGM (24)
#define VFD_DOT_VCD20   (7)
#define VFD_DOT_OVER    (84)
#define VFD_DOT_2R      (41)
#define VFD_DOT_1L      (42)
#define VFD_DOT_SPACE   (43)
#define VFD_DOT_INTRO   (40)
#define VFD_DOT_PGM01   (95)
#define VFD_DOT_PGM02   (94)
#define VFD_DOT_PGM03   (93)
#define VFD_DOT_PGM04   (92)
#define VFD_DOT_PGM05   (91)
#define VFD_DOT_PGM06   (90)
#define VFD_DOT_PGM07   (89)
#define VFD_DOT_PGM08   (88)
#define VFD_DOT_PGM09   (87)
#define VFD_DOT_PGM10   (86)
#define VFD_DOT_PGM11   (85)
#define VFDA_P0   2
#define VFDA_P1   4
#define VFDA_M0   6
#define VFDA_M1   7
#define VFDA_S0   8
#define VFDA_S1   9
/*
** vfd_prg
**
** VFD track pattern of 1-11
*/
const BYTE vfd_prg[] = {
    0,

    VFD_DOT_PGM01,
    VFD_DOT_PGM02,
    VFD_DOT_PGM03,
    VFD_DOT_PGM04,
    VFD_DOT_PGM05,
    VFD_DOT_PGM06,
    VFD_DOT_PGM07,
    VFD_DOT_PGM08,
    VFD_DOT_PGM09,
    VFD_DOT_PGM10,
    VFD_DOT_PGM11,
    VFD_DOT_OVER,
};


const BYTE vfd_addr[6] =
    { VFDA_P0, VFDA_P1, VFDA_M0, VFDA_M1, VFDA_S0, VFDA_S1, };
void print_vfd_digital(BYTE no, BYTE data)
{
    if(no < 6)
    {
        vfd_mem[vfd_addr[no]] &= (0x01);
        vfd_mem[vfd_addr[no]] |= (vfd_digit[data]);
    }
}

void vfd_disc_turn(BYTE mode)
{
    static BYTE i = 7;

    if(i < 2)
        i = 7;
    if(mode)
    {
        vfd_mem[3] = 0xfe;
        vfd_mem[3] &= (~(1 << (i % 8)));
    }
    else
    {
        vfd_mem[3] = 0xfe;
        vfd_dot(0, VFD_DOT_PLAY);

    }
    i--;
    switch (i)
    {
        case 1:
            vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
            break;
        case 4:
            vfd_dot(VFD_DOT_OFF, VFD_DOT_COLON);
        default:
            break;
    }
}

void vfd_cdtype(BYTE cd_types)
{
    switch (cd_types)
    {
        case CDCVD:
        case CDSVCD:
            vfd_dot(VFD_DOT_ON, VFD_DOT_SVCD);
        case CDVCD10:
        case CDVCD11:
        case CDVCD20:
            vfd_dot(VFD_DOT_ON, VFD_DOT_VCD);
        case CDDA:
            vfd_dot(VFD_DOT_ON, VFD_DOT_CD);
            break;
        case CDVCD30:
            break;
        case CDROM:
            vfd_dot(VFD_DOT_ON, VFD_DOT_MP3);
            break;
    }
}

void vfd_close(void)
{
    print_vfd_digital(1, 12);
    print_vfd_digital(2, 21);
    print_vfd_digital(3, 24);
    print_vfd_digital(4, 28);
    print_vfd_digital(5, 14);
}
void vfd_readtoc(void)
{
    int     i;

    init_vfd_clear(0);
    vfd_disc_turn(0);
    vfd_dot(VFD_DOT_ON, VFD_DOT_MINSEC);
    for(i = 0; i < 6; i++)
        vfd_mem[vfd_addr[i]] |= VFD_7SEG_SG;


}

void vfd_nodisc(void)
{
    print_vfd_digital(0, 23);
    print_vfd_digital(1, 24);
    print_vfd_digital(2, 13);
    print_vfd_digital(3, 18);
    print_vfd_digital(4, 28);
    print_vfd_digital(5, 12);
}


void vfd_open(void)
{
    print_vfd_digital(2, 24);
    print_vfd_digital(3, 25);
    print_vfd_digital(4, 14);
    print_vfd_digital(5, 23);
}

void vfd_show_time(void)
{
    static BYTE cd_time_ss = 0xff;

    if(cd_disp_ss != cd_time_ss)
    {
        cd_time_ss = cd_disp_ss;
        print_vfd_digital(0, cd_disp_trk / 10);
        print_vfd_digital(1, cd_disp_trk % 10);
        print_vfd_digital(2, cd_disp_mm / 10);
        print_vfd_digital(3, cd_disp_mm % 10);
        print_vfd_digital(4, cd_disp_ss / 10);
        print_vfd_digital(5, cd_disp_ss % 10);
    }

}

void vfd_pause(void)
{
    vfd_dot(VFD_DOT_ON, VFD_DOT_PAUSE);
    vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAY);

}

void vfd_play(void)
{
    vfd_dot(VFD_DOT_OFF, VFD_DOT_PAUSE);
    vfd_dot(VFD_DOT_ON, VFD_DOT_PLAY);

}
void vfd_audio(void)
{

    switch (audio_channel)
    {
        case CH_LR:
            vfd_dot(VFD_DOT_ON, VFD_DOT_1L);
            vfd_dot(VFD_DOT_ON, VFD_DOT_2R);
            if(user_mute == C_ON)
            {
                vfd_dot(VFD_DOT_OFF, VFD_DOT_1L);
                vfd_dot(VFD_DOT_OFF, VFD_DOT_2R);
            }
            break;
#ifdef VOCAL_CANCEL
        case CH_AUTO_L:
#endif
        case CH_LL:
            vfd_dot(VFD_DOT_ON, VFD_DOT_1L);
            vfd_dot(VFD_DOT_OFF, VFD_DOT_2R);
            if(user_mute == C_ON)
            {
                vfd_dot(VFD_DOT_OFF, VFD_DOT_1L);
            }
            break;
#ifdef VOCAL_CANCEL
        case CH_AUTO_R:
#endif
        case CH_RR:
            vfd_dot(VFD_DOT_OFF, VFD_DOT_1L);
            vfd_dot(VFD_DOT_ON, VFD_DOT_2R);
            if(user_mute == C_ON)
            {
                vfd_dot(VFD_DOT_OFF, VFD_DOT_2R);
            }
            break;
#ifdef VOCAL_CANCEL
        case CH_AUTO_LR:
            vfd_dot(VFD_DOT_ON, VFD_DOT_1L);
            vfd_dot(VFD_DOT_ON, VFD_DOT_2R);
            if(user_mute == C_ON)
            {
                vfd_dot(VFD_DOT_OFF, VFD_DOT_1L);
                vfd_dot(VFD_DOT_OFF, VFD_DOT_2R);
            }
            break;
#endif
    }

}

void vfd_format(void)
{
    /*
       if(tv_format==TV_NTSC)
       {
       vfd_dot(VFD_DOT_ON,VFD_DOT_NTSC);
       vfd_dot(VFD_DOT_OFF,VFD_DOT_PAL);
       }      
       else       
       if(tv_format==TV_PAL)
       {
       vfd_dot(VFD_DOT_ON,VFD_DOT_PAL);
       vfd_dot(VFD_DOT_OFF,VFD_DOT_NTSC);
       }      
     */ }

void vfd_playmode(void)
{
    if(IsPBCOn())
        vfd_dot(VFD_DOT_ON, VFD_DOT_PBC);
    else
        vfd_dot(VFD_DOT_OFF, VFD_DOT_PBC);
}

void vfd_repeat(void)
{
    switch (rep_ab_mode)
    {

        case REPEAT_FIND_A:
            vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYA);
            vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYB);
            break;
        case REPEAT_FIND_B:
            vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYA);
            vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYB);
            break;
        default:
            vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYA);
            vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYB);
            break;
    }
    switch (rep_mode)
    {
        case REPEAT_TRACK:
        {
            vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);
            vfd_dot(VFD_DOT_ON, VFD_DOT_REP1);
        }
            break;
        case REPEAT_DISC:
        {
            vfd_dot(VFD_DOT_ON, VFD_DOT_REPALL);
            vfd_dot(VFD_DOT_OFF, VFD_DOT_REP1);
        }
            break;
        default:
        {
            vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);
            vfd_dot(VFD_DOT_OFF, VFD_DOT_REP1);
        }
            break;
    }
}

void vfd_refresh(void)
{
    vfd_playmode();
    vfd_format();
    vfd_cdtype(cd_type_loaded);
    vfd_audio();
}


void vfd_set_pgm(BYTE method)
{
    extern const BYTE vfd_prg[];
    BYTE    i, trk, prg_flag;

    prg_flag = (method <= 12) ? method : 12;
    trk = cd_trk_hi - cd_trk_lo;
    if(trk - 1 > 11)
        trk = 12;
    for(i = 1; i <= trk; i++)
    {
        if(prg_flag == 0)
            vfd_mem[vfd_prg[i] >> 3] |= (1 << (vfd_prg[i] & 0x07));
        else if(--prg_flag == 0)
            vfd_mem[vfd_prg[i] >> 3] ^= (1 << (vfd_prg[i] & 0x07)); //flash vfd pgm
        else
            vfd_mem[vfd_prg[i] >> 3] &= ~(1 << (vfd_prg[i] & 0x07));    //turn off vfd pgm
    }

}

void vfd_set_intro(void)
{
#if 0
    if(play_state == VCD_STATE_INTRO)
        vfd_dot(VFD_DOT_ON, VFD_DOT_INTRO);
    else if(play_state != VCD_STATE_INTRO)
        vfd_dot(VFD_DOT_OFF, VFD_DOT_INTRO);
#endif
}

void vfd_set_remain(void)
{
    extern BYTE remain;

    switch (remain)
    {
        case REMAIN_DISC:
        case REMAIN_TRK:
            vfd_dot(1, VFD_DOT_REMAIN);
            break;
        case REMAIN_OFF:
        case REMAIN_STOP:
            vfd_dot(0, VFD_DOT_REMAIN);
            break;
    }
}

void vfd_game_clear(void)
{
    //just to past the compiling proccess
}

void vfd_game(void)
{
    //just to past the compiling proccess

}

void vfd_normal_state(void)
{
  //int mic_on_off_flag;
   
  if(cd_type_loaded!=CDNODISK)
    {
     //if(Gmem.gmp3.gifsFunc!=FS_FUNC_JPEG)    
       {
          vfd_disc_turn(2);
          vfd_show_time();
       }
       
       vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
       vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
       
       if(prog_state==PLAY_PROGRAM)
         vfd_dot(VFD_DOT_ON,VFD_DOT_PGM);
       
       #if 0
       if(au_get_mic_mode()!=MIC_OFF)
         vfd_dot(VFD_DOT_ON,VFD_DOT_MIC);
       else 
         vfd_dot(VFD_DOT_OFF,VFD_DOT_MIC);
       #endif
       //AVAPI_control(C_WRITE,AVAPI_SPECTRUM,C_ON);
       //vfd_show_eq(1);  
    } 
  else
    {
          vfd_mem_clear();
          vfd_nodisc();
    }
   return; 
}
void vfd_mem_clear(void)
{ 
  int i=0;
  
  for(i=0;i<16;i++)
  {
    vfd_mem[i] = 0; 
  } 
    
}
void vfd_stop(void)
{
   vfd_show_time();
   vfd_dot(VFD_DOT_ON,VFD_DOT_MINSEC);         
   
   if(IsKYProg())
     vfd_dot(VFD_DOT_ON,VFD_DOT_PGM);
   else
     vfd_dot(VFD_DOT_OFF,VFD_DOT_PGM);
          
   vfd_dot(VFD_DOT_OFF,VFD_DOT_PLAY);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);    
   vfd_dot(VFD_DOT_OFF,VFD_DOT_REP1);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_REPEAT);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_REPALL);
   return;  
}

void vfd_jpeg_disp(void)
{//ok!
       init_vfd_clear(0);     
       print_vfd_digital(2,cd_disp_trk/1000);
       print_vfd_digital(3,(cd_disp_trk / 100) % 10);
       print_vfd_digital(4,(cd_disp_trk / 10) % 10);
       print_vfd_digital(5,cd_disp_trk % 10);      
       
       vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
       vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
}
#endif/*__VFD_R_H*/

⌨️ 快捷键说明

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