#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
void main(void) {
TRISB = 0b11111111; // Set all RB pins as input
TRISC = 0b00000000; // Set all RC pins as output
while (1) {
for (uint8_t i = 0; i < 32; i++) {
if (PORTB & (1 << i)) { // Check if button is pressed
uint16_t period = 65536 - (int)((float)20000000 / (float)(4 * notes[i])) - 1; // Calculate period based on note
CCPR1L = period >> 8; // Load period into CCP1 registers
CCPR1H = period & 0xFF;
RC0 = 1; // Turn on speaker
}
}
RC0 = 0; // Turn off speaker
}
}