/*===========================================================================*/ /* */ /* Fei Wihardjo */ /* Joshua Wong */ /* CS122A - Final Project: Music Synthesizer */ /* */ /*===========================================================================*/ #pragma SMALL DB OE #include #include "io.h" /* P0^1 option1 = pin22:p3^5 op1 P0^2 option2 = pin66:p1^6 op2 P0^3 option3 = pin70:p1^5 op3 P0^4 option4 = pin77:p1^4 op4 P0^5 option5 = pin12:p3^2 op5 P0^6 option6 = pin21:p3^3 op6 */ sbit MSs1 = P0^1; sbit MSs2 = P0^2; sbit MSs3 = P0^3; sbit MSs4 = P0^4; sbit MSs5 = P0^5; sbit MSs6 = P0^6; const char conv_table[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'y', 1, 2, 3, 'n', '*', 4, '#', 0 }; const char CreateSong = 1, SongLib = 2, Quit = '*', EnterNote = 1, PlayBack = 2, ClrHist = 3, FirstOct = 1, SecondOct = 2, ThirdOct = 3, Yes = 'y', No = 'n'; int B1[5] = {1, 1, 1, 1, 1}; int B2[5] = {1, 1, 1, 1, 1}; int B3[5] = {1, 1, 1, 1, 1}; int B4[5] = {1, 1, 1, 1, 1}; int B5[5] = {1, 1, 1, 1, 1}; int B6[5] = {1, 1, 1, 1, 1}; int NI; int NIMax = 5; /*===========================================================================*/ void Delay () { int i, j; for(i=0; i<400; i++) for(j=0; j<400; j++) i = i + 0; } /*===========================================================================*/ void ClkCycle () { int i, j; for(i=0; i<10; i++) for(j=0; j<10; j++) i = i + 0; } /*===========================================================================*/ unsigned char key_scan() { unsigned char i, j; while(1) { for (i = 0; i < 4; i++) { P1=0xff & ~(1<= NIMax) { GotoXY (0,0); PrintString ("Buffer I"); GotoXY (1,0); PrintString ("s Full"); Delay (); ClearScreen (); return; } do { GotoXY (0,0); PrintString ("Enter Oc"); GotoXY (1,0); PrintString ("tave..."); Delay (); ClearScreen (); GotoXY (0,0); PrintString ("(1,2,3):"); GotoXY (1, 0); Octave = conv_table[key_scan ()]; Delay (); ClearScreen (); if (Octave != FirstOct && Octave != SecondOct && Octave != ThirdOct) DisplayErrorMsg (); } while (Octave != FirstOct && Octave != SecondOct && Octave != ThirdOct); Delay (); do { GotoXY (0,0); PrintString ("Sharp(y/"); GotoXY (1,0); PrintString ("n)?: "); SharpFlag = conv_table[key_scan ()]; Delay (); ClearScreen (); if (SharpFlag != Yes && SharpFlag != No) DisplayErrorMsg (); } while (SharpFlag != Yes && SharpFlag != No); Delay (); do { GotoXY (0,0); PrintString ("Enter No"); GotoXY (1,0); PrintString ("te: "); Note = conv_table[key_scan ()]; Delay (); ClearScreen (); if (Note != 'a' && Note != 'b' && Note != 'c' && Note != 'd' && Note != 'e' && Note != 'f' && Note != 'g') DisplayErrorMsg (); } while (Note != 'a' && Note != 'b' && Note != 'c' && Note != 'd' && Note != 'e' && Note != 'f' && Note != 'g'); Delay (); if (Octave == FirstOct && SharpFlag == No && Note == 'a') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == Yes && Note == 'a') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 1;} else if (Octave == FirstOct && SharpFlag == No && Note == 'b') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == No && Note == 'c') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 1;} else if (Octave == FirstOct && SharpFlag == Yes && Note == 'c') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 1; B5[NI] = 0; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == No && Note == 'd') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 1; B5[NI] = 0; B6[NI] = 1;} else if (Octave == FirstOct && SharpFlag == Yes && Note == 'd') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 1; B5[NI] = 1; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == No && Note == 'e') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 0; B4[NI] = 1; B5[NI] = 1; B6[NI] = 1;} else if (Octave == FirstOct && SharpFlag == No && Note == 'f') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 0; B5[NI] = 0; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == Yes && Note == 'f') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 0; B5[NI] = 0; B6[NI] = 1;} else if (Octave == FirstOct && SharpFlag == No && Note == 'g') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 0; B5[NI] = 1; B6[NI] = 0;} else if (Octave == FirstOct && SharpFlag == Yes && Note == 'g') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 0; B5[NI] = 1; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == No && Note == 'a') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 1; B5[NI] = 0; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == Yes && Note == 'a') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 1; B5[NI] = 0; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == No && Note == 'b') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 1; B5[NI] = 1; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == No && Note == 'c') {B1[NI] = 0; B2[NI] = 0; B3[NI] = 1; B4[NI] = 1; B5[NI] = 1; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == Yes && Note == 'c') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == No && Note == 'd') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == Yes && Note == 'd') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == No && Note == 'e') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == No && Note == 'f') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 1; B5[NI] = 0; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == Yes && Note == 'f') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 1; B5[NI] = 0; B6[NI] = 1;} else if (Octave == SecondOct && SharpFlag == No && Note == 'g') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 1; B5[NI] = 1; B6[NI] = 0;} else if (Octave == SecondOct && SharpFlag == Yes && Note == 'g') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 0; B4[NI] = 1; B5[NI] = 1; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'a') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 0; B5[NI] = 0; B6[NI] = 0;} else if (Octave == ThirdOct && SharpFlag == Yes && Note == 'a') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 0; B5[NI] = 0; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'b') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 0; B5[NI] = 1; B6[NI] = 0;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'c') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 0; B5[NI] = 1; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == Yes && Note == 'c') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 1; B5[NI] = 0; B6[NI] = 0;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'd') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 1; B5[NI] = 0; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == Yes && Note == 'd') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 1; B5[NI] = 1; B6[NI] = 0;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'e') {B1[NI] = 0; B2[NI] = 1; B3[NI] = 1; B4[NI] = 1; B5[NI] = 1; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'f') {B1[NI] = 1; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 0;} else if (Octave == ThirdOct && SharpFlag == Yes && Note == 'f') {B1[NI] = 1; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 0; B6[NI] = 1;} else if (Octave == ThirdOct && SharpFlag == No && Note == 'g') {B1[NI] = 1; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 0;} else {B1[NI] = 1; B2[NI] = 0; B3[NI] = 0; B4[NI] = 0; B5[NI] = 1; B6[NI] = 1;} NI++; } /*===========================================================================*/ void PlayBackBuffer () { int i = 0; if (NI == 0) { GotoXY (0,0); PrintString ("No Note "); GotoXY (1,0); PrintString ("To Play"); Delay (); ClearScreen (); return; } MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 1; MSs5 = 1; MSs6 = 1; for (i = 0; i < NI; i++) { MSs1 = B1[i]; MSs2 = B2[i]; MSs3 = B3[i]; MSs4 = B4[i]; MSs5 = B5[i]; MSs6 = B6[i]; ClkCycle (); } MSs1 = 1; MSs2 = 1; MSs3 = 1; MSs4 = 1; MSs5 = 1; MSs6 = 1; ClkCycle (); } /*===========================================================================*/ void ClearHistory () { NI = 0; } /*===========================================================================*/ void main () { char Option; InitIO (); IntroDisplay (); NI = 0; MSs1 = 1; MSs2 = 1; MSs3 = 1; MSs4 = 1; MSs5 = 1; MSs6 = 1; while (1) { do { MainMenu (); Option = conv_table[key_scan()]; ClearScreen (); if (Option != CreateSong && Option != SongLib && Option != Quit) DisplayErrorMsg (); } while (Option != CreateSong && Option != SongLib && Option != Quit); if (Option == CreateSong) { do { do { CreateSongMenu(); Option = conv_table[key_scan ()]; Delay (); ClearScreen (); if (Option != EnterNote && Option != PlayBack && Option != ClrHist && Option != Quit) DisplayErrorMsg (); } while (Option != EnterNote && Option != PlayBack && Option != ClrHist && Option != Quit); if (Option == EnterNote) NoteSelect (); else if (Option == PlayBack) PlayBackBuffer (); else if (Option == ClrHist) ClearHistory (); } while (Option != Quit); Option = 0; } else if (Option == SongLib) { do { SongLibMenu (); Option = conv_table[key_scan ()]; Delay (); ClearScreen (); if (Option != 1 && Option != 2 && Option != 3 && Option != 4) DisplayErrorMsg (); } while (Option != 1 && Option != 2 && Option != 3 && Option != 4); GotoXY (0,0); PrintString ("Playing "); GotoXY (1,0); PrintString ("Song..."); Delay (); ClearScreen (); MSs1 = 1; MSs2 = 1; MSs3 = 1; MSs4 = 0; MSs5 = 0; MSs6 = 0; ClkCycle (); if (Option == 1) {MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 0; MSs5 = 0; MSs6 = 1;} else if (Option == 2) {MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 0; MSs5 = 1; MSs6 = 0;} else if (Option == 3) {MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 0; MSs5 = 1; MSs6 = 1;} else {MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 1; MSs5 = 0; MSs6 = 0;} ClkCycle (); ClkCycle (); while (MSs1 != 0 && MSs2 != 0 && MSs3 != 0 && MSs4 != 0 && MSs5 != 0 && MSs6 != 0) {ClkCycle ();} } GotoXY (0,0); PrintString ("End"); } }