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

📄 sound_hd.c

📁 日本FAMILY按摩椅W-1用的配套操作器程序。带VFD显示
💻 C
字号:
//*******************************************************
//*														*
//*		REMOCON OF MASSAGE MACHINE FOR FAMILY			*
//*														*
//*					DEVICE : uPD784218					*
//*														*
//*						Copyright (C) 2000 K.K NUMATA	*
//*														*
//*******************************************************
//*					SOUND HANDLER						*
//*******************************************************
//*	2000.02.04		V1.00								*
//*	2001.11.27		V4104								*
//*******************************************************
#pragma	interrupt	INTTM5  Send_pcm_data  rb4
#pragma ei

#pragma		sfr
#include <stdio.h>
#include "sound.h"
#include "mode.h"
#include "vfd.h"
#include  "slcd.h"
#include  "trm.h"
#include  "test.h"
//#define CHIP_AON P3.5
#define  TM90US 68
#define TM500MS    5 
//*******************************************************
//		function prototype
//*******************************************************

void Snd_out(unsigned char number);
//void Snd_cancel(void);
void Snd_init(void);
//void Snd_beep(char);

void Sound_prc( void) ;
//void Sound_test(void );
//unsigned char  Flash_rom_test (void) ;
unsigned char Read_pcm_data (void ) ;
void Sure_p30_p31(void) ;
void Set_macro(unsigned long int actual_addr,unsigned long int area_limit_data);
extern	unsigned char *sound_addr ;
extern  unsigned char *sound_end_addr ;	
unsigned long int send_addr,send_number ;
void Bgm_sound_prc(void) ;

//******************************************************
//		sound address table
//******************************************************
 const unsigned long int music[][2] = {
 	//bank 0
	{0x00000400,0x0006b2d0},              // {start_addr,end_addr} 0
	{0x0006b6d0,0x0000a000},              //START_SOUND 1 bc0c
	{0x000772dc,0x0000422b},              //LING CHECK_OVER_SUND 2
	{0x0007b508,0x000003f8},              //insert sound 3
	//bank 1
	{0x00080000,0x0006b6a8},              //long music no use 4
//    {0x000eb6a8,0x00005e62},              //gelin lin lin  5
    {0x000eb6a8,0x00005d00},              //
	{0x000f150a,0x000021cc},              //dududu  ERR_SOUND  6
	{0x000f36d6,0x0000036c},              //ji key KEY_SOUND  7
	//bank 2
	{0x00100000,0x0006b5d2},              //long music  8
//	{0x0016b5d2,0x0001172d},              //finger CHECK_SOUND  9
	{0x0016b5d2,0x0001034e},
	//bank 3
	{0x00180000,0x0006b670},                //happy music  10
	{0x00000000,0x00000000}	
};


//*******************************************************
//		sound handler initialize
//*******************************************************
void Snd_init(void)
{
	FLASH_CE = 0 ;
	FLASH_RD = 0 ;
	CHIP_AON = AOFF ;        // AON sound enable(NJM2113 foot1 )
//	play_sound = SOUND_OFF ;    //  don't play music
	DAM0 = 0 ;        // D/A normal mode 
	DACE0 = 1 ;       // enable D/A
    
	TMC5 = 0x80 ;     //enable interrupt
	PRM5 = 0x04 ;     // fxx/16 = 0.75MHz
	CR50 = TM90US ;   // 90US
//	TMIC5 = 0x40 ;    // Highest priority
	TMPR51 = 1 ;      //priority 2
	TMPR50 = 0 ;
	TMMK5 = 1 ;
	SOUND_H = 0x00;
 	SOUND_L= 0x0000;
	
	SFPR1 = 0x84 ;   //SFR: DACS0 
	CMMD5 = 0x08 ;   //type b marco server
	CCHP5 = 0x8a ;
	TMISM5 = 0 ;
	MSC1 = 0x0000;
	sound_no = BGM_NO ;
}

