สอบถามทุกคนเกี่ยวกับการเขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วยภาษา C โดยใช้ MPLAB X IDE Compiler XC8


คลิกเพื่อดูคลิปวิดีโอ
        รบกวนสอบถามทุกคนครับ ผมกำลังศึกษาและหัดเขียนโปรแกรมไมโครคอนโทรลเลอร์ครับ ผมได้เขียนโค้ดตามในหนังสือ  คิดว่าจะทำเป็น วงจรสวิตช์ซีเล็กเตอร์ครับ เอาไว้สำหรับคอนโทรลรีเลย์แต่ละช่อง และผมอยากเพิ่มฟังค์ชั่นอีก 1 ฟังค์ชั่นเข้าไป
       รายละเอียดของโปรแกรมมีดังนี้ครับ  สมมุติว่าผมกดสวิตช์ไปที่ช่องไดช่องหนึ่ง เช่น ผมกดไปที่ SW1 ทำให้ LED1 ก็จะติด กดไปที่ SW2 ทำให้ LED2 ก็จะติด LED1 ก็จะดับ การทำงานของวงจรก็เป็นประมาณนี้ครับ
 
                 ผมอยากเพิ่มฟังค์ชั่นเข้าไปอีก 1ฟังค์ชั่นครับ คือ 
        แบบที่ 1 สมุติว่าเรากดเลือกไปที่ LED ตัวใดตัวหนึ่ง เช่น เรากดเลือกไปที่ LED1 ตอนที่ LED1 ติดอยู่ อยากให้สามารถกดค้างอีก 1 ครั้ง ที่ SW1 (หน่วงเวลาตามต้องการ) แล้วให้ LED1 ดับ และ LED ตัวที่เหลือก็ยังดับอยุ่เหมือนเดิม หรือตอนที่ LED2 ติดอยู่ กดค้าง 1 ครั้งที่ SW2 (หน่วงเวลาตามต้องการ) แล้วให้ LED2 ดับ และ LED ตัวที่เหลือก็ยังดับอยุ่เหมือนเดิม ประมาณนี้ครับ 

        แบบที่ 2 สมุติว่าเรากดเลือกไปที่ LED1 ตอนที่ LED1 ติดอยู่ อยากให้สามารถกดอีก 1 ครั้ง แล้วให้ LED1 ดับ และ LED ตัวที่เหลือก็ยังดับอยุ่เหมือนเดิม หรือตอนที่ LED2 ติดอยู่ กด 1 ครั้งที่ SW2 แล้วให้ LED2 ดับ และ LED ตัวที่เหลือก็ยังดับอยุ่เหมือนเดิม ประมาณนี้
สามารถทำได้หรือปล่าวครับ ต้องเขียนโค้ดโปรแกรมยังไงครับผม

       ****โค้ดโปรแกรมครับ
#include <xc.h>
#define _XTAL_FREQ 20000000
#pragma config FOSC = HS, WDTE = OFF, LVP = OFF
#define LED1 PORTBbits.RB4
#define SW1 PORTBbits.RB0
//-------------------------------------------------------
void main(void)  
{   ANSEL =  0;                               //0; or 0x00; or 0b00000000; // Digital I/O. Pin AN0-AN7
    ANSELH = 0;                              //0; or 0x00; or 0b00000000; //Digital I/O. Pin AN8-AN13
    TRISB = 0b00001111;                //0x0F or 0b00001111 // RB0,RB1,RB2,RB3 as input
    TRISA = 0b00000000;
    //TRISC = 0b00000000;
    PORTB = 0x00;                       // Clear PORTB
    PORTA = 0x00;                       // Clear PORTA
    //PORTC = 0x00;
    WPUB0 = 1;                           // RB0 pull-up enable
    WPUB1 = 1;                           // RB1 pull-up enable
    WPUB2 = 1;                           // RB2 pull-up enable
    WPUB3 = 1;                          // RB3 pull-up enable
    nRBPU = 0;                           // Individual pull-ups
    
    while (1)
  {
    if (RB0 == 0)
    { 
      RA0 = 1;
      RA1 = 0;
      RA2 = 0;
      RA3 = 0;
      RB4 = 1;
      RB5 = 0;
      RB6 = 0;
      RB7 = 0;
    }
   if (RB1 == 0)
    {
      RA0 = 0;
      RA1 = 1;
      RA2 = 0;
      RA3 = 0;
      RB4 = 0;
      RB5 = 1;
      RB6 = 0;
      RA7 = 0;
    }
    if (RB2 == 0)
    {
      RA0 = 0;
      RA1 = 0;
      RA2 = 1;
      RA3 = 0;
      RB4 = 0;
      RB5 = 0;
      RB6 = 1;
      RB7 = 0;
    }
    if (RB3 == 0)
    {
      RA0 = 0;
      RA1 = 0;
      RA2 = 0;
      RA3 = 1;
      RB4 = 0;
      RB5 = 0;
      RB6 = 0;
      RB7 = 1;
    }
    
}
}
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่