// L2.c // 12F675 // 暗いと自動でLEDを点灯する     + 1 8 GND // 電池電圧6.2V 以下でアラーム音を鳴らす 2 7 ad/in 電源電圧 //                 on sig out 3 6 ad/in cdsセンサ //   4 5 ブザーsig out #include "12f675.h" #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR #device ADC=10 #use delay(CLOCK = 4000000) long v0,x0,v1,x1; void ararm() { int ax; int a,d; long t; ax=35; //音程 40=860,35=1000hz for(a=0;a<100;a++){ output_HIGH(PIN_A2); for(d = 0 ; d < ax ; d++ ); output_LOW(PIN_A2); for(d = 0 ; d < ax ; d++ ); } t=100; while(t){ for(d = 0 ; d < 72 ; d++ ); t--; } for(a=0;a<100;a++){ output_HIGH(PIN_A2); for(d = 0 ; d < ax ; d++ ); output_LOW(PIN_A2); for(d = 0 ; d < ax ; d++ ); } t=500; while(t){ for(d = 0 ; d < 72 ; d++ ); t--; } } void main(void) { int AR; set_tris_a(0x03); // 00 0011 setup_adc_ports(sAN0 | sAN1 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_16); // A/D 初期設定 x0=3160; //3160=6.2v x1=2000; while(true){ set_adc_channel(1); delay_us(50); v1 = read_adc(); v1 = v1 * 5; if(v1 >= x1){ output_HIGH(PIN_A4); } else{output_LOW(PIN_A4);} set_adc_channel(0); delay_us(50); v0 = read_adc(); v0 = v0 * 5; if(v0 <= x0){ delay_ms(500); set_adc_channel(0); delay_us(50); v0 = read_adc(); v0 = v0 * 5; if(v0 <= x0){AR=1;} else{AR=0;} } else{AR=0;} if(AR==1){ararm();} } }