8개 LED 켜고 끄기
스위치 입력은 Pin B7을 통하여 상태를 읽게 되고 스위치의 상태를 읽어 8개의 LED를 켜고 끌 수 있다.
회로는 아래와 같이 8 Array LED와 Tact Switch를 사용한 기본회로를 사용하였다.
PIC16F18345/687을 사용하기 위한 기본 회로
아래 그림은 위 회로를 빵판에 옮겨 놓은 것으로 이와 같이 꾸미고 프로그램을 작성하고 동작 시키면 된다. 실행 프로그램은 스위치를 누르면 LED 모두가 켜지고 그렇지 않으면 LED 가 모두 꺼지도록 하였다.
PIC16F687을 사용하기 위하여 빵판에 꾸민 모양
(그림을 마우스로 클릭하면 간단한 동영상을 볼 수 있다.)
스위치의 상태에 따라 LED 전체를 켜고 끄기 위하여 스위치의 상태를 읽기위하여 input () 함수를 사용하였고, LED를 켜고 끄기위하여 output_high (), 그리고 output_low () 함수를 사용하였다. Digital output 함수의 하나로 포트 전체(Bit0 ~ Bit7)를 켜고 끄기위하여 output_x () 함수를 사용 할 수 도 있다. 하나의 포트에 포함된 여러개의 Pin(주로 8개) 모두를 컨트롤하기 위해서는 output_x () 함수를 사용하는 것이 편리하다.
output_x (value)에서 x는 포트 이름을 이야기 하며, vlue는 Port X의 출력값으로 0x00 ~ 0xFF (0 ~ 255)사이의 값으로 bit 0에서 bit 7의 출력 값을 2진수로 표현한 값이다.
예로서 output_c (0) 의 경우 port c를 통하여 0의 값을 출력한다는 의미로 value 0은 2진수로 00000000 이므로 Bit 0에서 Bit 7 까지 모두 0의 출력 신호(0 V)를 내 보낸다는 의미이다. 따라서 output_c (0)함수를 실행하면 Port C의 출력은 모두 0 V가 되고 따라서 8개의 LED가 모두 꺼지게 된다. 반면에 output_c (255)의 경우 255는 2진수로 11111111 이므로 Bit 0에서 Bit 7 까지 모두 1의 출력 신호(5 V)를 내 보내게되고 8개의 LED 모두 켜지게 된다. 따라서 value에 따라서 원하는 LED를 켜고 끌 수 있다.
예)
output_c (0x00) ; //* LED를 모두 꺼짐, 0x00 (16진수) -> 00000000 (2진수)
output_c (0xFF) ; //* LED를 모두 켜짐, 0xFF (16진수) -> 11111111 (2진수)
output_c (0xF0) ; //* 위 4개가 켜짐, 0xF0 (16진수) -> 11110000 (2진수)
아래 프로그램은 버튼을 눌렀을때 모두 켜지고 스위치를 누르지 않은 상태는 모두 꺼지는 프로그램입니다. 프로그램은 아래 위 두 종류로 되어있고, 둘이 조금 다르긴하지만 같은 결과를 나타낸다. 다만 output_high () 함수를 사용하는 경우 8개의 LED 가 매우 빠르게 순차적으로 켜지며, output_c () 함수의 경우 8개의 LED가 동시에 켜지고 꺼진다.
PIC16F18345/687을 사용하기 위한 기본 회로
아래 그림은 위 회로를 빵판에 옮겨 놓은 것으로 이와 같이 꾸미고 프로그램을 작성하고 동작 시키면 된다. 실행 프로그램은 스위치를 누르면 LED 모두가 켜지고 그렇지 않으면 LED 가 모두 꺼지도록 하였다.
PIC16F687을 사용하기 위하여 빵판에 꾸민 모양
(그림을 마우스로 클릭하면 간단한 동영상을 볼 수 있다.)
스위치의 상태에 따라 LED 전체를 켜고 끄기 위하여 스위치의 상태를 읽기위하여 input () 함수를 사용하였고, LED를 켜고 끄기위하여 output_high (), 그리고 output_low () 함수를 사용하였다. Digital output 함수의 하나로 포트 전체(Bit0 ~ Bit7)를 켜고 끄기위하여 output_x () 함수를 사용 할 수 도 있다. 하나의 포트에 포함된 여러개의 Pin(주로 8개) 모두를 컨트롤하기 위해서는 output_x () 함수를 사용하는 것이 편리하다.
3. Digital Output 명령어: output_x () (CCS-C Manual 참고)
- output_x (value): port x를 통하여 value 값을 출력output_x (value)에서 x는 포트 이름을 이야기 하며, vlue는 Port X의 출력값으로 0x00 ~ 0xFF (0 ~ 255)사이의 값으로 bit 0에서 bit 7의 출력 값을 2진수로 표현한 값이다.
예로서 output_c (0) 의 경우 port c를 통하여 0의 값을 출력한다는 의미로 value 0은 2진수로 00000000 이므로 Bit 0에서 Bit 7 까지 모두 0의 출력 신호(0 V)를 내 보낸다는 의미이다. 따라서 output_c (0)함수를 실행하면 Port C의 출력은 모두 0 V가 되고 따라서 8개의 LED가 모두 꺼지게 된다. 반면에 output_c (255)의 경우 255는 2진수로 11111111 이므로 Bit 0에서 Bit 7 까지 모두 1의 출력 신호(5 V)를 내 보내게되고 8개의 LED 모두 켜지게 된다. 따라서 value에 따라서 원하는 LED를 켜고 끌 수 있다.
예)
output_c (0x00) ; //* LED를 모두 꺼짐, 0x00 (16진수) -> 00000000 (2진수)
output_c (0xFF) ; //* LED를 모두 켜짐, 0xFF (16진수) -> 11111111 (2진수)
output_c (0xF0) ; //* 위 4개가 켜짐, 0xF0 (16진수) -> 11110000 (2진수)
아래 프로그램은 버튼을 눌렀을때 모두 켜지고 스위치를 누르지 않은 상태는 모두 꺼지는 프로그램입니다. 프로그램은 아래 위 두 종류로 되어있고, 둘이 조금 다르긴하지만 같은 결과를 나타낸다. 다만 output_high () 함수를 사용하는 경우 8개의 LED 가 매우 빠르게 순차적으로 켜지며, output_c () 함수의 경우 8개의 LED가 동시에 켜지고 꺼진다.
//*********************************************************************** // 스위치를 읽어 LED 켜기 (output_high (), output_low () 함수 사용) //*********************************************************************** #include <16f687.h> //* pic16f687을 사용하기 위한 header file #fuses HS //* 4 MHz:XT, 4 MHz 이상: HS #use delay (clock = 20000000) //* 사용한 크리스탈 void main (void) { int1 bitSW ; //* 1 bit bitSW 변수 선언 while (1) { bitSW = input (PIN_B7) ; //* 스위치(PIN_B7) 의 상태 신호를 읽음 if (bitSW == 0) { output_high (PIN_C0) ; //* Pin_C0 On output_high (PIN_C1) ; //* Pin_C1 On output_high (PIN_C2) ; //* Pin_C2 On output_high (PIN_C3) ; //* Pin_C3 On output_high (PIN_C4) ; //* Pin_C4 On output_high (PIN_C5) ; //* Pin_C5 On output_high (PIN_C6) ; //* Pin_C6 On output_high (PIN_C7) ; //* Pin_C7 On } else { output_low (PIN_C0) ; //* Pin_C0 Off output_low (PIN_C1) ; //* Pin_C1 Off output_low (PIN_C2) ; //* Pin_C2 Off output_low (PIN_C3) ; //* Pin_C3 Off output_low (PIN_C4) ; //* Pin_C4 Off output_low (PIN_C5) ; //* Pin_C5 Off output_low (PIN_C6) ; //* Pin_C6 Off output_low (PIN_C7) ; //* Pin_C7 Off } } } //*********************************************************************** 위 프로그램을 포트 출력 명령어 output_c () 함수를 사용할 수도 있다. //*********************************************************************** // 스위치를 읽어 LED 켜기 (output_c () 함수 사용) //*********************************************************************** #include <16f687.h> //* pic16f687을 사용하기 위한 header file #fuses HS //* 4 MHz:XT, 4 MHz 이상: HS #use delay (clock = 20000000) //* 사용한 크리스탈 void main (void) { int1 bitSW ; //* 1 bit bitSW 변수 선언 while (1) { bitSW = input (PIN_B7) ; //* 스위치(PIN_B7) 의 상태 신호를 읽음 if (bitSW == 0) output_c (0xFF) ; //* LED를 한번에 모두 켬 (스위치가 눌렸을 경우) else output_c (0x00) ; //* LED를 모두 끔 } } //***********************************************************************
< Prev |
TOP
|
Next > |