#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) 실행한다!


다음에 뵙겠습니다.

+ Recent posts