kait

[CodeVisionAVR] 간단한 LED 제어하기 본문

펌웨어/CodeVision

[CodeVisionAVR] 간단한 LED 제어하기

KaiTae 2019. 5. 8. 11:42

안녕하세요, LED제어로 찾아왔습니다~!


코드비젼의 코딩의 시작은 LED제어라 해도 과언이 아닙니다. 전체 점멸부터 선택 점멸 순차 점멸 까지 다 준비해 봤습니다.


1. 전체 점멸


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <io.h>
#include <delay.h>
 
void main(void)
 {   
    DDRA = 0xff;
    while (1)
     {
        PORTA = 0xff;
        delay_ms(1000);
        PORTA = 0x00;
        delay_ms(1000);
     }
}
cs2


위에서 부터 설명하겠습니다. <io.h>은 코드비젼의 기본적인 헤더파일 이고 <delay.h>은 시간관련 헤더입니다..

DDRA(0x는 16진수 표기법) 는 입 출력 레지스터라고 하는 레지스터 입니다. 이것을 설정하므로써 PA0 ~ PA7 까지 출력으로 설정할 수 있습니다. 

그다음 while(1)은 무한 반복문이어서 계속 실행합니다. 

다음줄 PORTA=0xff(포트 A) 를 전부 1로 세팅해서 LED 전부 off시킵니다. 저의 ATmega128은 ActiveLow 이기 

때문에 포트에 0을 주었을때 on이 됩니다. (Active Low관한 글)

그다음 delay_ms() 함수를 이용해 1초시간 동안 시간지연해줍니다.

PORTA=0x00 을 해주면서 LED를 모두 on시키고 다시 시간지연을 줘서 1초마다 전체점멸되는 코드입니다.


2. 선택 점멸


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <io.h>
#include <delay.h>
 
void main(void)
 {   
    DDRA = 0xff;
    while (1)
     {
        PORTA = 0xff;
        delay_ms(1000);
        PORTA = 0xfe;
        delay_ms(1000);
     }
}
cs


거의 다 위에 설명과 동일하기에 PORTA = 0xfe; 이 부분만 설명드리겠습니다. 저의 보드는 AL(ActiveLow)이기 때문에 첫번째 비트만 0으로 클리어해서 첫번째 LED만 on시킵니다. 혹시 0xfe의 의미를 모르신다면 진수 표기법을 참고해주세요.

3. 순차 점멸 (하나씩 켜진다)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <io.h>
#include <delay.h>
 
void main(void)
 {   
    int led = 0xfe;
    DDRA = 0xff;
    while (1)
     {
        PORTA = led;
        delay_ms(1000);
        led = led << 1;
        if(led == 0x00){
            led = 0xfe;
        }
     }
}
cs


이번에는 led 변수를 추가해서 하나씩 켜지는 코드를 구현했습니다. led의 값이 0xfe, 0xfc ... 0x00 까지 변경되면서 하나씩켜지다가 모두 켜지면 다시 led변수를 초기값으로 초기화합니다. <<의 의미를 모르신다면 연산자와 자료형을 참고해주세요.

4. 쉬프트 점멸 (하나만 켜지면서 이동함)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <io.h>
#include <delay.h>
 
void main(void)
 {   
    int led = 0xfe;
    DDRA = 0xff;
    while (1)
     {
        PORTA = led;
        delay_ms(1000);
        led = (led << 1| 0x01;
        if(led == 0x7f){
            led = 0xfe;
        }
     }
}
 
cs

이번에는 OR 비트연산자를 이용하여 하나씩만 led를 순차적으로 점멸 합니다. led의 값이 0xfe, 0xfd ... 0xbf, 0x7f 로 변경되면서 하나씩만 순차적으로 키게 됩니다. 



여기까지 구요 궁금한점은 댓글로~

'펌웨어 > CodeVision' 카테고리의 다른 글

[CodeVisionAVR]스위치제어하기  (0) 2019.05.08
진수표기법  (0) 2018.04.20