チーム2017

課題名

きらきら星(歌詞・キラキラLED付き)

研究者名

Kazumi Kayajima
Taiki Kurashima

概要

timer_pwm2,hello_worldなどの実習やチーム1823もとにきらきら星の歌詞をLCDに表示させながらスピーカーで流す。
また、lab2_pwm_lcdの実習をもとにLEDを光らせる。

使用機材

PSoC MiniProg
PSoC基盤
スピーカー
USBケーブル

ソースコード

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125;// Pulse Width
int SILENT=0, D=229, L=204, M=182, F=172, S=153, R=136;
int TC=0; //Time Count

void myISR(void) {
  TC += 1; //TC = TC +1
   PWM16_1_WritePulseWidth(PW);
   if(TC == 1) {
       LCD_1_Init();
       LCD_1_PrCString("kirakirahikaru");
       LCD_1_Position(1,0);
       LCD_1_PrCString("osoranohoshiyo");
       PWM16_1_WritePeriod(D);
   }
   else if(TC == 3)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 4) 
       PWM16_1_WritePeriod(D);
   else if(TC == 6)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 7) 
       PWM16_1_WritePeriod(S);
   else if(TC == 9)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 10) 
       PWM16_1_WritePeriod(S);
   else if(TC == 12)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 13)
       PWM16_1_WritePeriod(R);
   else if(TC == 15)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 16) 
       PWM16_1_WritePeriod(R);
   else if(TC == 18)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 19)
       PWM16_1_WritePeriod(S);
   else if(TC == 24)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 25) {
       LCD_1_Init();
       LCD_1_PrCString("osoranohoshiyo");
       LCD_1_Position(1,0);
       LCD_1_PrCString("mabatakishiteha");
       PWM16_1_WritePeriod(F);    
   }
   else if(TC == 27)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 28)
       PWM16_1_WritePeriod(F);    
   else if(TC == 30)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 31) 
       PWM16_1_WritePeriod(M);
   else if(TC == 33)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 34)
       PWM16_1_WritePeriod(M);
   else if(TC == 36)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 37)
       PWM16_1_WritePeriod(L);
   else if(TC == 39)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 40)
       PWM16_1_WritePeriod(L);
   else if(TC == 42)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 43)
       PWM16_1_WritePeriod(D);
   else if(TC == 48) 
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 49){
       LCD_1_Init();
       LCD_1_PrCString("mabatakishiteha");
       LCD_1_Position(1,0);
       LCD_1_PrCString("minnnawomiteru");
       PWM16_1_WritePeriod(S);
   }
   else if(TC == 51)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 52) 
       PWM16_1_WritePeriod(S);
   else if(TC == 54)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 55) 
       PWM16_1_WritePeriod(F);
   else if(TC == 57)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 58) 
       PWM16_1_WritePeriod(F);
   else if(TC == 60)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 61)
       PWM16_1_WritePeriod(M);
   else if(TC == 63)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 64) 
       PWM16_1_WritePeriod(M);
   else if(TC == 66)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 67)
       PWM16_1_WritePeriod(L);    
   else if(TC == 72)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 73){
       LCD_1_Init();
       LCD_1_PrCString("minnnawomiteru");
       LCD_1_Position(1,0);
       LCD_1_PrCString("kirakirahikaru");
       PWM16_1_WritePeriod(S);
   }
   else if(TC == 75)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 76) 
       PWM16_1_WritePeriod(S);
   else if(TC == 78)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 79) 
       PWM16_1_WritePeriod(F);
   else if(TC == 81)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 82) 
       PWM16_1_WritePeriod(F);
   else if(TC == 84)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 85)
       PWM16_1_WritePeriod(M);
   else if(TC == 87)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 88) 
       PWM16_1_WritePeriod(M);
   else if(TC == 90)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 91)
       PWM16_1_WritePeriod(L);
   else if(TC == 96)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 97){
       LCD_1_Init();
       LCD_1_PrCString("kirakirahikaru");
       LCD_1_Position(1,0);
       LCD_1_PrCString("osoranohoshiyo");
       PWM16_1_WritePeriod(D); 
   }
   else if(TC == 99)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 100) 
       PWM16_1_WritePeriod(D);
   else if(TC == 102)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 103) 
       PWM16_1_WritePeriod(S);
   else if(TC == 105)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 106) 
       PWM16_1_WritePeriod(S);
   else if(TC == 108)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 109)
       PWM16_1_WritePeriod(R);
   else if(TC == 111)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 112) 
       PWM16_1_WritePeriod(R);
   else if(TC == 114)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 115)
       PWM16_1_WritePeriod(S);    
   else if(TC == 120)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 121){
       LCD_1_Init();
       LCD_1_PrCString("osoranohoshiyo");
       PWM16_1_WritePeriod(F);    
   }
   else if(TC == 123)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 124)
       PWM16_1_WritePeriod(F);    
   else if(TC == 126)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 127) 
       PWM16_1_WritePeriod(M);
   else if(TC == 129)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 130)
       PWM16_1_WritePeriod(M);
   else if(TC == 132)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 133)
       PWM16_1_WritePeriod(L);
   else if(TC == 135)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 136)
       PWM16_1_WritePeriod(L);
   else if(TC == 138)
       PWM16_1_WritePeriod(SILENT);
   else if(TC == 139)
       PWM16_1_WritePeriod(D);
   else if(TC == 144)
       PWM16_1_WritePeriod(SILENT);
}

void main()
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   PWM8_1_Start();
   PWM8_2_Start();
   M8C_EnableGInt;
   PWM16_1_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();
   while(1)
       { };
}

考察

この問題を進める中で起こった問題はLCDで歌詞を表示させる際に日本語で出力できなかったこと。日本語で出力しようとすると文字化けして正しく出力されなかった。この原因を突き止めることはできなかったためローマ字で出力することにした。
あとは同じ音階が2音続くときに2つの音がくっついて出力されてしまうこと。この問題については1音ごとにSILENTを付け足したことによって解決した。しかしこの対処法は1個1個打ち込むのに時間がかかるというデメリットがあった。より簡単に対処できる方法があったのかもしれない。

またLEDで発光させてキラキラを表現させるためにlab2_pwm_lcdを参考にして作った。しかしLEDの出力が完成して結果を確認してみるとlab2_pwm_lcdの時よりも速く点滅していることに気づいた。それが不思議に思いlab2_pwm_lcdの時と比べてみるとVC2を演奏用に周波数を小さくしていたことが原因だった。

  • 最終更新:2020-06-02 16:54:57

このWIKIを編集するにはパスワード入力が必要です

認証パスワード