////////////////////////////////////////////////////////////// // Yes/No buzzer // YESNO-14 2010.01.28 Copy right: Nobuo Oka // Chime or Buzz according to duration of the button pushed ////////////////////////////////////////////////////////////// #include <12f683.h> #fuses INTRC_IO, NOWDT, PUT, NOPROTECT, NOMCLR, #use delay(CLOCK=31000) //internal clock 31KHz // PROTOTYPING //////////////////////////////////////////// void buzzer_No(); void chime_yes(); void repeat(); // PIN ASSIGNMENT ///////////////////////////////////////// #byte GP=5 #bit BUZZ=GP.1 //for No sign #bit CHIME=GP.0 //for Yes sign #bit BUTTON=GP.3 //input for Yes/No #bit LED=GP.2 // DEFINITION //////////////////////////////////////////// #define ON 1 #define OFF 0 int j; int i; // Main routine /////////////////////////////////////////// void main() { setup_adc_ports(NO_ANALOGS); set_tris_a(0x08); //GPIO 3 for IN, GPIO 01245 for OUT setup_Oscillator(OSC_31KHz); BUZZ=OFF; CHIME=OFF; BUTTON=OFF; // Repeat routine while(1) { // Wait until BUTTON is pushed delay_ms(50); //to avoid chattering CHIME=OFF; BUZZ=OFF; while(BUTTON) { } while(1-BUTTON) { } // Select YES or NO { i=0xbe; //191=to determine yes/no border delay_ms(5); //to avoid chattering while(i) // loop time 10.45msec { // yes/no border = 2000msec if (BUTTON==1) { delay_ms(9); //3msec x 256 = 768msec i=i-1; j=0x01; } else { j=0x02; i=0x00; } } } switch (j) { case 1: buzzer_No(); break; case 2: chime_yes(); break; default: break; } j=0x00; } while(BUTTON) // Wait till BUTTON is released { } delay_ms(20); //to avoid chattering } ////////////////////////////////////////////////////////// // Ring buzzer for No////////////////////////////////////// void buzzer_No() { int i; i=0x16; //to determine buzzer time while(i) { i=i-1; BUZZ=ON; delay_ms(2); BUZZ=OFF; delay_ms(2); BUZZ=ON; delay_ms(3); BUZZ=OFF; delay_ms(3); BUZZ=ON; delay_ms(5); BUZZ=OFF; delay_ms(5); BUZZ=ON; delay_ms(7); BUZZ=OFF; delay_ms(7); BUZZ=ON; delay_ms(9); BUZZ=OFF; delay_ms(9); } } // Ring chime for Yes/////////////////////////////////////// void chime_yes() { CHIME=ON; delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(100); CHIME=OFF; }