-
아두이노 | 네 자리 7-세그먼트 디스플레이Technology/Arduino 2024. 3. 22. 17:00
1. 네 자리 7-세그먼트 디스플레이
앞서 살펴보았던 7-세그먼트 디스플레이는 한 자리인 정수만 나타낼 수 있었다. 한 자리를 넘는 정수나 실수를 디스플레이로 나타내고자 한다면 디스플레이를 여러 개 사용해야할 것이다. 디스플레이 하나를 직접 제어하기 위해서는 디지털 입출력 핀 8개가 필요하고, 디스플레이 4개를 직접 제어하기 위해서는 32개가 필요하다. 7-세그먼트 디코더나 시프트 레지스터를 사용하더라도 디지털 입출력 핀을 많이 사용해야 한다. 하지만 디스플레이 4개를 사용하지 않고 네 자리 디스플레이를 사용한다면 더 적은 수의 디지털 입출력 핀으로 한 자리를 넘는 정수나 실수를 나타낼 수 있다. 네 자리 7-세그먼트 디스플레이는 아래 링크로 접속하면 구매할 수 있다.
2. 제어 방법
이번 예제에서는 네 자리 7-세그먼트 디스플레이 음극타입을 기준으로 제어 방법을 다루고자 한다. 앞서 7-세그먼트 디스플레이 하나를 제어했던 방법과 같은 방식으로 제어한다면 네 자리 모두 같은 숫자를 나타내게 된다. 각 자리가 다른 숫자를 나타내려면 잔상을 이용해야 한다. 각 자리마다 숫자를 하나씩 번갈아가면서 나타나게 하되, 빠르게 제어하여 마치 네 자리가 동시에 출력되는 것처럼 나타내는 것이다. 이를 위해 각 자리에 해당하는 접지 단자를 접지에 연결하는 것이 아니라, 디지털 입출력 핀에 연결하여 각 자리를 제어할 차례가 올 때마다 디지털 LOW 신호로 접지를 형성해주어야 한다.
3. 예제
3.1. 회로 구성
3.2. 프로그램 작성
// 정수형 배열 선언 후 디지털 핀 번호로 초기화 int DigitPin[4] = {13, 12, 11, 10}; // 접지4, 접지3, 접지2, 접지1 순서로 연결 int DataPin[8] = {9, 8, 7, 6, 5, 4, 3, 2}; // A, B, C, D, E, F, G, DP 순서로 연결 // 정수형 2차원 배열 선언 후 숫자를 나타내는 논리 배열로 초기화 int DigitNumber[10][8] = { // A, B, C, D, E, F, G, DP 1, 1, 1, 1, 1, 1, 0, 0, // 0 0, 1, 1, 0, 0, 0, 0, 0, // 1 1, 1, 0, 1, 1, 0, 1, 0, // 2 1, 1, 1, 1, 0, 0, 1, 0, // 3 0, 1, 1, 0, 0, 1, 1, 0, // 4 1, 0, 1, 1, 0, 1, 1, 0, // 5 1, 0, 1, 1, 1, 1, 1, 0, // 6 1, 1, 1, 0, 0, 0, 0, 0, // 7 1, 1, 1, 1, 1, 1, 1, 0, // 8 1, 1, 1, 1, 0, 1, 1, 0 // 9 }; void setup() { for (int i = 0; i < 4; i++) { pinMode(DigitPin[i], OUTPUT); // 디지털 DigitPin[i]번 핀을 출력(OUTPUT) 모드로 설정 } for (int i = 0; i < 8; i++) { pinMode(DataPin[i], OUTPUT); // 디지털 DataPin[i]번 핀을 출력(OUTPUT) 모드로 설정 } } void loop() { // 네 자리 7-세그먼트 디스플레이에 숫자를 순서대로 출력 for (int i = 0; i < 10; i++) // 천의 자리 숫자를 1부터 9까지 표시 { for (int j = 0; j < 10; j++) // 백의 자리 숫자를 1부터 9까지 표시 { for (int k = 0; k < 10; k++) // 십의 자리 숫자를 1부터 9까지 표시 { for (int l = 0; l < 10; l++) // 일의 자리 숫자를 1부터 9까지 표시 { if (i != 0) // 천의 자리 숫자가 0이 아니면 실행 { Display(4, i); // 오른쪽에서 네 번째 자리에 숫자 i 표시 delay(5); // 5 ms 대기 } if (j != 0) // 백의 자리 숫자가 0이 아니면 실행 { Display(3, j); // 오른쪽에서 세 번째 자리에 숫자 j 표시 delay(5); // 5 ms 대기 } if (k != 0) // 십의 자리 숫자가 0이 아니면 실행 { Display(2, k); // 오른쪽에서 두 번째 자리에 숫자 k 표시 delay(5); // 5 ms 대기 } Display(1, l); // 오른쪽에서 첫 번째 자리에 숫자 l 표시 delay(5); } } } } delay(1000); } void Display(int Digit, int Number) // 오른쪽에서 Digit번째 자리에 숫자 Number를 표시 { for (int i = 4; i > 0; i--) { if(i == Digit) { // 디지털 DigitPin[i - 1]번 핀에 디지털 신호 LOW 출력 digitalWrite(DigitPin[i - 1], LOW); } else { // 디지털 DigitPin[i - 1]번 핀에 디지털 신호 HIGH 출력 digitalWrite(DigitPin[i - 1], HIGH); } } for (int i = 0; i < 8; i++) { // 디지털 DataPin[i]번 핀에 DigitNumber[Number][i]에 해당하는 디지털 신호 출력 digitalWrite(DataPin[i], DigitNumber[Number][i]); } }
[함께 읽으면 좋은 페이지]
참고문헌
- 코코아팹. (2014). 4자리 7세그먼트-원하는 숫자 출력하기. https://kocoafab.cc/tutorial/view/93. 2023.11.01.
- DroneBot Workshop. (2022). LED Displays with Arduino - 7-Segment & Dot-Matrix. YouTube. https://www.youtube.com/watch?v=6XY9PooMrms. 2023.11.01.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 프로젝트 | 디지털 카운터 (0) 2024.03.29 아두이노 라이브러리 | 7-세그먼트 디스플레이 (0) 2024.03.22 아두이노 | PISO 시프트 레지스터 74HC165 (0) 2024.03.15 아두이노 | SIPO 시프트 레지스터 74HC595 (0) 2024.03.15 아두이노 | 7-세그먼트 디코더 CD4511 (2) 2024.03.08