ช่วยหน่อยครับ มี switch 5 ตัว แต่ละตัวทำงานต่างกัน

Started by rayu, October 26, 2017, 10:58:52 AM

Previous topic - Next topic

rayu

ช่วยหน่อยครับ มี switch 5 ตัว แต่ละตัวทำงานต่างกัน
เช่น
1.ถ้ากด switch 1 (RA0) ให้ LED (RB0), LED(RB1), LED(RB2) ติดค้าง
2.ถ้ากด switch 2 (RA1) ให้ LED (RB3) ติดค้าง แล้วข้อ 1 ดับหมด
3.ถ้ากด switch 3 (RA2) ให้ LED(RB1), LED(RB4) ติดค้าง ข้อ 1, 2 ดับหมด
4.ถ้ากด switch 4 (RA3) ให้ LED(RB0), LED(RB1), LED(RB2) ติดค้าง ถ้าปล่อยดับ
5.ถ้ากด switch 5 (RA4) ให้ LED(RB1), LED(RB4) ติดค้าง ถ้าปล่อยดับ

ข้อ 1-3 ผมทำได้แล้วแต่ ข้อ 4-5 ผมลองหลายวิธีแต่ก็ไม่ได้ครับ  :'(
หรือถ้ามีตัวอย่างลักษณะใกล้เคียงกันผมขอดูตัวอย่างหน่อยครับ
มือใหม่หัดเขียน PIC C

rayu

#include <16f877A.h>
#fuses HS, NOWDT, NOPUT, NOPROTECT
#use delay (clock=20000000)
#use fast_io(A)
#use fast_io(B)

//char data_LED1[8]={0x07,0x08,0x04,0x08,0x10,0x20,0x40,0x80};

void main()
{  //unsigned char i,sw;
   set_tris_a(0xFF);
   set_tris_b(0x00);
   output_b(0b00011100);
   delay_ms(230);
   output_a(0b11111111);
   output_b(0b00001000);
 
   while(true)
   {   
      if(input(pin_a0)==0)
         {
            while(input(pin_a0)==0){output_b(0x07);}
         }
            delay_ms(20);
      if(input(pin_a1)==0)
         {
            while(input(pin_a1)==0){output_b(0x08);}
         }
            delay_ms(20);
      if(input(pin_a2)==0)
         {
            while(input(pin_a2)==0){output_b(0x12);}
         }
            delay_ms(20);
   
      //if(input(pin_a3)==0)
        // {
          //  while(input(pin_a2)==0 &&1){output_b(0x07);}
             
         //}
                     
               
   }
}

โปรแกรมข้อ 1-3 ครับ

dec

ประมาณนี้ ลองดูครับ

Quotetypedef enum
{
    NO_PRESS,
    SW1_PRESS,
    SW2_PRESS,
    SW3_PRESS,
    SW4_PRESS,
    SW5_PRESS
}state_t;


Quotestate_t state = NO_PRESS;
   while(true)
   {
      if(input(pin_a0) == 0)
            state = SW1_PRESS;

      if(input(pin_a1) == 0)
            state = SW2_PRESS;

      if(input(pin_a2) == 0)
            state = SW3_PRESS;

      if(input(pin_a3) == 0)
            state = SW4_PRESS;
      else if(state == SW4_PRESS)
            state = NO_PRESS;

      if(input(pin_a4) == 0)
            state = SW5_PRESS;
      else if(state == SW5_PRESS)
            state = NO_PRESS;

      switch(state)
      {
      case NO_PRESS:
            output_b(0x00);
            break;

      case SW1_PRESS:
            output_b(0x07);
            break;

      case SW2_PRESS:
            output_b(0x08);
            break;

      case SW3_PRESS:
            output_b(0x12);
            break;

      case SW4_PRESS:
            output_b(0x07);
            break;

      case SW5_PRESS:
            output_b(0x12);
            break;
      }

   }


rayu

ขอบคุณ คุณ dec มากเลยที่ให้ความรู้ ขอบคุณครับ