หัวข้อ: ขอคำชี้แนะหน่อยครับ CCS pic16f627a เริ่มหัวข้อโดย: beeking ที่ เมษายน 25, 2015, 11:12:55 am คือผมอยากทราบว่าจะเพิ่มให้ถ้ากดสวิตพร้อมกัน 3 ปุ่มจะให้หยุดการทำงานครับ มือใหม่ครับ เงื่อนไขมีอยู่ว่า
1. กดสวิต 1 ดีเลย์ตัวที่ 1 ทำงาน 2. กดสวิต 2 ดีเลย์ตัวที่ 1และตัวที่ 2 ทำงานพร้อมกัน 3. กดสวิต 3 ดีเลย์ตัวที่ 2 ทำงาน 4. กดสวิต พร้อมกัน 3 ตัว ดีเลย์หยุดการทำงานทั้ง 2 ตัว โค๊ดที่เขียนครับ #include <16F627A.h> #fuses HS,NOWDT,NOWDT,NOPROTECT,NOLVP #use delay (clock=40000000) void main(void) { set_tris_b(0x00); set_tris_a(0xFF); while(TRUE){ if (!input(PIN_A0)) { output_high(PIN_B0); delay_ms(500); } if (input(PIN_A0)) { output_low(PIN_B0); } if (!input(PIN_A1)) { output_high(PIN_B0); output_high(PIN_B3); delay_ms(500); } if (input(PIN_A1)) { output_low(PIN_B0); output_low(PIN_B3); } if (!input(PIN_A2)) { output_high(PIN_B3); delay_ms(500); } if (input(PIN_A2)) { output_low(PIN_B3); } } } (http://upic.me/i/dx/hr351.jpg) (http://upic.me/show/55322070) (http://upic.me/i/vn/324t2.jpg) (http://upic.me/show/55322071) (http://upic.me/i/j7/peb-16f62x.png) (http://upic.me/show/55322072) หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a เริ่มหัวข้อโดย: tu2522-LSVteam♥ ที่ เมษายน 25, 2015, 05:46:58 pm ใช้คำสั่ง && คือ เงื่อนไข AND
ตัวอย่างนะครับ if (input(PIN_A0) && input(PIN_A1) && input(PIN_A2)) { output_low(PIN_B0); output_low(PIN_B3); } คงจะพอไปต่อได้นะครับ หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a เริ่มหัวข้อโดย: beeking ที่ เมษายน 26, 2015, 10:07:32 am ขอบคุณครับเดียวขอลองแปป
หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a เริ่มหัวข้อโดย: beeking ที่ เมษายน 26, 2015, 12:35:52 pm #include <28a.h>
#fuses HS,NOWDT,NOWDT,NOPROTECT,NOLVP #use delay (clock=40000000) void main(void) { BOOLEAN sw1=0,sw2=0,sw3=0; set_tris_b(0x00); set_tris_a(0xFF); while(TRUE) { if (!input(PIN_A0)) { SW1 = 1; delay_us(200); } if (!input(PIN_A1)) { SW2 =1; delay_us(200); } if (!input(PIN_A2)) { sw3 = 1; delay_us(200); } if (sw1) { output_high(PIN_B0); delay_ms(500); output_low(PIN_B0); sw1=0; sw2=0; sw3=0; } if (sw2) { output_high(PIN_B0); output_high(PIN_B3); delay_ms(500); output_low(PIN_B0); output_low(PIN_B3); sw1=0; sw2=0; sw3=0; } if (sw3) { output_high(PIN_B3); delay_ms(500); output_low(PIN_B3); sw1=0; sw2=0; sw3=0; } if (sw1 && sw2 && sw3) { output_low(PIN_B0); output_low(PIN_B3); sw1=0; sw2=0; sw3=0; } } } เขียนมาใหม่ก็เหมือนจะชนกับเขื่อนไข อื่น 1. กดสวิต 1 ดีเลย์ตัวที่ 1 ทำงาน 2. กดสวิต 2 ดีเลย์ตัวที่ 1และตัวที่ 2 ทำงานพร้อมกัน 3. กดสวิต 3 ดีเลย์ตัวที่ 2 ทำงาน 4. กดสวิต พร้อมกัน 3 ตัว ดีเลย์หยุดการทำงานทั้ง 2 ตัว (สมมุติว่ากดสวิตช์ไม่ทันกัน โดนสวิตไหนก่อน เงื่อนไขในสวิตนั้นก็จะทำงานก่อนเลย เลยเป็นว่าไม่ดับ งงอีกแระ 555 หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a เริ่มหัวข้อโดย: tu2522-LSVteam♥ ที่ เมษายน 26, 2015, 09:46:59 pm การประกาศตัวแปร SW1 SW2 SW3 ควรเอาไว้ด้านบน ของ void main(void)
ไม่ใช่เอามาไว้ข้างล่าง แถมเอามา ใส่ใน while และยังใส่ delay เข้าไปอีก ยังไงมันก็รวนครับ เพราะคำสั่งซ้อนคำสั่ง |