vfd32.h

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

H
397
字号
#ifndef	__VFD_R_H
#define	__VFD_R_H

/*
**	777777
**     2      6
**     2      6
**      111111     
**     3      5
**     3      5
**      444444     
*/
//ZHX 033003 
#define	VFD_7SEG_SG	(1<<3)
#define	VFD_7SEG_SF	(1<<4)
#define	VFD_7SEG_SE	(1<<1)
#define	VFD_7SEG_SD	(1<<0)
#define	VFD_7SEG_SC	(1<<2)
#define	VFD_7SEG_SB	(1<<5)
#define	VFD_7SEG_SA	(1<<6)

#include "vfd_7seg.h"
#include "macro.h"
#include "fs9660.h"

#define VFD_DOT_DVD     (79)
#define VFD_DOT_DTS     (63) 
#define VFD_DOT_AC3     (47)
#define VFD_DOT_ANGLE   (31)
#define VFD_DOT_SVCD    (62)
#define	VFD_DOT_VCD	(61)
#define VFD_DOT_CD      (60)
#define VFD_DOT_MP3     (14)
#define	VFD_DOT_REPALL	(57)
#define	VFD_DOT_REPEAT	(56)
//#define	VFD_DOT_MINSEC	(39)
#define	VFD_DOT_MINSEC	(23)
#define VFD_DOT_COLON   (23)
#define	VFD_DOT_PAUSE	(58)
#define	VFD_DOT_PLAY	(59)
#define	VFD_DOT_PBC	(15)

#define	VFDA_P0		6
#define	VFDA_P1		5
#define VFDA_M0         3
#define VFDA_M1         2
#define	VFDA_S0		1
#define	VFDA_S1		0

const BYTE vfd_addr[7] = { 6, 5, 4, 3, 2, 1, 0};

void print_vfd_digital(BYTE no, BYTE data)
{
	switch (no)
	{
		case 5:
			vfd_mem[1] &= (~0x3f);
			vfd_mem[0] &= (~0x80);
			vfd_mem[1] |= ((vfd_digit[data] >> 1)&0x3f);
			if (vfd_digit[data] & 0x01)
			    vfd_mem[0] |= (0x80);
			break;
		default:
			vfd_mem[vfd_addr[no]] &= (~0x7f);
			vfd_mem[vfd_addr[no]] |= (vfd_digit[data]&0x7f);
			break;
	}
}

void vfd_disc_turn(BYTE mode)
{
	static int i = 12;
        if(play_state == VCD_STATE_STOP) {
           vfd_mem[9] = 0x7f;
           vfd_mem[8] = 0xfc;
           return;          
           }            //ZHX 061503	
        if (i < 0)  i = 12;
	if(mode)
	{
	   vfd_mem[9] = 0x7f;
	   vfd_mem[8] = 0xfc;
           if (i < 7)
              vfd_mem[9] &= (~(1 << i));
           else 
              vfd_mem[8] &= (~(1 << (i -5)));
	}
	i--;
	switch (i)
	{
		case 1:
		case 4:
		case 7:
		case 10:
#ifdef VFDVOL_DISPLAY
                  if(!volFlag)
#endif
                     {
                        vfd_dot(VFD_DOT_ON, VFD_DOT_MINSEC);
                        vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
                     }
                   break;
		case 2:
		case 5:
		case 8:
		case 11:
#ifdef VFDVOL_DISPLAY
                  if(!volFlag)
#endif
                    {
                      vfd_dot(VFD_DOT_OFF, VFD_DOT_MINSEC);
                      vfd_dot(VFD_DOT_OFF, VFD_DOT_COLON);
                    }
                  break;
		case 3:
		case 6:
		case 9:
		case 12:
                  vfd_mem[VFD_DOT_PLAY / 8] |= (1 << (VFD_DOT_PLAY % 8));
                  vfd_mem[VFD_DOT_PAUSE / 8] &= (~(1 << (VFD_DOT_PAUSE % 8)));
                  if(IsPBCOn())
                     vfd_dot(VFD_DOT_ON, VFD_DOT_PBC);
                  else
                     vfd_dot(VFD_DOT_OFF, VFD_DOT_PBC);
                  break;
		default:
                  break;
	}
}

