/*===========================================================================*/ /* */ /* Fei Wihardjo */ /* Joshua Wong */ /* CS122A - Final Project: Music Synthesizer */ /* */ /*===========================================================================*/ #pragma SMALL #include sbit MSs1 = P3^5; sbit MSs2 = P1^6; sbit MSs3 = P1^5; sbit MSs4 = P1^4; sbit MSs5 = P3^2; sbit MSs6 = P3^3; /* 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 */ /*===========================================================================*/ /* octave 1 */ #define F1_A 0x00 #define F1_AS 0x01 #define F1_B 0x02 #define F1_C 0x03 #define F1_CS 0x04 #define F1_D 0x05 #define F1_DS 0x06 #define F1_E 0x07 #define F1_F 0x08 #define F1_FS 0x09 #define F1_G 0x0a #define F1_GS 0x0b /* octave 2 */ #define F2_A 0x10 #define F2_AS 0x11 #define F2_B 0x12 #define F2_C 0x13 #define F2_CS 0x14 #define F2_D 0x15 #define F2_DS 0x16 #define F2_E 0x17 #define F2_F 0x18 #define F2_FS 0x19 #define F2_G 0x1a #define F2_GS 0x1b /* octave 3 */ #define F3_A 0x30 #define F3_AS 0x31 #define F3_B 0x32 #define F3_C 0x33 #define F3_CS 0x34 #define F3_D 0x35 #define F3_DS 0x36 #define F3_E 0x37 #define F3_F 0x38 #define F3_FS 0x39 #define F3_G 0x3a #define F3_GS 0x3b /* no sound */ #define F_NO 0xff /*===========================================================================*/ #define TEMPO_ELEVATOR 10000 #define TEMPO_SLOW 9000 #define TEMPO_FAST 7000 #define TEMPO_ROCKNROLL 5000 /*===========================================================================*/ #define D_WHOLE 8 #define D_HALFDOT 6 #define D_HALF 4 #define D_QUARTERDOT 3 #define D_QUARTER 2 #define D_EIGHT 1 /*===========================================================================*/ unsigned char xdata PLAY_REG _at_ 0xff00; /*===========================================================================*/ /* Nowhere Man */ const unsigned char code NoWhereMan[][2] = { { F2_D, D_QUARTER }, { F2_D, D_QUARTER }, { F2_G, D_HALF }, { F2_FS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_HALF }, { F2_C, D_QUARTER }, { F2_C, D_QUARTER }, { F2_E, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_B, D_HALF }, { F2_A, D_QUARTER }, { F2_A, D_QUARTER }, { F2_C, D_QUARTER }, { F2_C, D_QUARTER }, { F2_B, D_QUARTER }, { F2_A, D_QUARTER }, { F1_G, D_QUARTER }, { F2_A, D_QUARTER }, { F1_G, D_QUARTER }, { F2_A, D_QUARTER }, { F1_G, D_HALF }, { F1_G, D_WHOLE }, { F2_D, D_QUARTER }, { F2_D, D_QUARTER }, { F2_G, D_QUARTER }, { F2_G, D_QUARTER }, { F2_FS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_HALF }, { F2_C, D_QUARTER }, { F2_C, D_QUARTER }, { F2_E, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_B, D_HALF }, { F2_A, D_QUARTER }, { F2_A, D_QUARTER }, { F2_C, D_QUARTER }, { F2_C, D_QUARTER }, { F2_B, D_QUARTER }, { F2_A, D_QUARTER }, { F1_G, D_QUARTER }, { F2_A, D_QUARTER }, { F1_G, D_WHOLE }, { F1_G, D_HALF }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_D, D_HALFDOT }, { F2_E, D_QUARTER }, { F1_G, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_D, D_HALF }, { F2_D, D_QUARTER }, { F2_E, D_QUARTER }, { F1_G, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_D, D_HALFDOT }, { F2_D, D_QUARTER }, { F2_G, D_QUARTER }, { F2_FS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_D, D_HALF }, { F2_D, D_WHOLE } }; /* Fur Elise */ const unsigned char code FurElise[][2] = { { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_A, D_HALF }, { F1_C, D_QUARTER }, { F1_E, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_HALF }, { F1_E, D_QUARTER }, { F1_GS, D_QUARTER }, { F2_B, D_QUARTER }, { F2_C, D_HALF }, { F1_E, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_A, D_HALF }, { F1_C, D_QUARTER }, { F1_E, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_HALF }, { F1_E, D_QUARTER }, { F1_GS, D_QUARTER }, { F2_B, D_QUARTER }, { F2_A, D_HALF }, { F2_B, D_QUARTER }, { F2_C, D_QUARTER }, { F2_D, D_QUARTER }, { F2_E, D_HALFDOT }, { F1_G, D_QUARTER }, { F2_F, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_HALFDOT }, { F1_F, D_QUARTER }, { F2_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_HALFDOT }, { F1_E, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_B, D_HALF }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_A, D_HALF }, { F1_C, D_QUARTER }, { F1_E, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_HALF }, { F1_E, D_QUARTER }, { F1_GS, D_QUARTER }, { F2_B, D_QUARTER }, { F2_C, D_HALF }, { F1_E, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_DS, D_QUARTER }, { F2_E, D_QUARTER }, { F2_B, D_QUARTER }, { F2_D, D_QUARTER }, { F2_C, D_QUARTER }, { F2_A, D_HALF }, { F1_C, D_QUARTER }, { F1_E, D_QUARTER }, { F2_A, D_QUARTER }, { F2_B, D_HALF }, { F1_E, D_QUARTER }, { F1_GS, D_QUARTER }, { F2_B, D_QUARTER }, { F2_A, D_HALF } }; /* "Air" From Mozart */ const unsigned char code Air[][2] = { { F2_CS, D_QUARTERDOT }, { F2_D, D_EIGHT }, { F2_CS, D_QUARTERDOT }, { F2_E, D_HALF }, { F2_E, D_QUARTER }, { F2_B, D_QUARTERDOT }, { F2_CS, D_EIGHT }, { F2_B, D_QUARTER }, { F2_D, D_HALF }, { F2_D, D_QUARTER }, { F2_A, D_HALF }, { F2_A, D_QUARTER }, { F2_B, D_HALF }, { F2_B, D_QUARTER }, { F2_CS, D_HALF }, { F2_D, D_QUARTER }, { F2_CS, D_HALF }, { F2_B, D_QUARTER }, { F2_CS, D_QUARTERDOT }, { F2_D, D_EIGHT }, { F2_CS, D_QUARTERDOT }, { F2_E, D_HALF }, { F2_E, D_QUARTER }, { F2_B, D_QUARTERDOT }, { F2_CS, D_EIGHT }, { F2_B, D_QUARTER }, { F2_D, D_HALF }, { F2_D, D_QUARTER }, { F2_A, D_HALF }, { F2_B, D_QUARTER }, { F2_CS, D_HALF }, { F2_D, D_QUARTER }, { F2_CS, D_HALF }, { F2_B, D_QUARTER }, { F2_A, D_HALFDOT } }; /* Silent Night */ const unsigned char code SilentNight[][2] = { { F1_G, D_QUARTERDOT }, { F2_A, D_EIGHT }, { F1_G, D_QUARTER }, { F1_E, D_HALFDOT }, { F1_G, D_QUARTERDOT }, { F2_A, D_EIGHT }, { F1_G, D_QUARTER }, { F1_E, D_HALFDOT }, { F2_D, D_HALF }, { F2_D, D_QUARTER }, { F2_B, D_HALFDOT }, { F2_C, D_HALF }, { F2_C, D_QUARTER }, { F2_G, D_HALFDOT }, { F2_A, D_HALF }, { F2_A, D_QUARTER }, { F2_C, D_QUARTERDOT }, { F2_B, D_EIGHT }, { F2_A, D_QUARTER }, { F1_G, D_QUARTERDOT }, { F2_A, D_EIGHT }, { F1_G, D_QUARTER }, { F1_E, D_HALF }, { F2_A, D_HALF }, { F2_A, D_QUARTER }, { F2_C, D_QUARTERDOT }, { F2_B, D_EIGHT }, { F2_A, D_QUARTER }, { F1_G, D_QUARTERDOT }, { F2_A, D_EIGHT }, { F1_G, D_QUARTER }, { F1_E, D_HALF }, { F2_D, D_HALF }, { F2_D, D_QUARTER }, { F2_F, D_QUARTER }, { F2_D, D_QUARTER }, { F2_B, D_QUARTER }, { F2_C, D_HALFDOT }, { F2_E, 2*D_HALFDOT }, { F2_C, D_QUARTER }, { F1_G, D_QUARTER }, { F1_E, D_QUARTER }, { F1_G, D_QUARTER }, { F1_F, D_QUARTER }, { F1_D, D_QUARTER }, { F1_C, D_WHOLE } }; /*===========================================================================*/ 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; } /*===========================================================================*/ void Duration (int tempo, int delay) { static cnt; int i, j; for(i=0; i= 5)) { PLAY_REG = F_NO; Duration(tempo, D_WHOLE); break; } } } else if (MSs1 == 1 && MSs2 == 1 && MSs3 == 1 && MSs4 == 0 && MSs5 == 0 && MSs6 == 0) { ClkCycle (); if (MSs1 == 0 && MSs2 == 0 && MSs3 == 0 && MSs4 == 0 && MSs5 == 0 && MSs6 == 1) { PlayNoWhereMan (); } else if (MSs1 == 0 && MSs2 == 0 && MSs3 == 0 && MSs4 == 0 && MSs5 == 1 && MSs6 == 0) { PlayFurElise (); } else if (MSs1 == 0 && MSs2 == 0 && MSs3 == 0 && MSs4 == 0 && MSs5 == 1 && MSs6 == 1) { PlayAir (); } else { PlaySilentNight (); } MSs1 = 0; MSs2 = 0; MSs3 = 0; MSs4 = 0; MSs5 = 0; MSs6 = 0; ClkCycle (); MSs1 = 1; MSs2 = 1; MSs3 = 1; MSs4 = 1; MSs5 = 1; MSs6 = 1; } } }