Example #1
0
void time_print(TIME time)
{
  char buf[17];

  my_itoa(buf,time.hour);
  print_zero(time.hour);
  lcd_printstr(buf);
  lcd_printch(':');

  my_itoa(buf,time.minute);
  print_zero(time.minute);
  lcd_printstr(buf);
  lcd_printch(':');

  my_itoa(buf,time.second);
  print_zero(time.second);
  lcd_printstr(buf);
}
Example #2
0
//右詰めに数値を3桁ごとにコンマを挿入して表示
void lcd_print_num(int num) {
	char tmp[33];
	int i;

	num_conma(tmp, num);

	for (i = 0; tmp[i] != '\0'; i++)
		;

	//表示座標を右端から文字数分引いたところから始める(右詰め)
	lcd_cursor(16 - i, 0);
	lcd_printstr(tmp);
}
Example #3
0
void stop_watch_print(TIME time)
{
  char buf[17];

  my_itoa(buf,time.hour);
  print_zero(time.hour);
  lcd_printstr(buf);
  lcd_printch(':');

  my_itoa(buf,time.minute);
  print_zero(time.minute);
  lcd_printstr(buf);
  lcd_printch(':');

  my_itoa(buf,time.second);
  print_zero(time.second);
  lcd_printstr(buf);

  my_itoa(buf,time.msec/10);
  lcd_printch('.');
  print_zero(time.msec/10);
  lcd_printstr(buf);
}
Example #4
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);      /* スピーカーオフ   */
}
Example #5
0
unsigned char  menu(void)
     /* LCD にメニューを書いて動作を選択するための関数 */
     /* 戻り値は入力キー情報                           */
{
  /* キー入力取得のための変数を宣言する */
  unsigned char cf, key_data;

  lcd_cursor(0,0);                   /* LCD にメッセージ表示 */
  lcd_printstr("Rec:[*] Play:[#]");
  lcd_cursor(0,1);
  lcd_printstr(" Push * or # key");

  /* キー入力判定用変数の初期化 */
  cf = 0;
  key_data = 0;


	char old_data=0;

  while (cf == 0 ){  /* キー入力するまでループする */
    /* ここにキー入力の処理を記述する */

		/* ここから追記 */
		key_data = 0;

		//key 1,2,3
		PADR = 0x07; // PA3 = L
		cf = P6DR;   // データ入力
		cf = ~cf;    // cfの反転
		cf &= 0x07;  // P60,1,2のみ見る

		switch(cf) {
			case 1 : key_data = '1'; break;
			case 2 : key_data = '2'; break;
			case 4 : key_data = '3'; break;
		}  

		//key 4,5,6
		PADR = 0x0b;
		cf = P6DR;
		cf = ~cf;
		cf &= 0x07;
		switch(cf) {
			case 1 : key_data = '4'; break;
			case 2 : key_data = '5'; break;
			case 4 : key_data = '6'; break;
		}  

		//key 7,8,9
		//PADR = 0x0b; /* This is a mistake code. */
		PADR = 0x0d;
		cf = P6DR;
		cf = ~cf;
		cf &= 0x07;
		switch(cf) {
			case 1 : key_data = '7'; break;
			case 2 : key_data = '8'; break;
			case 4 : key_data = '9'; break;
		}  

		//key *,0,#
		PADR = 0x0e;
		cf = P6DR;
		cf = ~cf;
		cf &= 0x07;
		switch(cf) {
			case 1 : key_data = '*'; break;
			case 2 : key_data = '0'; break;
			case 4 : key_data = '#'; break;
		}  

		//チャタリング防止
		if(key_data != 0 && old_data != key_data){
			sleep_ms(10);
			old_data = key_data;
		}
		if(key_data == 0){
			old_data = 0;
			sleep_ms(10);
		}

		/* ここまで追記 */
	  
    /* ◎key *,# のみの入力に対応させる処理を記述する */

		/*追記*/
		if(key_data == '*' || key_data == '5' || key_data == '#')
			cf = 1;
		/*ここまで*/
  }

  /* 入力されたキーの情報を返す */
  return key_data;
}
Example #6
0
int main(void)
{
  unsigned int score, high_score;
  char score_s[MAXDIGITNUM+1];

  ROMEMU();
  USE_UI();
  timer_pri_set(0,1);
  random_init();
  lcd_init();
  key_init();
  timer_init();
  sound_init();
  timer_set(1,100);
  timer_start(1);
  ENINT();

  lcd_cursor(0,0);
  lcd_printstr(" 0:Game Start   ");
  lcd_cursor(0,1);
  lcd_printstr(" *:High Score   ");
  high_score = 0;

  lcd_cursor(0,0);

  while(1)
  {
    if (key_check(10) == KEYON){     /* *キー:ハイスコア表示 */
      lcd_cursor(0,0);                   /* LCD にハイスコア表示 */
      lcd_printstr(" High Score is  ");
      lcd_cursor(0,1);
      lcd_printstr("                ");
      lcd_cursor(0,1);
      lcd_printstr(ntos(high_score,score_s));
    }
    if (key_check(10) == KEYOFF){
      lcd_cursor(0,0);
      lcd_printstr(" 0:Game Start   ");
      lcd_cursor(0,1);
      lcd_printstr(" *:High Score   ");
    }
    if (key_check(11) == KEYON){      /* 0キー:ゲームスタート */
	  zanki = 5;
      lcd_cursor(0,0);                   /* LCD に操作方法表示 */
      lcd_printstr("*:Sight  0:Trig.");
      score = game_start();              /* ゲームスタート */
      lcd_cursor(0,1);                   /* 得点表示欄のクリア */
      lcd_printstr("                ");
      if (score > high_score){           /* ハイスコアのとき */
        high_score = score;                /* ハイスコア登録 */
        lcd_cursor(0,0);                   /* ハイスコア表示 */
        lcd_printstr(" High Score !!! ");
        lcd_cursor(0,1);
        lcd_printstr(ntos(high_score,score_s));
      } else {                           /* ハイスコアでないとき*/
        lcd_cursor(0,0);                   /* スコアを表示 */
        lcd_printstr(" Your Score ... ");
        lcd_cursor(0,1);
        lcd_printstr(ntos(score,score_s));
      }
      n_time = 0;
      while (n_time < WAITFEWSEC);       /* 得点表示後にちょっと待つ */
      lcd_cursor(0,0);                     /* LCD にメッセージ表示 */
      lcd_printstr(" 0:Game Start   ");
      lcd_cursor(0,1);
      lcd_printstr(" *:High Score   ");
    }
  }
}
Example #7
0
int game_start(void)
{
  int target, score, gameover, hit, i, j;
  int prev_key10, prev_key11, key10, key11;
  unsigned int ds;
  char t, nc;
  char disp[MAXINVNUM+1]; /* [0: 1234567890n] のような画面イメージ */

  /*  照準,区切り,インベーダとUFO */
  target = 0; t = '0'; score = 0;     /* 照準とスコアの初期化 */
  speed_count = 0; speed = INITSPEED; /* プレイ速度の初期化 */
  shift_flag = FALSE;                 /* 敵の前進フラグの初期化 */
  disp[0] = '0'; disp[1] = ':';       /* 表示フィールドの初期化 */
  for (i = 2; i < MAXINVNUM; i++) disp[i] = ' ';
  disp[MAXINVNUM] = '\0';
  gameover = FALSE;       /* ゲーム終了フラグの初期化 */
  key10 = key_check(10);  /* キーバッファ(照準キー)の初期化 */
  prev_key10 = KEYOFF;
  key11 = key_check(11);  /* キーバッファ(発射キー)の初期化 */
  prev_key11 = KEYOFF;
  lcd_cursor(0,1);        /* 初期画面の表示 */
  lcd_printstr(disp);
  while (gameover == FALSE){ /* ゲームオーバでなければループ */
    /* キーの立上りを検出するための前回チェック時のキー状態を記憶 */
    /* キーバッファ(照準キー)処理 */
    if (key10 != KEYTRANS) prev_key10 = key10; /* 遷移中は前々回の値そのまま */
    key10 = key_check(10);
    /* キーバッファ(発射キー)処理 */
    if (key11 != KEYTRANS) prev_key11 = key11; /* 遷移中は前々回の値そのまま */
    key11 = key_check(11);
    if ((prev_key10 == KEYOFF) && (key10 == KEYON)){
      /* 照準キーが押されたときの処理 */
      /* 照準は 0->1->...->8->9->n->0->... と順に変化する */
      target++;                           /* 照準 +1 */
      if (target > 10) target = 0;        /* UFOの次は0 */
      if (target < 10) t = '0' + target;  /* 照準がUFOでないときのキャラ */
      else t = 'n';                       /* 照準がUFOのときのキャラ */
      disp[0] = t;                        /* 照準値を表示にセット */
      effect('t');                        /* 効果音を鳴らす */
      /* フィールドの表示 */
      lcd_cursor(0,1);
      lcd_printstr(disp);
    }
    if ((prev_key11 == KEYOFF) && (key11 == KEYON)){
      /* 発射キーが押されたときの処理 */
      hit = FALSE;  /* ヒット判定フラグの初期化 */
      i = 2;        /* 最も左の敵表示位置 */
      while ((i < MAXINVNUM) && (hit != TRUE)){ /* 列の左から命中を探す */
        if (disp[i] == t){    /* 照準と一致するキャラか? */
          hit = TRUE;           /*   ヒット判定 */
          ds = MAXINVNUM - i;   /*   基本得点の計算(砲台に近い程大) */
          score = score + ds;   /*   得点追加 */
          if (target > 9) score = score + ds * 2;  /* UFOなら3倍の得点 */
          for (j = i; j > 2; j--) disp[j] = disp[j-1];  /* 命中左側を右寄せ */
          disp[2] = ' ';        /* 最も左は常に空白を詰める */
          /* フィールドの表示 */
          lcd_cursor(0,1);
          lcd_printstr(disp);
        }
        i++;  /* 探索位置を +1 */
      } /* ヒット判定があるか右端まで調べたら, 探索終了 */
      if (hit == TRUE) effect('s'); /* 命中時の効果音 */
      else
	  {
		/* Add 3-1 */
		zanki--; /* get damage */
		effect('m');             /* 失敗時の効果音 */
	  }
    }
    /* 敵が前進するタイミングのときの処理 */
    if (shift_flag == TRUE){          /* 前進フラグが立っているなら */
      if (disp[2] != ' ') disp[1] = disp[2]; /* 侵略時のみ区切りに侵入 */
      for (i = 2; i < MAXINVNUM; i++)   /* 敵全体を左に1つシフト */
        disp[i] = disp[i + 1];
      if (score % 10 == 1) nc = 'n';    /* スコアの最下位が1ならUFO出現 */
      else nc = (random() % 10) + '0';  /* それ以外はランダムな数字 */
      disp[MAXINVNUM - 1] = nc;         /* 右端に新キャラを入れる */
      shift_flag = FALSE;               /* 前進フラグの消去 */
      lcd_cursor(0,1);                  /* フィールドの表示 */
      lcd_printstr(disp);
    }

	/* Modify 3-1 */
    if (disp[1] != ':')
	{
	  zanki--;
	  score += game_start();
	}

	if(zanki==0)
	{
	  gameover = TRUE;
	}
  }
  return score; /* 得点を返す */
}