Semiconductor, Embedded/2. STM32, Arduino

STM32 - GPIO / 7_segment Counter 0~9까지 숫자 나타내기

잇(IT) 2024. 5. 22. 19:24

 

 

Project 생성

 

Project는 MCU/MPU Selector STM32F429ZI로 생성하여 사용하였다.

위 옵션은 주변 장치의 초기화 코드를 직접 작성하는 대신, 도구나 프레임워크가 주변 장치마다 필요한 초기화 코드를 자동으로 생성해주는 옵션이다. 또한 .c와 .h 파일로 나눠서 생성해주며 .c 파일은 초기화 코드를 포함하고, .h 파일은 해당 주변 장치에 대한 함수 프로토타입 및 상수 정의 등을 포함한다.


7_segment

 

7_segment는 아래와 같이 PORT가 구성되어 있고

핀 번호 7-세그먼트 마디
a b c d e f g DOT
1 0 0 0 0 1 0 0 0
2 0 0 0 1 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 1 0 0 0 0 0
5 0 0 0 0 0 0 0 1
6 0 1 0 0 0 0 0 0
7 1 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0
9 0 0 0 0 0 1 0 0
10 0 0 0 0 0 0 1 0

 

BCD코드  
a
(13번 핀)
b
(12번 핀)
c
(11번 핀)
d
(10번 핀)
e
(9번 핀)
f
(15번 핀)
g
(14번 핀)
0001 1 0 0 1 1 1 1
0010 0 0 1 0 0 1 0
0011 0 0 0 0 1 1 0
0100 1 0 0 1 1 0 0
0101 0 1 0 0 1 0 0
0110 1 1 0 0 0 0 0
0111 0 0 0 1 1 0 1
1000 0 0 0 0 0 0 0
1001 0 0 0 1 1 0 0

 

7_segment의 숫자를 표현하기 위한 진리표는 위와 같다.

0~9의 숫자를 표현하기 위해서 7_segment에 연결해야 하는 pin은 최소 7개가 필요하다.


7_segment에 신호를 전달할 7개의 핀은 Nucleo-144 board의 핀은 아래와 같이 PD0~PD6를 사용할 것이다.

UI를 통해 PD0~PD6까지의 PIN을 GPIO_Output으로 설정해준다.


Code 작성

0~9를 나타낼 char 배열 num을 생성한다.

 

GPIO_TypeDef 구조체에 정의된 ODR 레지스터는 output 출력을 위한 레지스터로 PD0~6까지의 Pin을 사용하기 때문에 아래와 같이 해당 7_segment 진리표에 맞게 신호 0 or 1을 전달한다.

 

매개변수로 넘어오는 숫자를 ODR 레지스터에 해당하는 Pin에 신호를 전달하기 위해 위와 같이 코드를 작성한다.

ex) 7_segment의 3을 나타내기 위해서는 아래 진리표와 같이 gfedcba(0011001) 신호를 전달해야 하기 때문에 ODR에 해당 Pin에 맞게 데이터를 전달한다. 0x30 = 00(g)1(f)1(e) 0(d)0(c)0(b)0(a) 

 

  a Pin b Pin c Pin d Pin e Pin f Pin g Pin
0011 0 0 0 0 1 1 0

while문을 통해 ODR의 Pin 값을 전달하여 0.5초 딜레이 뒤에 num 배열의 값을 하나씩 증가 시켜서 출력 시킨다.

 

 

 

728x90