#AVR #ATmega128 #ATmega 128 #LED #ATmel Studio 7 #7 segment #7segment #아두이노 #전자전기
ATmega128로 7-segment LED 조작하기!
애석하게도 따로 찍은 사진이 없어 영상 속 화면으로 대체합니다.
1) 배선한다!
사진 속 7-segment LED는 5611BH 모델입니다. 이 모델은 공통 전원부가 (-)가 아닌 (+)입니다. 즉, 아래 이미지에서 8번 핀에 ATmega 그림에서 아래쪽에서 제일 왼쪽에 있는 VEXT 포트를 연결해주어야 합니다.
저는 A부터 차례대로 PA0와 대응시켰습니다. 즉, A-PA0, B-PA1식으로 DP-PA7로 하였습니다.
2) 프로그래밍 한다!
소스코드입니다.
#include <avr/io.h>
int d2b[10] = {0b10111111,
0b10000110,
0b11011011,
0b11001111,
0b11100110,
0b11101101,
0b11111101,
0b10100111,
0b11111111,
0b11101111};
void delay_secp10(int sec){
volatile int i, j, k;
for(k=0;k<sec;k++){
for (i=0;i<100;i++){
for(j=0;j<1000;j++);
}
}
}
int main(void)
{
DDRA = 0xFF;
int dp = 0b10000000;
int flag = 0b00000000;
while(1){
for (int i=9 ; i>-1 ; i--){
PORTA = ~(d2b[i])|(dp&flag);
delay_secp10(5);
flag = ~flag;
PORTA = ~(d2b[i])|(dp&flag);
delay_secp10(5);
flag = ~flag;
}
}
return 0;
}
d2b배열은 인덱스 넘버가 곧 그 숫자를 표시하는 2진수 바이너리 코드입니다. 즉, 0은 마지막 G핀만 제외하고 나머지가 모두 점등되어야 하므로 0b10111111입니다.
또한 여기서는 delay_secp10이란 함수를 썼는데, 이는 그 전에 delay_sec을 10등분 한 함수입니다. 1초에 dot point를 두번 깜빡여주고 싶어서 만들었습니다.
dp와 flag모두 두번깜빡여주기 위해 만든건데 사실 dp 깜빡임밖에 효과가 없으므로 빼고 진행하셔도 무방합니다.
3) 실행한다!
다음에 뵙겠습니다.
'ETC > AVR' 카테고리의 다른 글
AVR(ATMega 128) 인터럽트 제어 쉽게 하기! (0) | 2018.10.31 |
---|---|
[AVR][ATmega 128 작품] ATmega128로 FND 만들고 활용하기! -추가실험- (0) | 2018.10.12 |
[AVR][ATmega 128 작품] ATmega128로 FND 만들고 활용하기! (0) | 2018.10.10 |
[AVR][ATmega 128 작품] ATmega128로 연속 LED 시퀀스 만들기! (0) | 2018.10.08 |
[AVR][ATmega 128 작품] ATmega128로 신호등 만들기! (0) | 2018.10.08 |