동영상보기
보다 다양하게 한글을 출력한 모습입니다.
한글 폰트 만들기 프로그램으로 추출한 폰트 를 사용했습니다.
필요한 폰트만 아두이노 코드에 올려 사용합니다.
속도가 빠르지만 많은 문자는 아두이노 용량때문에 제한 됩니다.
아두이노 Uno에서는 30자 이상은 무리...에러 또는 다운됨
프로그램 길이에 따라 메모리가 부족 할수도 있습니다.
아두이노 메가에도 TFTLCD쉴드를 사용 할수 있습니다.
메가는 아두이노의 4배용량입니다. 그래서 메가 추천
필요한 폰트만 가져오면 용량이 작은 아두이노에서도 문제 없습니다.
아두이노 소스 코드
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0x9488,A2,A1,A3,A4,A0); ///////////////////// TFT
#define cBLACK 0x0000
#define cWHITE 0xFFFF
#define cRED 0xF800
#define cGREEN 0x0400
#define cBLUE 0x001F
#define cSILVER 0xC618
#define cGRAY 0x8410
#define cMAROON 0x8000
#define cYELLOW 0xFFE0
#define cOLIVE 0x8400
#define cLIME 0x07E0
#define cAQUA 0x07FF
#define cTEAL 0x0410
#define cNAVY 0x0010
#define cFUCHSIA 0xF81F
#define cPURPLE 0x8010
#define cTRANSPARENT 0xFFFFFFFF
// '아' BitMap Font
unsigned short fontA[16] ={ 0x0000, 0x0008, 0x0E08, 0x1108, 0x1108, 0x2088, 0x208E, 0x2088,
0x2088, 0x2088, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000 };
// '름' BitMap Font
unsigned short fontRum[16] ={ 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x0FFC, 0x0000, 0x3FFE,
0x0000, 0x0000, 0x1FFC, 0x1004, 0x1004, 0x1004, 0x0FF8, 0x0000 };
// '다' BitMap Font
unsigned short fontDa[16] ={ 0x0000, 0x0008, 0x1F88, 0x2008, 0x2008, 0x2008, 0x200E, 0x2008,
0x2008, 0x2008, 0x2008, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0000 };
// '운' BitMap Font
unsigned short fontUn[16] ={ 0x0000, 0x03E0, 0x0C18, 0x1004, 0x0C18, 0x03E0, 0x0000, 0x0000,
0x3FFE, 0x0080, 0x0080, 0x1080, 0x1000, 0x1000, 0x0FFC, 0x0000 };
// '한' BitMap Font
unsigned short fontHan[16] ={ 0x0000, 0x1F08, 0x0008, 0x7FC8, 0x0008, 0x1F0E, 0x2088, 0x2088,
0x2088, 0x1F08, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000 };
// '글' BitMap Font
unsigned short fontGul[16] ={ 0x0000, 0x1FF8, 0x0004, 0x0004, 0x0004, 0x0008, 0x3FFE, 0x0000,
0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000 };
void setDot( int col, int row, int x, int y,int mx,int my)
{ // (문자좌표)x,y (bit 행열좌표) col,row에 가로 mx개의 점, 세로 my개의 점 그리기
// 시작점 TopLeft 좌표는 x+col*mx y+row*my임
for(int dx=0 ; dx< mx ;dx++) // 사각형의 가로 bit(dot)
for( int dy=0;dy<my;dy++) // 사각형의 세로 bit
myGLCD.drawPixel( x+col*mx+dx ,y+row*my+dy );
}
void drawFont(unsigned short font[], int x, int y, int mx ,int my) // 함수 오버로드
{ drawFont( font, x, y, mx , my, true); }
void drawFont(unsigned short font[], int x, int y, int mx , int my, bool Direction)
{ // x,y에 가로 mx배 세로 my배로 Direction이 true이면 정상 false이면 역상으로 출력
unsigned int buff;
for( int row=0; row<16; row++) // 폰트 bit의 행
{
if( Dirextion ) buff=font[row];
else buff=font[15-row];
for(int col=0;col<16;col++) // 폰트 bit의 열
{
if( buff & 0b1000000000000000 ) setDot( col, row, x,y, mx, my);
buff <<= 1; // 열 , 행 , 가로표시좌표, 세로표시좌표, 가로배율, 세로배율
}
}
}
void setup()
{
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
myGLCD.InitLCD();
myGLCD.setRotation(3);
myGLCD.clrScr();
myGLCD.setColor(255, 255, 255);
int y=50;
int x;
int fSize; // 글자 dot크기
for( int i =3; i >=1 ;i--)
{
x=50;
fSize=i*16; // 1배는 16 dot 2배는 32 dot n배는 n*16 dot
if( i == 2 ) myGLCD.setColor( cRED ) ;
if( i == 1 ) myGLCD.setColor( cYELLOW);
drawFont(fontA,x,y,i,i); x+=fSize; // 폰트를 배열로 하면 코드가 훨씬 간단해 질 것이다.
drawFont(fontRum,x,y,i,i); x+=fSize; // 보러가기
drawFont(fontDa,x,y,i,i); x+=fSize;
drawFont(fontUn,x,y,i,i); x+=fSize*2; // 공백 넣기
drawFont(fontHan,x,y,i,i); x+=fSize;
drawFont(fontGul,x,y,i,i); x+=fSize;
y=y+fSize;
}
for( int i =1; i <=3 ;i++)
{
x=50;
fSize=i*16;
if( i ==2 ) myGLCD.setColor( cRED);
if( i == 1 ) myGLCD.setColor( cYELLOW);
drawFont(fontA,x,y,i,i,false); x+=fSize;
drawFont(fontRum,x,y,i,i,false); x+=fSize;
drawFont(fontDa,x,y,i,i,false); x+=fSize;
drawFont(fontUn,x,y,i,i,false); x+=fSize*2;
drawFont(fontHan,x,y,i,i,false); x+=fSize;
drawFont(fontGul,x,y,i,i,false); x+=fSize;
y=y+fSize;
}
}
void loop(){}
'프로젝트 > TFT LCD 한글 출력 (아두이노)' 카테고리의 다른 글
TFT LCD에서 한글 영문 같이 출력(4) (0) | 2022.08.04 |
---|---|
TFT LCD에서 한글 출력 출력소스 개선(3) (0) | 2022.08.04 |
TFT LCD에서 한글 출력 (1) (0) | 2022.07.30 |
wemos mini 한글 출력(3)--애니메이션효과 (0) | 2019.06.27 |
LCD 16X2에 무리한 한글출력 모습 (2) (0) | 2019.06.26 |