Professional Documents
Culture Documents
MICROPROCESADORES II
PRACTICA # 3
PIANO ELECTRONICO
Grupo A
PRACTICA N 3
PIANO ELECTRONICO
1. Utilizar el Mdulo CCP1 de un microcontrolador PIC16F877 ( PIC16F877A) en modo PWM
para Realizar un programa que genere notas musicales de 2 octavas de un teclado
musical correspondientes a las frecuencias que van desde 261,1 Hz hasta 987,77 Hz. Las
frecuencias para cada nota se muestran en la figura 4.
Las 2 octavas a
ser representadas
#FUSES WDT128
#FUSES XT
//Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPROTECT
#FUSES NOBROWNOUT
//#FUSES BORV20
#FUSES NOPUT
#FUSES NOCPD
//No EE protection
#FUSES STVREN
#FUSES NODEBUG
#FUSES NOLVP
#FUSES NOWRT
#FUSES NOWRTD
#FUSES IESO
#FUSES FCMEN
#FUSES PBADEN
#FUSES NOWRTC
#FUSES NOWRTB
#FUSES NOEBTR
#FUSES NOEBTRB
#FUSES NOCPB
#FUSES LPT1OSC
#FUSES MCLR
#FUSES NOXINST
#use delay(clock=4000000)
generate_tone(G_NOTE[0], negra);
generate_tone(G_NOTE[0], negra);
generate_tone(F_NOTE[0], negra);
generate_tone(E_NOTE[0], negra);
generate_tone(D_NOTE[0], negra);
generate_tone(C_NOTE[0], negra);
generate_tone(C_NOTE[0], negra);
generate_tone(D_NOTE[0], negra);
generate_tone(E_NOTE[0], negra);
generate_tone(D_NOTE[0], 750);
generate_tone(C_NOTE[0], corchea);
generate_tone(C_NOTE[0], blanca);
delay_ms(2000);
}
void para_elisa(){
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(A_NOTE[0], 750);
generate_tone(C_NOTE[0], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(A_NOTE[0], corchea);
generate_tone(B_NOTE[0], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(Ab_NOTE[0], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(C_NOTE[1], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(A_NOTE[0], 750);
generate_tone(C_NOTE[0], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(A_NOTE[0], corchea);
generate_tone(B_NOTE[0], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(A_NOTE[0], 750);
generate_tone(B_NOTE[0], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(E_NOTE[1], 750);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(A_NOTE[0], 750);
generate_tone(G_NOTE[0], corchea);
generate_tone(F_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(D_NOTE[1], 750);
generate_tone(C_NOTE[0], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(A_NOTE[0], corchea);
generate_tone(B_NOTE[0], 750);
generate_tone(F_NOTE[0], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(A_NOTE[0], 1500);
generate_tone(E_NOTE[0], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(B_NOTE[0], 750);
delay_ms(2000);
}
generate_tone(E_NOTE[0], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(E_NOTE[2], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(D_NOTE[1], corchea);
generate_tone(C_NOTE[1], corchea);
generate_tone(A_NOTE[0], 750);
generate_tone(C_NOTE[0], corchea);
generate_tone(E_NOTE[0], corchea);
generate_tone(A_NOTE[0], corchea);
generate_tone(B_NOTE[0], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(Ab_NOTE[0], corchea);
generate_tone(B_NOTE[0], corchea);
generate_tone(C_NOTE[1], 750);
generate_tone(E_NOTE[0], corchea);
generate_tone(E_NOTE[1], corchea);
generate_tone(Eb_NOTE[1], corchea);
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator
Config tab
// TODO: USER CODE!!
//::::::::::::::::::: Condiciones Iniciales :::::::::::::::::::::::::::::::
set_tris_A(0111111); //Puerto A como salida "0" Pin 13/14
entradas Xtal
set_tris_C(0xFF); //Puerto c como salida
set_tris_B(0xFF); //Puerto B como salida "0"
set_tris_D(0xFF); //Puerto d como entrada "1"
set_tris_E(0xC); //Puerto E como entrada
output_C (0x00);
output_D (0x00);
output_A (0xC0);
output_E (0xC);
output_B (0x00);
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::
while(1){
while (INPUT_STATE(PIN_C0) ==1){generate_tone(C_NOTE[0], negra);}
while (INPUT_STATE(PIN_C1) ==1){generate_tone(Db_NOTE[0], negra);}
while (INPUT_STATE(PIN_C2) ==1){generate_tone(D_NOTE[0], negra);}
while (INPUT_STATE(PIN_C4) ==1){generate_tone(Eb_NOTE[0], negra);}
while (INPUT_STATE(PIN_C5) ==1){generate_tone(E_NOTE[0], negra);}
while (INPUT_STATE(PIN_C6) ==1){generate_tone(F_NOTE[0], negra);}
while (INPUT_STATE(PIN_C7) ==1){generate_tone(Gb_NOTE[0], negra);}
while (INPUT_STATE(PIN_D0) ==1){generate_tone(G_NOTE[0], negra);}
while (INPUT_STATE(PIN_D1) ==1){generate_tone(Ab_NOTE[0], negra);}
while (INPUT_STATE(PIN_D2) ==1){generate_tone(A_NOTE[0], negra);}
while (INPUT_STATE(PIN_D3) ==1){generate_tone(Bb_NOTE[0], negra);}
while (INPUT_STATE(PIN_D4) ==1){generate_tone(B_NOTE[0], negra);}
while (INPUT_STATE(PIN_D5) ==1){generate_tone(C_NOTE[1], negra);}
while (INPUT_STATE(PIN_D6) ==1){generate_tone(Db_NOTE[1], negra);}
while (INPUT_STATE(PIN_D7) ==1){generate_tone(D_NOTE[1], negra);}
while (INPUT_STATE(PIN_B7) ==1){generate_tone(Eb_NOTE[1], negra);}
while (INPUT_STATE(PIN_B6) ==1){generate_tone(E_NOTE[1], negra);}
while (INPUT_STATE(PIN_B5) ==1){generate_tone(F_NOTE[1], negra);}
while (INPUT_STATE(PIN_B4) ==1){generate_tone(Gb_NOTE[1], negra);}
while (INPUT_STATE(PIN_B3) ==1){generate_tone(G_NOTE[1], negra);}
while (INPUT_STATE(PIN_B2) ==1){generate_tone(Ab_NOTE[1], negra);}
while (INPUT_STATE(PIN_B1) ==1){generate_tone(A_NOTE[1], negra);}
while (INPUT_STATE(PIN_B0) ==1){generate_tone(Bb_NOTE[1], negra);}
while (INPUT_STATE(PIN_A5) ==1){generate_tone(B_NOTE[1], negra);}
while (INPUT_STATE(PIN_A4) ==1){generate_tone(C_NOTE[2], negra);}
while (INPUT_STATE(PIN_A3) ==1){ h_alegria();}
while (INPUT_STATE(PIN_A2) ==1){ para_elisa();}
}
}
SIMULACION