void vfd_cdtype(BYTE cd_types)
{
     switch (cd_types)
	{
		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 CDROM:
			vfd_dot(VFD_DOT_ON, VFD_DOT_MP3);
			break;
	}
}

void vfd_close(void)
{
	print_vfd_digital(2, 12);
	print_vfd_digital(3, 21);
	print_vfd_digital(4, 24);
	print_vfd_digital(5, 28);
	print_vfd_digital(6, 14);
}

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_nodisc(void)
{
	print_vfd_digital(0, 23);
	print_vfd_digital(1, 24);
	print_vfd_digital(3, 13);
	print_vfd_digital(4, 18);
	print_vfd_digital(5, 28);
	print_vfd_digital(6, 12);
}

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

void vfd_show_time(void)
{
     static BYTE cd_time_ss = 0xff;
#ifdef VFDVOL_DISPLAY
     if(!volFlag)
#endif
     { 
        if ((cd_type_loaded==CDROM)&&CheckUIState(VCD_STATE_STOP))
        	return;
        if(cd_disp_ss != cd_time_ss)
	  {
		cd_time_ss = cd_disp_ss;
            if(cd_disp_trk > 99) {
		print_vfd_digital(0, cd_disp_trk / 100);
		print_vfd_digital(1, (cd_disp_trk%100) / 10);
		print_vfd_digital(2, cd_disp_trk % 10);		
 		print_vfd_digital(3, 36);
	        print_vfd_digital(4, cd_disp_mm%10);
		print_vfd_digital(5, cd_disp_ss / 10);
		print_vfd_digital(6, cd_disp_ss % 10);
            	}
            else {
		print_vfd_digital(0, cd_disp_trk / 10);
		print_vfd_digital(1, cd_disp_trk % 10);
		print_vfd_digital(2, 36);		
 		print_vfd_digital(3, cd_disp_mm/10);
	        print_vfd_digital(4, cd_disp_mm%10);
		print_vfd_digital(5, cd_disp_ss / 10);
		print_vfd_digital(6, cd_disp_ss % 10);
            	}
	  }
     }
}

#ifdef VFDVOL_DISPLAY
void vfd_vol_display(BYTE volNum)
{
           vfd_dot(VFD_DOT_OFF,VFD_DOT_COLON);          
           vfd_dot(VFD_DOT_OFF,VFD_DOT_MINSEC);          
           print_vfd_digital(0, volNum/10);
           print_vfd_digital(1, volNum%10);
           print_vfd_digital(2, 20);
#ifdef VFDECHO_DISPLAY
           if(VfdFlag==1) {
             if(IsKYSetup()) {
               print_vfd_digital(3, 13);
               print_vfd_digital(4, 14);
               print_vfd_digital(5, 21);
               print_vfd_digital(6, 20);
               }
             else {                   
               if(!vcx_echo){	
                 print_vfd_digital(0, 24);
                 print_vfd_digital(1, 15);
                }
               else if(vcx_echo==1) {
                 print_vfd_digital(0, 24);
                 print_vfd_digital(1, 23);
                } 
               print_vfd_digital(3, 14);
               print_vfd_digital(4, 12);
               print_vfd_digital(5, 17);
               print_vfd_digital(6, 24);
               }
            }
           else if(VfdFlag==2) {
               print_vfd_digital(3, 13);
               print_vfd_digital(4, 14);
               print_vfd_digital(5, 12);
               print_vfd_digital(6, 20);
            }
           else 
#endif
            {	
               print_vfd_digital(3, 30);
               print_vfd_digital(4, 37);
               print_vfd_digital(5, 21);
               print_vfd_digital(6, 20);
            }
}
#endif