//******************************************************
//    sound_process
//******************************************************
void Sound_prc ( void)
{
       if(MSC1 != 0)
       {
  /*      if(ac_mode != 0)
         
          {
 //        	 if((play_sound_F == 0)||((yn_mode == 1)&&(play_sound_F == 1))||(yn_mode==2)||(yn_mode ==3))
         	 {
             	if(sound_prc_F == 0)
             	{
    	       		sound_prc_F = 1;
               		TMISM5 = 1 ;
       	      		CHIP_AON = AON ;
     	      		TMMK5 = 0 ;
     	       		TCE5 = 1;        //start
                }
             }
          } */
          if(sound_prc_F == 0)
          {   
    	 
    	    sound_prc_F = 1;
            TMISM5 = 1 ;
       	    CHIP_AON = AON ;
     	    TMMK5 = 0 ;
     	    TCE5 = 1;        //start
    	  }
       }
}
//******************************************************
//  sound_select
//******************************************************
void Snd_out (unsigned char music_no )
{
	 TCE5 = 0 ;             //stop timer 5 /no output
	 TMIF5 = 0 ;
     TMISM5 = 0 ; 
     sound_prc_F = 0 ;
     MSC1 = 0 ;
     P3.0 = 0 ;
     P3.1 = 0 ;
     SOUND_H = 0x00 ;
     SOUND_L = 0x0000 ;
     
     if((music_no >=0)&&(music_no<=10))	       
     {
        
     	 send_addr = music[music_no][0] ;
     	 send_number = music[music_no][1] ;
    	 Sure_p30_p31();   
    	 if ((music_no == 0)||(music_no == 4)||(music_no == 8)||(music_no == 10))  
    	 	sound_break_F = 0;
    	 else  
    	 	sound_break_F = 1 ; 
 /*        TMISM5 = 1 ;
       	 CHIP_AON = AON ;
     	 TMMK5 = 0 ;
     	 TCE5 = 1;     */
     		
     } 
     
}	

/*******************************************/
/*******************************************/
//**************************************************
//   INTTM5 send pcm data to speaker 
//**************************************************

void Send_pcm_data(void)
{
    EI();
 
    TCE5 = 0 ;
    TMIF5 = 0 ;
	if(send_number >= 1)
	{
	  Sure_p30_p31();
	  TMISM5 = 1 ;
	  TCE5 = 1 ;
	} 
	else
	{
	 sound_prc_F = 0 ;
	 TMMK5 = 1 ;
	 TMISM5 = 0;
	 SOUND_H = 0x00;
     CHIP_AON = AOFF ;
	 
	}   
	
}	


/****************************************/
/****************************************/
		
void Sure_p30_p31(void)
{
  unsigned long int actual_addr,area_limit_data;
  if((send_addr > 0x7ffff)&&(send_addr <= 0xfccff))   //flash:80000-fccff 
   {
    
     actual_addr = send_addr-(unsigned long)0x80000 ;
     area_limit_data =(unsigned long)0xfccff-send_addr ;               //value1 is one area limited data    
     Set_macro(actual_addr,area_limit_data) ;
   }
  else if((send_addr> 0xfffff)&&(send_addr <= 0x17cd00))  //flash: 100000-17ccff
  {
      actual_addr = send_addr -(unsigned long)0x100000;
      area_limit_data =(unsigned long)0x17ccff-send_addr ;
      Set_macro(actual_addr,area_limit_data);
  }
  else if((send_addr >(unsigned long)0x17ffff)&&(send_addr <= (unsigned long)0x1fcd00))   
  {                                                      //0x180000--0x1fccff
     actual_addr = send_addr -(unsigned long)0x180000;
     area_limit_data =(unsigned long)0x1fccff-send_addr ;
     Set_macro(actual_addr,area_limit_data);
     
  }
 else  if(send_addr <= 0x7ccff)                                      //flash:00000-7ccff
  {
   P3.0 = 0;
   P3.1 = 0 ;
   actual_addr = send_addr ;                 //<512k
   area_limit_data = 0x7ccff-send_addr ;
   Set_macro(actual_addr,area_limit_data);
  }
}

/**************************************/
/**************************************/

