#ifndef INC_FND_H_
#define INC_FND_H_
#include "main.h"
typedef struct fnd_control {
GPIO_TypeDef *port;
uint16_t pinNumber;
} FND_CONTROL;
extern uint8_t segNum[20];
extern uint8_t segAlph[26];
void fndDisplay_CC(uint8_t select, uint8_t num);
void fndDisplay_CA(uint8_t select, uint8_t num);
#endif /* INC_FND_H_ */
// fnd.c
#include "fnd.h"
// FND 연결 Port, Pin 정보
FND_CONTROL fnd[8] = {
{GPIOC, GPIO_PIN_9},
{GPIOB, GPIO_PIN_8},
{GPIOB, GPIO_PIN_9},
{GPIOA, GPIO_PIN_5},
{GPIOA, GPIO_PIN_7},
{GPIOC, GPIO_PIN_7},
{GPIOA, GPIO_PIN_9},
{GPIOA, GPIO_PIN_8}
};
// FND 출력용 숫자 배열, 0 ~ 9, 0. ~ 9.
uint8_t segNum[20] = { // .GFEDCBA
0x3f, 0x06, // 00111111 --FEDCBA 0, 00000110 -----CB- 1
0x5b, 0x4f, // 01011011 -G-ED-BA 2, 01001111 -G--DCBA 3
0x66, 0x6d, // 01100110 -GF--CB- 4, 01101101 -GF-DC-A 5
0x7d, 0x27, // 01111101 -GFEDC-A 6, 00100111 --F--CBA 7
0x7f, 0x67, // 01111111 -GFEDCBA 8, 01100111 -GF--CBA 9
0xbf, 0x86, // 10111111 .-FEDCBA 0, 10000110 .----CB- 1
0xdb, 0xcf, // 11011011 .G-ED-BA 2, 11001111 .G--DCBA 3
0xe6, 0xed, // 11100110 .GF--CB- 4, 11101101 .GF-DC-A 5
0xfd, 0xa7, // 11111101 .GFEDC-A 6, 10100111 .-F--CBA 7
0xff, 0xe7 // 11111111 .GFEDCBA 8, 11100111 .GF--CBA 9
};
// FND 출력용 영문 배열, A ~ Z
uint8_t segAlph[26] = { // .GFEDCBA
0x5f, 0x7c, // 0101 1111 -G-EDCBA A, 0111 1100 -GFEDC-- B 0 1
0x39, 0x5e, // 0101 1001 --FED--A C, 0101 1110 -G-EDCB- D 2 3
0x79, 0x71, // 0111 1001 -GFED--A E, 0111 0001 -GFE---A F 4 5
0x3d, 0x76, // 0011 1101 --FEDC-A G, 0111 0110 -GFE-CB- H 6 7
0x11, 0x0d, // 0011 0000 ---E---A I, 0000 1101 ----DC-A J 8 9
0x75, 0x38, // 0111 0101 -GFE-C-A K, 0011 1000 --FED--- L 10 11
0x55, 0x54, // 0101 0101 -G-E-C-A M, 0101 0100 -G-E-C-- N 12 13
0x5c, 0x73, // 0101 1100 -G-EDC-- O, 0111 0011 -GFE--BA P 14 15
0x67, 0x50, // 0110 0111 -GF--CBA Q, 0101 0000 -G-E---- R 16 17
0x2d, 0x78, // 0010 1101 --F-DC-A S, 0111 1000 -GFED--- T 18 19
0x1c, 0x2a, // 0001 1100 ---EDC-- U, 0010 1010 --F-D-B- V 20 21
0x6a, 0x14, // 0110 1010 -GF-D-B- W, 0001 0100 ---E-C-- X 22 23
0x6e, 0x1b // 0110 1110 -GF-DCB- Y, 0001 1011 ---ED-BA Z 24 25
};
// FND 출력 함수, select 0 숫자 / 1 영문 / 2 초기화, num 배열 번호
void fndDisplay_CC(uint8_t select, uint8_t num) {
switch (select) {
case 0:
for (uint8_t i = 0; i < 8; i++) {
if (segNum[num] & (1 << i)) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
}
break;
case 1:
for (uint8_t i = 0; i < 8; i++) {
if (segAlph[num] & (1 << i)) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
}
break;
case 2:
for (uint8_t i = 0; i < 8; i++) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
break;
}
}
// FND 출력 함수, select 0 숫자 / 1 영문 / 2 초기화, num 배열 번호
void fndDisplay_CA(uint8_t select, uint8_t num) {
switch (select) {
case 0:
for (uint8_t i = 0; i < 8; i++) {
if (~segNum[num] & (1 << i)) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
}
break;
case 1:
for (uint8_t i = 0; i < 8; i++) {
if (~segAlph[num] & (1 << i)) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
}
break;
case 2:
for (uint8_t i = 0; i < 8; i++) {
HAL_GPIO_WritePin(fnd[i].port, fnd[i].pinNumber, GPIO_PIN_RESET);
}
break;
}
}