Esempio n. 1
0
void int_imia0(void)
     /* 音程を出すための割り込みハンドラ */
     /* 使用する大域変数と役割は以下の通り */
     /*   timer0_count は割り込み回数を数えるカウンタ */
     /*   play_cont は指定音長になるときの割り込み回数 */
     /*   da_amp はD/Aの出力上限値  */
{
  /* ここで、割り込み回数をインクリメントする */

  timer0_count++;

  /* ここで、割り込みがかかる度にD/Aの出力を上限値か下限値に切替える */

  if(timer0_count&0x01)
  {
	da_out(0,da_amp);
  }
  else
  {
	da_out(0,0);
  }

  /* ここで、タイマカウントが音長カウントに達したらタイマストップする */
  /* タイマストップしたら割り込みはかからなくなる */

  if(timer0_count>=play_count)
  {
	timer_stop(0);
	da_out(0,0);
  }

  /* 再びタイマ割り込みを使用するために必要な操作      */
  timer_intflag_reset(0);  /* タイマ0の割り込みフラグをクリア */
  ENINT();                 /* CPUを割り込み許可状態に */
}
Esempio n. 2
0
void sample_replay(int mode)
     /* 録音または再生を行う関数 */
     /*   mode: PLAY, SAMPLE     */
{
   bufptr = 0;                             /* バッファポインタを初期化  */
	 if (mode == PLAY){                      /* 再生モードの処理 */
    /* ここにスピーカをスピーカとして使用する命令 */
    speaker_switch(SPEAKER);
    lcd_init();
		lcd_cursor(0,0);
		lcd_printstr(" Push * or # key");
		lcd_cursor(0,1);
		lcd_printstr(" Now Playing... ");
		
    /* 音声出力処理内容を記述する */
    while(bufptr <= TIME){            /*   データ出力を繰り返す    */
			da_out( 0, databuf[bufptr]);    /* ◎D/Aにデータを出力    */
			bufptr++;                       /* ◎バッファポインタを +1   */
    }   
  }
  if (mode == INVERSE){                    /* 再生モードの処理 */
    /* ここにスピーカをスピーカとして使用する命令 */
    speaker_switch(SPEAKER);
    lcd_init();
		lcd_cursor(0,0);
		lcd_printstr(" Push * or 5 key");
		lcd_cursor(0,1);
		lcd_printstr(" Now Inverse... ");
		
    /* 音声出力処理内容を記述する */
    while(bufptr <= TIME){             /*   データ出力を繰り返す    */
			da_out( 0, databuf[TIME-bufptr]);/* ◎D/Aにデータを出力    */
			bufptr++;                        /* ◎バッファポインタを +1   */
    }   
  }
  if (mode == SAMPLE){                              /* 録音モードの処理 */
    /* ここにスピーカをマイクとして使用する命令 */
    speaker_switch(MIC);
		lcd_init();
		lcd_cursor(0,0);
		lcd_printstr(" Push * or 5 key");
		lcd_cursor(0,1);
		lcd_printstr(" Now Sampling...");
		
    /* 音声取込処理内容を記述する */
    while(bufptr <= TIME){          /*   データ読込を繰り返す     */
			ad_start( 0, 0);              /* ◎A/D変換スタート       */
			while(ADSTATUS() == 0);			  /* ◎A/D変換終了待ち 約5us */
			databuf[bufptr] = ADREAD();	  /* ◎変換データを格納     */
			bufptr++;										  /* ◎バッファポインタを +1    */
    }
  }
  speaker_switch(MIC);      /* スピーカーオフ   */
}
Esempio n. 3
0
void sound(int vol,int div)
{
	speaker_switch(SPEAKER);

	for(;;)
	{
		da_out(0,vol);
		wait1_100ms(div);
		da_out(0,0);
		wait1_100ms(div);
	}
}
Esempio n. 4
0
void int_imia0(void)
{
  if(note_flag==1)
  {
	da_out(0,note_vol);
	note_flag = 0;
  }
  else
  {
	da_out(0,0);
	note_flag = 1;
  }

  timer_intflag_reset(0);
  ENINT();
}
Esempio n. 5
0
void sound_sin(int vol,int div)
{
	unsigned char data[360];
	int wcount;
	int deg;

	speaker_switch(SPEAKER);
	for(;;)
	{
		for(deg=0;deg<360;deg+=16)
		{
			da_out(0,sin_data[deg]);
			for(wcount=div;wcount>0;wcount--);
		}
	}

}