ขอคำชี้แนะหน่อยครับ CCS pic16f627a
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ขอคำชี้แนะหน่อยครับ CCS pic16f627a  (อ่าน 7146 ครั้ง)
beeking
ชุมชนคนรักอาชีพช่าง
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 11


อีเมล์
« เมื่อ: เมษายน 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);
                  }
           
      }
}





บันทึกการเข้า

tu2522-LSVteam♥
.กลุ่มผู้มีน้ำใจงาม..
member
*

คะแนน1161
ออฟไลน์ ออฟไลน์

กระทู้: 5142


086-5306051 ติดต่อได้เวลา 20.00น.-23.00น.


อีเมล์
« ตอบ #1 เมื่อ: เมษายน 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);
         }

คงจะพอไปต่อได้นะครับ
บันทึกการเข้า
beeking
ชุมชนคนรักอาชีพช่าง
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 11


อีเมล์
« ตอบ #2 เมื่อ: เมษายน 26, 2015, 10:07:32 AM »

ขอบคุณครับเดียวขอลองแปป
บันทึกการเข้า
beeking
ชุมชนคนรักอาชีพช่าง
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 11


อีเมล์
« ตอบ #3 เมื่อ: เมษายน 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
บันทึกการเข้า
tu2522-LSVteam♥
.กลุ่มผู้มีน้ำใจงาม..
member
*

คะแนน1161
ออฟไลน์ ออฟไลน์

กระทู้: 5142


086-5306051 ติดต่อได้เวลา 20.00น.-23.00น.


อีเมล์
« ตอบ #4 เมื่อ: เมษายน 26, 2015, 09:46:59 PM »

การประกาศตัวแปร   SW1  SW2   SW3   ควรเอาไว้ด้านบน ของ void main(void)
ไม่ใช่เอามาไว้ข้างล่าง
แถมเอามา ใส่ใน while   และยังใส่  delay  เข้าไปอีก    ยังไงมันก็รวนครับ   เพราะคำสั่งซ้อนคำสั่ง
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: