아두이노/아두이노 과제
7 세그먼트
펭킹
2024. 7. 19. 15:38
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// 숫자 0부터 9까지를 7세그먼트 디스플레이에 표시하기 위한 비트 패턴
unsigned char LED_7[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 숫자를 입력받아 해당하는 7세그먼트 비트 패턴을 반환하는 함수
unsigned char LED_7seg(char c) {
if ((c >= '0') && (c <= '9')) {
return LED_7[c - '0'];
}
return 0; // 잘못된 입력에 대한 기본값
}
// 비트 패턴을 사용하여 7세그먼트 디스플레이의 핀을 제어하는 함수
void display7Seg(unsigned char pattern) {
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], (pattern >> i) & 0x01); // 패턴의 비트를 세그먼트 핀에 적용
}
}
void setup() {
// 각 핀을 출력으로 설정
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
// 숫자 0부터 9까지를 순차적으로 표시
for (char c = '0'; c <= '9'; c++) {
unsigned char pattern = LED_7seg(c); // 숫자에 해당하는 비트 패턴 가져오기
display7Seg(pattern); // 7세그먼트 디스플레이에 비트 패턴 출력
delay(1000); // 1초 지연
}
}
7세그먼트에는 애노드 타입과 캐소드 타입이 있는데, 애노드 타입은 데이터시트 상 com이나 그라운드로 연결 되고, 캐소드 타입은 vcc로 연결 된다.
그래서 서로 반대되는 성질을 가지고, 현재 실습의 세븐세그먼트는 캐소드 타입으로 신호를 주면 해당 led가 켜지는식으로 동작한다.