รบกวนสอบถามทุกคนครับ ผมกำลังศึกษาและหัดเขียนโปรแกรมไมโครคอนโทรลเลอร์ครับ ผมได้เขียนโค้ดตามในหนังสือ คิดว่าจะทำเป็น วงจรสวิตช์ซีเล็กเตอร์ครับ เอาไว้สำหรับคอนโทรลรีเลย์แต่ละช่อง และผมอยากเพิ่มฟังค์ชั่นอีก 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;
}
}
}
สอบถามทุกคนเกี่ยวกับการเขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วยภาษา 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;
}
}
}