LAB 2
ควบคุม
หลอด LED ด้วยสวิตซ์ 4 ตัว
เงื่อนไข
- กดสวิตซ์ SW1 หลอด LED1 ติด และ LED2 ดับ
- กดสวิตซ์ SW2 หลอด LED1 ดับ และ LED2 ติด
- กดสวิตซ์ SW3 หลอด LED1 ติด และ LED2 ติด
- กดสวิตซ์ SW4 หลอด LED1 ดับ และ LED2 ดับ
จงเขียนโปรแกรมควบคุม 16F887 และจำลองการทำงานของวงจรด้วย โปรแกรม Proteus
การเขียนโปรแกรมด้วยภาษาซี
กำหนดขา INPUT , OUTPUT
SW1 คือ input กำหนดขา RC1
SW2 คือ input กำหนดขา RC2
SW3 คือ input กำหนดขา RC3
SW4 คือ input กำหนดขา RC4
RD1 คือ output ที่ควบคุมหลอด LED1
RD2 คือ output ที่ควบคุมหลอด LED2
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
#define _XTAL_FREQ 20000000 //ฟังก์ชันของการหน่วงเวลา
void main(void)
{
TRISC1=1; //ประกาศว่า ขา RC1 คือ input หาก = 1 จะเป็น input
TRISC2=1; //ประกาศว่า ขา RC2 คือ input หาก = 1 จะเป็น input
TRISC3=1; //ประกาศว่า ขา RC3 คือ input หาก = 1 จะเป็น input
TRISC4=1; //ประกาศว่า ขา RC4 คือ input หาก = 1 จะเป็น input
TRISD1=0; //ประกาศว่า ขา RD1 คือ output หาก = 0 จะเป็น output
TRISD2=0; //ประกาศว่า ขา RD2 คือ output หาก = 0 จะเป็น output
RD1=0; //ประกาศค่าเริ่มต้นของ RD1 ให้เท่ากับ 0 คือ LED ยังไม่ทำงานนั้นเอง
RD2=0; //ประกาศค่าเริ่มต้นของ RD2 ให้เท่ากับ 0 คือ LED ยังไม่ทำงานนั้นเอง
while(1)
{
if(RC1==0) //ถ้ากด SW1 RC1=0ไหม
{ __delay_ms(5);
RD1=1; //แล้วให้ RD1=1 คือให้ LED1 ติด
RD2=0; //แล้วให้ RD2=0 คือให้ LED2 ดับ
while(!RC1); //เมื่อกด SW1 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC2==0) //ถ้ากด SW2 RC2=0ไหม
{ __delay_ms(5);
RD1=0; //แล้วให้ RD1=0 คือให้ LED1 ดับ
RD2=1; //แล้วให้ RD2=1 คือให้ LED2 ติด
while(!RC2);//เมื่อกด SW2 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC3==0) //ถ้ากด SW3 RC3=0ไหม
{ __delay_ms(5);
RD1=1; //แล้วให้ RD1=1 คือให้ LED1 ติด
RD2=1; //แล้วให้ RD2=1 คือให้ LED2 ติด
while(!RC3);//เมื่อกด SW3 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC4==0) //ถ้ากด SW4 RC4=0ไหม
{ __delay_ms(5);
RD1=0; //แล้วให้ RD1=0 คือให้ LED1 ดับ
RD2=0; //แล้วให้ RD2=0 คือให้ LED2 ดับ
while(!RC4);//เมื่อกด SW4 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
}
}
อัพเดทการทดลอง LAB2 พรุ่งนี้
( นำเสนอในรูปแบบของวีดีโอจะได้เข้าใจง่าย)
การเขียนโปรแกรมด้วยภาษาซี
กำหนดขา INPUT , OUTPUT
SW1 คือ input กำหนดขา RC1
SW2 คือ input กำหนดขา RC2
SW3 คือ input กำหนดขา RC3
SW4 คือ input กำหนดขา RC4
RD1 คือ output ที่ควบคุมหลอด LED1
RD2 คือ output ที่ควบคุมหลอด LED2
เริ่มต้นเขียน
#include<pic.h>__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
#define _XTAL_FREQ 20000000 //ฟังก์ชันของการหน่วงเวลา
void main(void)
{
TRISC1=1; //ประกาศว่า ขา RC1 คือ input หาก = 1 จะเป็น input
TRISC2=1; //ประกาศว่า ขา RC2 คือ input หาก = 1 จะเป็น input
TRISC3=1; //ประกาศว่า ขา RC3 คือ input หาก = 1 จะเป็น input
TRISC4=1; //ประกาศว่า ขา RC4 คือ input หาก = 1 จะเป็น input
TRISD1=0; //ประกาศว่า ขา RD1 คือ output หาก = 0 จะเป็น output
TRISD2=0; //ประกาศว่า ขา RD2 คือ output หาก = 0 จะเป็น output
RD1=0; //ประกาศค่าเริ่มต้นของ RD1 ให้เท่ากับ 0 คือ LED ยังไม่ทำงานนั้นเอง
RD2=0; //ประกาศค่าเริ่มต้นของ RD2 ให้เท่ากับ 0 คือ LED ยังไม่ทำงานนั้นเอง
while(1)
{
if(RC1==0) //ถ้ากด SW1 RC1=0ไหม
{ __delay_ms(5);
RD1=1; //แล้วให้ RD1=1 คือให้ LED1 ติด
RD2=0; //แล้วให้ RD2=0 คือให้ LED2 ดับ
while(!RC1); //เมื่อกด SW1 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC2==0) //ถ้ากด SW2 RC2=0ไหม
{ __delay_ms(5);
RD1=0; //แล้วให้ RD1=0 คือให้ LED1 ดับ
RD2=1; //แล้วให้ RD2=1 คือให้ LED2 ติด
while(!RC2);//เมื่อกด SW2 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC3==0) //ถ้ากด SW3 RC3=0ไหม
{ __delay_ms(5);
RD1=1; //แล้วให้ RD1=1 คือให้ LED1 ติด
RD2=1; //แล้วให้ RD2=1 คือให้ LED2 ติด
while(!RC3);//เมื่อกด SW3 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
if(RC4==0) //ถ้ากด SW4 RC4=0ไหม
{ __delay_ms(5);
RD1=0; //แล้วให้ RD1=0 คือให้ LED1 ดับ
RD2=0; //แล้วให้ RD2=0 คือให้ LED2 ดับ
while(!RC4);//เมื่อกด SW4 ค้างไว้จะทำให้ค่าในลูป while เป็นจริงเมื่อปล่อยจึงเป็นเท็จ
}
}
}
อัพเดทการทดลอง LAB2 พรุ่งนี้
( นำเสนอในรูปแบบของวีดีโอจะได้เข้าใจง่าย)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น