void vfd_audio(void)
{
}

void vfd_format(void)
{

}

void vfd_playmode(void)
{

}

void vfd_set_remain(void)
{
}

void vfd_normal_state(void)
{
  if(cd_type_loaded!=CDNODISK)
    {
       vfd_disc_turn(2);
       vfd_show_time();         
       vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
       vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
    } 
  else
    {
          init_vfd_clear(0);
          vfd_nodisc();
    }
}

void vfd_stop(void)
{
   //vfd_show_time();
   vfd_disc_turn(0);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_PLAY);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);    
   vfd_dot(VFD_DOT_OFF,VFD_DOT_PBC);    
   vfd_dot(VFD_DOT_OFF,VFD_DOT_REPEAT);
   vfd_dot(VFD_DOT_OFF,VFD_DOT_REPALL);
   if(cd_type_loaded == CDROM) {
           vfd_dot(VFD_DOT_OFF,VFD_DOT_MINSEC);         
           vfd_dot(VFD_DOT_OFF,VFD_DOT_COLON);         
           print_vfd_digital(0, 25);
           print_vfd_digital(1, 3);
           print_vfd_digital(2, 36);
           print_vfd_digital(3, 0);
           print_vfd_digital(4, Gmem.gmp3.iso9660_file_cnt/100);
           print_vfd_digital(5, (Gmem.gmp3.iso9660_file_cnt%100)/10);
           print_vfd_digital(6, Gmem.gmp3.iso9660_file_cnt%10);
   	}
   else {
          vfd_dot(VFD_DOT_ON,VFD_DOT_MINSEC);         
          vfd_dot(VFD_DOT_ON,VFD_DOT_COLON);         
   	}
}

void vfd_pause(void)
{
     static BYTE flash_play = 0;
     flash_play ++;
     if(flash_play > 3) flash_play = 0;
     vfd_dot(VFD_DOT_ON, VFD_DOT_MINSEC);
     vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
     vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
     if(flash_play/2)
        vfd_dot(VFD_DOT_ON,VFD_DOT_PAUSE);
     else
        vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
#ifdef VFDVOL_DISPLAY
     if(volFlag) {
        volFlag = 0;
        cd_disp_ss ++;
        vfd_show_time();
       }
#endif
}

void vfd_repeat(void)
{
	switch (rep_mode)
	{
		case REPEAT_TRACK:
			vfd_dot(VFD_DOT_ON, VFD_DOT_REPEAT);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);
			break;
		case REPEAT_DISC:
			vfd_dot(VFD_DOT_ON, VFD_DOT_REPEAT);
			vfd_dot(VFD_DOT_ON, VFD_DOT_REPALL);
			break;
		default:										//repeat cancel
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REPEAT);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);
			break;
	}

}

void vfd_game(void)
{
        vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
        vfd_dot(VFD_DOT_ON, VFD_DOT_MINSEC);//ZHX 062103 for gun
	print_vfd_digital(0, GetCmdSrc(sys_cmd) / 10);
	print_vfd_digital(1, GetCmdSrc(sys_cmd) % 10);
	print_vfd_digital(2, 36);
	print_vfd_digital(3, 0);
	print_vfd_digital(4, 0);
	print_vfd_digital(5, 0);
	print_vfd_digital(6, 0);
}

void vfd_game_clear(void)
{
        vfd_disc_turn(2);
        vfd_refresh();
        vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
        vfd_dot(VFD_DOT_ON, VFD_DOT_MINSEC);//ZHX 062103 for gun
	print_vfd_digital(0, 0);
	print_vfd_digital(1, 0);
	print_vfd_digital(2, 36);
	print_vfd_digital(3, 0);
	print_vfd_digital(4, 0);
	print_vfd_digital(5, 0);
	print_vfd_digital(6, 0);
}



#endif/*__VFD_R_H*/

⌨️ 快捷键说明

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