Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 쉬프트점멸
- 자료형의 크기
- main함수
- printf형식
- 2진수
- 순차점멸
- 기본구조
- 진수
- 출력문
- 자료형의 범위
- led점멸
- 연산자의 우선순위
- LED제어
- 자료형
- 전처리기 지시자
- codevision
- printf()
- 16진수
- C언어로 문자열 출력하기
- 코드비젼
- C언어
- 연산자
- 출력함수
- 코드비젼 구조
- 8진수
Archives
- Today
- Total
kait
[CodeVisionAVR] 간단한 LED 제어하기 본문
안녕하세요, 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 |