피지컬컴퓨팅/아두이노
FND 4 digit 7 segment 활용하기
오즈랩
2024. 3. 26. 20:00
반응형
FND는 Flexible Numeric Display(가변숫자표시기)의 약자이며 LED 표시기로 숫자를 표시하는 부품으로 흔히 세븐세그먼트(7-Segment)라고 합니다. 보통 아라비아 숫자만 표시하지만 오른쪽 아래에 소수점(DP)을 포함하고 있는 부품도 있습니다. 간단한 숫자를 나타내는데에 많이 활용되며 계산기, 엘리베이터, 전자시계에서 흔히 볼 수 있는 부품입니다.
7세그먼트는 발광할 수 있는 7개의 막대를 가지고 있으며 그 중 해당되는 막대를 조광하여 숫자를 표시하게되는데 다음은 일반적으로 각 숫자에 해당하는 7세그먼트 표시 장치의 모습입니다.
Common핀으로 6, 8, 9 12번 핀이 사용되며 이 핀으로 4개의 FND 중 하나만 선택이 되어서 8개 LED 제어 신호를 받게 되고 1, 2, 3, 4, 5, 7, 10, 11번 핀은 8개의 LED를 제어해서 문자를 표기할 수 있게 됩니다.
회로도
- 연결시 220옴을 함께 연결할 것을 권장합니다!
소스코드
/*
네 자리 7세그먼트 연결하기
*/
int position_pin[] = {1,2,3,4}; //4자리 결정 핀
int segment_pin[] = {5,6,7,8,9,10,11,12}; //세그먼트 제어 핀
const int delayTime = 5; //일시정지 시간
//0 ~ 9를 표현하는 세그먼트 값
byte data[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6};
void setup() {
//4자리 결정 핀 출력용으로 설정
for(int i = 0; i < 4; i++) {
pinMode(position_pin[i], OUTPUT);
}
//세그먼트 제어 핀 출력용으로 설정
for(int i = 0; i < 8; i++) {
pinMode(segment_pin[i], OUTPUT);
}
}
void loop() {
show(1,1); //첫 번째 자리, 1출력
delay(delayTime); //0.005초 일시정지
show(2,2); //두 번째 자리, 2출력
delay(delayTime); //0.005초 일시정지
show(3,3); //세 번째 자리, 3출력
delay(delayTime); //0.005초 일시정지
show(4,4); //네 번째 자리, 4출력
delay(delayTime);
countNum(); //countNum함수 호출
}
void show(int position, int number) {
//4자리 중 원하는 자리 선택
for(int i = 0; i < 4; i++) {
if(i + 1 == position){
digitalWrite(position_pin[i], LOW);
} else {
digitalWrite(position_pin[i], HIGH);
}
}
//8개 세그먼트를 제어해서 원하는 숫자 출력
for(int i = 0; i < 8; i++){
byte segment = (data[number] & (0x01 << i)) >> i;
if(segment == 1){
digitalWrite(segment_pin[7 - i], HIGH);
} else {
digitalWrite(segment_pin[7 - i], LOW);
}
}
}
/*
0001부터 하나씩 카운트하는 함수
*/
void countNum() {
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
for(int k = 0; k < 10; k++) {
for(int l = 0; l < 10; l++) {
show(1,i);
delay(delayTime);
show(2,j);
delay(delayTime);
show(3,k);
delay(delayTime);
show(4,l);
delay(delayTime);
}
}
}
}
delay(1000);
}
[결과]
반응형