동영상 :
https://youtu.be/MoME6Tj485I
<* FND 4개 사용 *>
-FND 4개를 선택하여 숫자를 나타낸다
---- < FND 4개 숫자 지정하여 표시하는 소스 코드 > -----------------------------------------------------
/* 아두이노 핀과 FND 핀 연결 */
int FndA = 13; // 13번 핀과 7세그먼트의 A핀이 연결
int FndB = 12;
int FndC = 11;
int FndD = 10;
int FndE = 9;
int FndF = 8;
int FndG = 7;
int FndDP = 6;
int FndD1 = 2;
int FndD2 = 3;
int FndD3 = 4;
int FndD4 = 5;
int delaytime =1;//FND 유지 시간
void DisplayNumber(int number) {
if(number == 0) {
digitalWrite(FndA, HIGH);//아두이노 출력 HIGH
digitalWrite(FndB, HIGH);//아두이노 출력 HIGH
digitalWrite(FndC, HIGH);//아두이노 출력 HIGH
digitalWrite(FndD, HIGH);//아두이노 출력 HIGH
digitalWrite(FndE, HIGH);//아두이노 출력 HIGH
digitalWrite(FndF, HIGH);//아두이노 출력 HIGH
digitalWrite(FndG, LOW);//아두이노 출력 HIGH
}
else if(number == 1) {
digitalWrite(FndA, LOW);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, LOW);
digitalWrite(FndE, LOW);
digitalWrite(FndF, LOW);
digitalWrite(FndG, LOW);
}
else if(number == 2) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, LOW);
digitalWrite(FndD, HIGH);
digitalWrite(FndE, HIGH);
digitalWrite(FndF, LOW);
digitalWrite(FndG, HIGH);
}
else if(number == 3) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, HIGH);
digitalWrite(FndE, LOW);
digitalWrite(FndF, LOW);
digitalWrite(FndG, HIGH);
}
else if(number == 4) {
digitalWrite(FndA, LOW);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, LOW);
digitalWrite(FndE, LOW);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, HIGH);
}
else if(number == 5) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, LOW);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, HIGH);
digitalWrite(FndE, LOW);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, HIGH);
}
else if(number == 6) {
digitalWrite(FndA, LOW);
digitalWrite(FndB, LOW);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, HIGH);
digitalWrite(FndE, HIGH);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, HIGH);
}
else if(number == 7) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, LOW);
digitalWrite(FndE, LOW);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, LOW);
}
else if(number == 8) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, HIGH);
digitalWrite(FndE, HIGH);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, HIGH);
}
else if(number == 9) {
digitalWrite(FndA, HIGH);
digitalWrite(FndB, HIGH);
digitalWrite(FndC, HIGH);
digitalWrite(FndD, LOW);
digitalWrite(FndE, LOW);
digitalWrite(FndF, HIGH);
digitalWrite(FndG, HIGH);
}
}
void ClearLed() //FND 모두 끄기 함수
{
digitalWrite(FndA, LOW);
digitalWrite(FndB, LOW);
digitalWrite(FndC, LOW);
digitalWrite(FndD, LOW);
digitalWrite(FndE, LOW);
digitalWrite(FndF, LOW);
digitalWrite(FndG, LOW);
digitalWrite(FndD4, HIGH);
digitalWrite(FndD3, HIGH);
digitalWrite(FndD2, HIGH);
digitalWrite(FndD1, HIGH);
}
void Display4Number(int number)
{
ClearLed(); //FND 모두 끄기
DisplayNumber( (number / 1000) % 10);
digitalWrite(FndD1, LOW); // FND_D1 켜기
delay(delaytime); //유지 시간
digitalWrite(FndD1, HIGH); // FND_D1 끄기
DisplayNumber( (number / 100) % 10);
digitalWrite(FndD2, LOW); // FND_D2 켜기
delay(delaytime);
digitalWrite(FndD2, HIGH); // FND_D1 끄기
DisplayNumber((number / 10) % 10);
digitalWrite(FndD3, LOW);
delay(delaytime);
digitalWrite(FndD3, HIGH); // FND_D3 끄기
DisplayNumber( number % 10);
digitalWrite(FndD4, LOW);
delay(delaytime);
digitalWrite(FndD4, HIGH);// FND_D4 끄기
}
void setup() {
/* 출력 핀으로 설정 */
pinMode(FndA, OUTPUT);
pinMode(FndB, OUTPUT);
pinMode(FndC, OUTPUT);
pinMode(FndD, OUTPUT);
pinMode(FndE, OUTPUT);
pinMode(FndF, OUTPUT);
pinMode(FndG, OUTPUT);
pinMode(FndDP, OUTPUT);
pinMode(FndD1, OUTPUT);
pinMode(FndD2, OUTPUT);
pinMode(FndD3, OUTPUT);
pinMode(FndD4, OUTPUT);
}
void loop() {
Display4Number(1234); //4FND ==> '1234' 숫자 표시
}
---- < FND 4개 숫자 0000 ~ 9999 까지 계수를 표시하는 소스 코드 > ---------------------------------------------
//7세그먼트 선택 핀
int FND_select_pin[] = {2,3,4,5};
//7세그먼트 제어 핀
int segment_pin[] = {13,12,11,10,9,8,7,6};
int time_delay = 5; //자릿수 표현 사이의 지연 시간, ms 단위
/* 0~9까지의 숫자 표시를 위한 세그먼트 a~dp의 점멸 패턴 */
byte digits_data[10]={ //켜지는 부분이 1로 표현됨
B11111100, // 0xFC
B01100000, // 0x60
B11011010, // 0xDA
B11110010, // 0xF2
B01100110, // 0x66
B10110110, // 0xB6
B10111110, // 0xBE
B11100100, // 0xE4
B11111110, // 0xFE
B11100110 // 0xE6
};
int d1000, d100, d10, d1;
void setup() {
//자릿수 선택 핀을 출력으로 설정
for(int i = 0; i < 4; i++)
{
pinMode(FND_select_pin[i], OUTPUT);
}
// 세그먼트 제어 핀을 풀력으로 설정
for(int i = 0; i < 8; i++)
{
pinMode(segment_pin[i], OUTPUT);
}
}
void loop() {
for( int i = 0; i < 10000; i++)
{
d1000 = i /1000;
d100 = i % 1000/100;
d10 = i % 100/10;
d1 = i % 10;
for(int j = 0 ; j < 10 ; j++)
{
show_digit(1, d1000);
delay(time_delay);
show_digit(2, d100);
delay(time_delay);
show_digit(3, d10);
delay(time_delay);
show_digit(4, d1);
delay(time_delay);
}
}
}
/* 해당 자릿수에 숫자 하나를 표시하는 함수 (위치, 출력할 숫자) */
void show_digit(int pos, int number)
{
for(int i = 0; i < 4; i++)
{
if(i+1 ==pos)
//해당 자릿수의 선택 핀만 LOW로 설정
digitalWrite(FND_select_pin[i], LOW);
else
//나머지 자리는 HIGH로 설정
digitalWrite(FND_select_pin[i], HIGH);
}
// 8개 세그먼트 제어
for(int i = 0; i < 8; i++)
{
byte segment_data = (digits_data[number]
& (0x01 << i)) >> i;
if(segment_data == 1)
digitalWrite(segment_pin[7-i], HIGH);
else
digitalWrite(segment_pin[7-i], LOW);
}
}