아두이노나 라즈베리 파이 아트메가와 같은 다양한 마이크로컨트롤을 접하다보면 가장 많이 사용되는 7-segment 혹은 FND라고 불리는 부품이 있다.
8개의 LED를 사진과 같이 배치하여 우리가 흔히 쉽게 볼수 있는 전광판의 번호 혹은 알파벳을 출력할 수있게 만든 모듈이다.
사진과 같이 공통 VCC 혹은 공통 GND를 가진 두 가지 타입이 존재한다.
따라서 제어 방식 또한 서로 반대가 된다.
공통 VCC의 경우 신호 (a,b,...,g,dp)를 0으로 주어야지만 해당 LED에 순방향이 걸려 ON이 되며, 공통 GND의 경우 반대로 1의 신호를 주어야 순방향이 걸려 LED가 쳐지게 된다.
보통 MCU에 덜 무리가 가는 공통 VCC 타입을 사용하는 것이 좋다.
하지만 이 글에서는 공통 GND 타입을 사용 하였다.
빠르게 숫자를 표현하기 위한 표는 다음과 같다.(공통 GND 기준)
숫자 | DP | G | F | E | D | C | B | A | 2진값 | 16진값 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0011 1111 | 3F |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0000 0110 | 06 |
2 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0101 1011 | 5B |
3 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0100 1111 | 4F |
4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0110 0110 | 66 |
5 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0110 1101 | 6D |
6 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0111 1101 | 7D |
7 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0010 0111 | 27 |
8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0111 1111 | 7F |
9 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0110 0111 | 67 |
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
unsigned char SEG[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7f,0x67,0xF7,0xFC,0xB9,0x5E,0xf9,0xf1};
DDRE=0xff;
int i=0;
while(1)
{
PORTE=SEG[i];
i++;
if(i>15){
i=0;
}
_delay_ms(300);
}
}