// Global Variables unsigned char MSG1[20] = "Timer2 Music Box "; const unsigned char A4 = 236; const unsigned char B4 = 210; const unsigned char C5 = 198; const unsigned char D5 = 176; const unsigned char E5 = 157; const unsigned char F5 = 148; const unsigned char G5 = 130; const unsigned char A5 = 117; // e e e c e g5 const unsigned char NOTE[20] = {157, 157, 157, 198, 157, 130}; const unsigned char DUR[20] = { 4, 2, 2, 4, 2, 1}; unsigned char PLAY; // Subroutine Declarations #include #include "lcd_portd.c" void interrupt IntServe(void) { if (TMR2IF) { if ((PLAY) & (PORTB)) RA1 = !RA1; else RA1 = 0; TMR2IF = 0; } } void Play(unsigned char NOTE, unsigned char DUR) { unsigned int TIME; TIME = 1000 / DUR; if (NOTE) { PR2 = NOTE; PLAY = 1; } Wait_ms(TIME - 50); PLAY = 0; Wait_ms(50); } // Main Routine void main(void) { unsigned char i, j; TRISA = 0; TRISB = 0xFF; TRISC = 0; TRISD = 0; TRISE = 0; ADCON1 = 15; // Timer2 Initialize TMR2ON = 1; TMR2IE = 1; PEIE = 1; T2CON = 0x5D; // A=12, C=4 0 1011 1 01 PR2 = 49; GIE = 1; LCD_Init(); LCD_Move(0,0); for(i=0; i<16; i++) LCD_Write(MSG1[i]); while(1) { for (i=0; i<6; i++) { Play(NOTE[i], DUR[i]); } Wait_ms(1000); } }