void Set_macro(unsigned long int actual_addr,unsigned long int area_limit_data)
{
   
    unsigned char mp_h ;
     mp_h =(unsigned char)(send_addr>>16)+8 ;
     if((mp_h >=  8)&&(mp_h <= 15))                 //0x00000-0x7ccff   BANK0  
     {
     	P3.0 = 0 ;
     	P3.1 = 0 ;
     	SOUND_H = mp_h ;
     } 
     else if((mp_h >= 16)&&(mp_h <= 23))             //0x80000--0xfccff  BANK1
     {
        P3.0 = 1;
        P3.1 = 0 ;
        SOUND_H = mp_h - 8 ;
     }
     else if((mp_h >= 24)&&(mp_h <= 31))           //0x100000--0x17ccff BANK2
     {
        P3.0 = 0;
        P3.1 = 1;
        SOUND_H = mp_h - 16 ;
     }
     else if((mp_h >= 32)&&(mp_h <= 39))            //0x180000--0x1fccff  BANK3
     { 
        P3.0 = 1;
        P3.1 = 1;
        SOUND_H = mp_h - 24 ;
      }
     
     SOUND_L = (unsigned int)actual_addr ;
     if(send_number <= area_limit_data)      //no through bank 
     {
       if(send_number <= 0xffff)              //<64k
       {
          MSC1 = (unsigned int)send_number;
          send_addr += send_number ;
          send_number = 0 ;
         
       }
       else
       {
           MSC1 = 0xffff;
           send_number -= 0xffff;
           send_addr += 0xffff;
       }
    }
/*    else                               //through bank
    {
        if(area_limit_data <= 0xffff)
        {
        	MSC1 =(unsigned int)area_limit_data ;
        	send_number -= area_limit_data;
        	send_addr += (area_limit_data+0x3300) ;
        }
        else
        {
            MSC1 = 0xffff;
            send_number -= 0xffff;
            send_addr += 0xffff;
        }
     }  	*/
}  

/****************************************************************/
/***************************  bgm  prc   ************************/
/****************************************************************/
void Bgm_sound_prc(void)
{
  if((ac_mode == BGM1)&&(yn_mode ==3 ))
  {
     if (sound_break_F == 1 )
     {
        if(sound_prc_F == 0)
        {
     		Snd_out(sound_no);
     		sound_break_F = 0 ;
    	 }
    	 return ;
     }
     else if(sound_break_F == 0)
     {
     	if((sound_prc_F == 0)&&(sound_no ==BGM_NO))
     	{
       		Snd_out(BGM1_SOUND_1) ;
       		sound_no = BGM1_SOUND_1 ;
     	}
     	else if((sound_prc_F == 0)&&(sound_no ==BGM1_SOUND_1))
     	{
      		Snd_out(BGM1_SOUND_2) ;
       		sound_no = BGM1_SOUND_2 ;
     	}
     	else if((sound_prc_F == 0)&&(sound_no == BGM1_SOUND_2))
     	    sound_no = BGM_NO;
  	 }
  }
  else if((ac_mode == BGM2)&&(yn_mode ==3))
  {
     if (sound_break_F == 1 )
     {
        if(sound_prc_F == 0)
        {
     		Snd_out(sound_no);
     		sound_break_F = 0 ;
   
    	 }
    	 return ;
     }
     else if(sound_break_F == 0)
     {  	 
     	if((sound_prc_F == 0)&&(sound_no ==BGM_NO))
     	{
       		Snd_out(BGM2_SOUND_1) ;
       		sound_no = BGM2_SOUND_1 ;
     	}
    	 else if((sound_prc_F == 0)&&(sound_no ==BGM2_SOUND_1))
     	{
       		Snd_out(BGM2_SOUND_2) ;
       		sound_no = BGM2_SOUND_2 ;
     	}
     	else if((sound_prc_F == 0)&&(sound_no == BGM2_SOUND_2))
     	      sound_no = BGM_NO;
     	
  	 }
   }
   else if((ac_mode == 0)&&(yn_mode>3)&&((sound_no ==0)||(sound_no == 4)||(sound_no == 8)||(sound_no == 10)))
   {
   		sound_no = BGM_NO ;
   		Snd_out(BGM_NO) ;
   }
 }

⌨️ 快捷键说明

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