チーム1455
課題名
愛校心あふれるメロディー
研究者名
hitoshi kase
saki kato
概要・仕様
明治大学校歌の1番のみを演奏するオルゴールである。
resetボタンを押すと曲をもう一度流すことが出来る。
resetボタンを押せば何度でも流すことが可能となっている。
使用器具
ジャンパ線×2
スピーカー×1
miniProg×1
PSoC基盤×1
ソースコード
#include <m8c.h>
#include "PSoCAPI.h"
#pragma interrupt_handler myISR
int PW=125;
int SILENT=0,CR=273, CC=243, D=229, L=204, M=182, F=172, S=153, R=136, C=121,
DD=115,DL=103, DM=91, DF=86;
int TC=0;
void myISR(void)
{
TC += 1;
PWM16_1_WritePulseWidth(PW);
if (TC == 1) PWM16_1_WritePeriod(CR); else if(TC == 4) PWM16_1_WritePeriod(L); else if(TC == 5) PWM16_1_WritePeriod(M); else if (TC == 9) PWM16_1_WritePeriod(F); else if(TC == 13) PWM16_1_WritePeriod(S); else if(TC == 17) PWM16_1_WritePeriod(C); else if (TC == 21) PWM16_1_WritePeriod(R); else if(TC == 31) PWM16_1_WritePeriod(L); else if(TC == 35) PWM16_1_WritePeriod(M); else if(TC == 37) PWM16_1_WritePeriod(F); else if (TC == 40) PWM16_1_WritePeriod(R); else if(TC == 41) PWM16_1_WritePeriod(L); else if(TC == 45) PWM16_1_WritePeriod(DL); else if (TC == 49) PWM16_1_WritePeriod(C); else if(TC == 53) PWM16_1_WritePeriod(R);
else if(TC == 61) PWM16_1_WritePeriod(DF); else if(TC == 65) PWM16_1_WritePeriod(DM); else if(TC == 66) PWM16_1_WritePeriod(DL); else if(TC == 70) PWM16_1_WritePeriod(DL); else if(TC == 74) PWM16_1_WritePeriod(DL); else if(TC == 78) PWM16_1_WritePeriod(C); else if (TC == 82) PWM16_1_WritePeriod(DL); else if(TC == 84) PWM16_1_WritePeriod(R); else if(TC == 86) PWM16_1_WritePeriod(F); else if (TC == 94) PWM16_1_WritePeriod(R); else if(TC == 97) PWM16_1_WritePeriod(DL); else if(TC == 98) PWM16_1_WritePeriod(C); else if (TC == 102) PWM16_1_WritePeriod(R); else if(TC == 106) PWM16_1_WritePeriod(F); else if(TC == 110) PWM16_1_WritePeriod(M); else if(TC == 118) PWM16_1_WritePeriod(R); else if(TC == 122) PWM16_1_WritePeriod(DM); else if(TC == 124) PWM16_1_WritePeriod(DL); else if(TC == 132) PWM16_1_WritePeriod(F); else if (TC == 134) PWM16_1_WritePeriod(S); else if(TC == 136) PWM16_1_WritePeriod(R); else if(TC == 138) PWM16_1_WritePeriod(R); else if(TC == 148) PWM16_1_WritePeriod(F); else if (TC == 152) PWM16_1_WritePeriod(S); else if(TC == 154) PWM16_1_WritePeriod(R); else if(TC == 156) PWM16_1_WritePeriod(C); else if (TC == 160) PWM16_1_WritePeriod(DL); else if(TC == 164) PWM16_1_WritePeriod(R); else if(TC == 166) PWM16_1_WritePeriod(S); else if(TC == 170) PWM16_1_WritePeriod(DL); else if (TC == 172) PWM16_1_WritePeriod(DF); else if(TC == 182) PWM16_1_WritePeriod(DM); else if(TC == 186) PWM16_1_WritePeriod(DL); else if (TC == 188) PWM16_1_WritePeriod(R); else if(TC == 192) PWM16_1_WritePeriod(R); else if(TC == 196) PWM16_1_WritePeriod(C); else if (TC == 200) PWM16_1_WritePeriod(R); else if(TC == 204) PWM16_1_WritePeriod(F); else if(TC == 206) PWM16_1_WritePeriod(L); else if (TC == 208) PWM16_1_WritePeriod(M); else if(TC == 216) PWM16_1_WritePeriod(F); else if(TC == 219) PWM16_1_WritePeriod(R); else if (TC == 220) PWM16_1_WritePeriod(DL); else if(TC == 224) PWM16_1_WritePeriod(C); else if(TC == 228) PWM16_1_WritePeriod(R); else if(TC == 240) PWM16_1_WritePeriod(DL); else if (TC == 244) PWM16_1_WritePeriod(C); else if(TC == 248) PWM16_1_WritePeriod(R); else if(TC == 252) PWM16_1_WritePeriod(DL); else if (TC == 260) PWM16_1_WritePeriod(DD); else if(TC == 264) PWM16_1_WritePeriod(C); else if(TC == 267) PWM16_1_WritePeriod(R); else if(TC == 268) PWM16_1_WritePeriod(R); else if (TC == 276) PWM16_1_WritePeriod(C); else if(TC == 280) PWM16_1_WritePeriod(R); else if(TC == 282) PWM16_1_WritePeriod(F); else if (TC == 284) PWM16_1_WritePeriod(S); else if(TC == 286) PWM16_1_WritePeriod(R); else if(TC == 290) PWM16_1_WritePeriod(C); else if (TC == 292) PWM16_1_WritePeriod(S); else if(TC == 296) PWM16_1_WritePeriod(DL); else if(TC == 300) PWM16_1_WritePeriod(R); else if(TC == 304) PWM16_1_WritePeriod(DF); else if (TC == 308) PWM16_1_WritePeriod(DM); else if(TC == 312) PWM16_1_WritePeriod(DL); else if(TC == 315) PWM16_1_WritePeriod(DL); else if (TC == 316) PWM16_1_WritePeriod(DM); else if(TC == 328) PWM16_1_WritePeriod(DL); else if(TC == 331) PWM16_1_WritePeriod(C); else if (TC == 332) PWM16_1_WritePeriod(C); else if(TC == 340) PWM16_1_WritePeriod(R); else if(TC == 344) PWM16_1_WritePeriod(R); else if (TC == 346) PWM16_1_WritePeriod(F); else if(TC == 348) PWM16_1_WritePeriod(S); else if (TC == 350) PWM16_1_WritePeriod(R); else if(TC == 354) PWM16_1_WritePeriod(C); else if(TC == 356) PWM16_1_WritePeriod(R); else if(TC == 360) PWM16_1_WritePeriod(DL); else if (TC == 364) PWM16_1_WritePeriod(R);
else if(TC == 370) PWM16_1_WritePeriod(DL); else if(TC == 374) PWM16_1_WritePeriod(R); else if (TC == 378) PWM16_1_WritePeriod(DF); else if(TC == 381) PWM16_1_WritePeriod(DM); else if(TC == 382) PWM16_1_WritePeriod(DL); else if (TC == 394) PWM16_1_WritePeriod(L); else if(TC == 397) PWM16_1_WritePeriod(DL); else if(TC == 398) PWM16_1_WritePeriod(DL); else if (TC == 406) PWM16_1_WritePeriod(R); else if(TC == 410) PWM16_1_WritePeriod(C); else if(TC == 412) PWM16_1_WritePeriod(R); else if (TC == 414) PWM16_1_WritePeriod(R); else if(TC == 416) PWM16_1_WritePeriod(F); else if(TC == 420) PWM16_1_WritePeriod(L); else if (TC == 422) PWM16_1_WritePeriod(F); else if(TC == 426) PWM16_1_WritePeriod(M); else if(TC == 430) PWM16_1_WritePeriod(L); else if(TC == 438) PWM16_1_WritePeriod(SILENT);
}
void main()
{
M8C_EnableGInt;
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
while(1)
{ };
}
考察
校歌はあらかじめ用意されていた音階では足りなかったため計算し必要な音域を確保した。
愛校心から曲を校歌にしたため、1曲すべてを流すオルゴールを作りたかったが、校歌はとても長いためオルゴールとしてはむいていなかった。
そのため、1番のみにした。
もっと作成時間があり、オルゴールではなくCDとして作れば1曲が可能だったのではないだろうか。
また、音域をもっと広くすれば多くの曲や完全なCDが出来るだろう。
- 最終更新:2014-11-18 16:23:08