각 LED 점멸
이전 ATmega 0번 포스팅에서 다룬 LED 순차 점멸에서 한 단계 더 나아가 이번에는 스위치를 한 번 누를 때 마다 점멸되는 LED가 다르게 설정해보겠습니다.
#define F_CPU 16000000L // Board에 대한 CLK정보(16MHz)
#include <avr/io.h>
#include <avr/delay.h>
const int _delay_t = 500;
int k = 0;
int j = 0;
void TogglePinA(int n, int dl) // n : n번째 비트, dl : delay in mili-second
{
char b = 1 << n; //n의 값에 따라 n번째 비트에 1을 넣는다.
PORTA |= b; //PortA의 0번째 비트를 HIGH로 출력
_delay_ms(500);
PORTA &= ~b; //PortA의 0번째 비트를 LOW로 출력
_delay_ms(500);
}
int main(void) // 여기로 시작되어 들어감
{
/* Replace with your application code */
DDRA |= (1<<0 | 1<<1 | 1<<2); // A port의 0, 1 ,2번째 비트를 출력용으로 사용, 나머지는 입력 = 0은 출력, 1은 입력
DDRB &= ~(1<<0);// B port의 0번째 비트를 입력용으로 사용
while (1) // Embedded Program은 무한루프가 기본이다.
{
if(!(PINB & 0x01 == 1)) // 안누르면 1
{
k++; // Loop가 돌아올 때마다 k값 상승
j = k % 3; // k의 나머지값 j 지정
while(1) // switch를 누르고 있을 때 넘어가지 않음
if(PINB & 0x01 == 1)
{
break;
}
}
switch (j) // 나머지 값에 따라 점등되는 LED 설정
{
case 1: TogglePinA(0, _delay_t); break;
case 2: TogglePinA(1, _delay_t); break;
default: TogglePinA(2, _delay_t); break;
}
}
}
위 코드에서 if문 내의 while(1)문을 지우면 Switch를 누르고 있을 때 LED가 순차적으로 불이 들어오게 됩니다.
'( * )Engineering > 🌜C Language' 카테고리의 다른 글
[ATmega 128] 3. 7 Segment 타이머 만들기. (1) | 2024.03.29 |
---|---|
[ATmega 128] 0. Microchip Studio 사용기(LED 점멸) (0) | 2024.03.21 |