チーム1528
課題名
高橋名人にCHALLENGE!!
研究者名
2-15-15 大槻隼也
2-15-19 小澤裕也
概要
ボタン連打ゲーム!!
10秒間にSWボタンを押した回数を表示する。
使用した器具
PSoC1台
ジャンパー線1本
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
#include <stdio.h>
#include <stdlib.h>
#define SW 0b00100000 //スイッチPort1_5
int count = 0; //押した回数の記録
int flag = 0; //スイッチの状態
int TC=0;//タイマーカウント
char line[3];
void myISR(void){
TC += 1;
if(TC==0){
LCD_1_Position(1,0); LCD_1_PrCString("10"); } else if(TC==1){ LCD_1_Position(1,0); LCD_1_PrCString("9"); } else if(TC==2){ LCD_1_Position(1,0); LCD_1_PrCString("8"); } else if(TC==3){ LCD_1_Position(1,0); LCD_1_PrCString("7"); } else if(TC==4){ LCD_1_Position(1,0); LCD_1_PrCString("6"); } else if(TC==5){ LCD_1_Position(1,0); LCD_1_PrCString("5"); } else if(TC==6){ LCD_1_Position(1,0); LCD_1_PrCString("4"); } else if(TC==7){ LCD_1_Position(1,0); LCD_1_PrCString("3"); } else if(TC==8){ LCD_1_Position(1,0); LCD_1_PrCString("2"); } else if(TC==9){ LCD_1_Position(1,0); LCD_1_PrCString("1"); } else if(TC==10){ LCD_1_Position(1,0); LCD_1_PrCString("0"); } }
void main(void)
{
M8C_EnableGInt ; LCD_1_Start(); LCD_1_PrCString("START!"); PRT0DR &= (~SW); Timer16_1_EnableInt(); Timer16_1_Start(); while(1) { if(TC>=10){ break;} if(PRT0DR & SW) { if(flag ==0) { flag = 1; count++; //LCD_1_Position(0,6); //LCD_1_PrCString("SW"); } } else { flag = 0; } } LCD_1_Position(5,0); csprintf(line,"%d",count); LCD_1_PrString(line);
}
考察
タイマーを1秒ごとに進めるために、SysCLKの値からV3の周波数が何Hzか計算し、計算結果をもとにTimerのperiodの値を調節した。また、LCDにカウントダウンの表示をした。また、ボタンを押しっぱなしにしたときにカウントが進まないように、if文でスイッチの状態が0から1に変わったときにだけカウントを進めるようにした。さらに改良できそうな点としては、押した回数によっていろいろな音が鳴るようにしたら、もっとゲームとして面白いものができたと思う。また、PSoCを2台使用して赤外線通信し、対戦することもできるだろう。
- 最終更新:2015-06-16 16:28:08