[Intel AI SW 아카데미] LED Matrix

Jimeaning·2024년 1월 18일
0

Intel AIoT

목록 보기
22/38
post-thumbnail

2024.1.18

오늘의 학습 목표

  1. Dot Matrix

  1. Ext int pho tr
  2. Stop Motor
  3. RTOS, TCP/IP
  4. Linux to STM32 연동
  5. Linux QT 작성

LED Matrix

  • LED를 매트릭스 형태로 배치하여 문자와 기호를 표시할 수 있도록 만들어진 출력 장치
  • 8×8 크기가 흔히 사용됨
  • 행과 열 제어를 위해 각각 8개, 총 16개 제어선 필요
    - 제어 회로/칩이 포함된 모듈도 흔히 사용

• 행에 해당하는 핀에 HIGH, 열에 해당하는 핀에 LOW를 가함으로써 해당 위치의 LED를 켬

전류 : 물이 흐르는 것. 높은 쪽에서 낮은 쪽으로 흐름.
전압 : 물의 높이



열 PE 2 ~ 9
행 PD 0 ~ 7

12345678
PD4 + 저항PD6 + 저항PE3PE4PD7 + 저항PE6PD5 + 저항PD2 + 저항
910111213141516
PD0 + 저항PE5PE7PD3 + 저항PE2PD1 + 저항PE8PE9

하트 (특정 패턴) 그리기

패턴 쉽게 그릴 수 있는 사이트

// dotmatrix.c

#include "main.h"

GPIO_TypeDef *col_port[] =
{
		COL1_GPIO_Port, COL2_GPIO_Port, COL3_GPIO_Port, COL4_GPIO_Port,
		COL5_GPIO_Port, COL6_GPIO_Port, COL7_GPIO_Port, COL8_GPIO_Port
};

GPIO_TypeDef *row_port[] =
{
		ROW1_GPIO_Port, ROW2_GPIO_Port, ROW3_GPIO_Port, ROW4_GPIO_Port,
		ROW5_GPIO_Port, ROW6_GPIO_Port, ROW7_GPIO_Port, ROW8_GPIO_Port
};

uint16_t row_pin[] =
{
		ROW1_Pin, ROW2_Pin, ROW3_Pin, ROW4_Pin,
		ROW5_Pin, ROW6_Pin, ROW7_Pin, ROW8_Pin
};

uint16_t col_pin[] =
{
		COL1_Pin, COL2_Pin, COL3_Pin, COL4_Pin,
		COL5_Pin, COL6_Pin, COL7_Pin, COL8_Pin
};

unsigned char all_on[] = 	// all on 문자 정의
{
#if 1
		0b01100110,
		0b01100110,
		0b11111111,
		0b11111111,
		0b11111111,
		0b01111110,
		0b00111100,
		0b00011000
#else
// 전체 LED On
		0b11111111,
		0b11111111,
		0b11111111,
		0b11111111,
		0b11111111,
		0b11111111,
		0b11111111,
		0b11111111
#endif
};

void write_column_data(int col)
{
	for (int i = 0; i < 8; i++)
	{
		if (i == col)
			HAL_GPIO_WritePin(col_port[i], col_port[i], 0); // on
		else HAL_GPIO_WritePin(col_port[i], col_port[i], 1); // off
	}
}

// 0b00111100
void write_row_data(unsigned char data)
{
	unsigned char d;
	
	d = data;	// 오리지널 데이터 변형을 막기 위해
	for (int i = 0; i < 8; i++)
	{
		if (d & (1 << i))	// 1인 경우
			HAL_GPIO_WritePin(row_port[i], row_port[i], 1);
		else HAL_GPIO_WritePin(row_port[i], row_port[i], 0);
	}
}

int dotmatrix_main_test(void)
{
	while(1)
	{
		for (int i = 0; i < 8; i++)
		{
			// 공통 양극 방식 (common anode) 
			// column에는 0을, row에는 1을 출력해야 해당 LED가 켜진다
			wirte_column_data(i);
		}
	}
	return 0;
}


잡다한 것..

ROW, COL 헷갈릴 때 .. 알아두기 ..

profile
I mean

0개의 댓글