GLCD FONT convert to use for LED DOT Matrix
GLCD 폰트 데이터 저장 구조 :: 한글=16x6, 영문 = 8 x 16
GLCD 용 폰트를 읽어 LED DOT MATRIX용으로 변환 함수
변환 원리 : 표시할 각 한글자 마다 해당하는 GLCD 폰트를 읽어 와서 아래 조작으로 변환
- 8바이트씩 묶고 각 8바이트 묶음 마다
=> 모든 8 바이트의 1번 비트필드 모음 ==> 변환폰트 [0]
=> 모든 8 바이트의 2번 비트필드 모음 ==> 변환폰트 [1]
...........
=> 모든 8 바이트의 8번 비트필드 모음 ==> 변환폰트 [7]
- 바이트0 부터 바이트 7 까지 LSB 데이터를 읽어 font 변수에 저장 후 'font' 좌로 SHIFT
(가장 우측 비트필드 읽음)
- 다음 바이트0 부터 바이트 7 까지 0x0000 0010 과 마스킹 데이터를 읽어
font 변수에 저장 후 좌로 SHIFT (두번째 비트필드 읽음)
- 다음 바이트0 부터 바이트 7 까지 0x0000 0100 과 마스킹 데이터를 읽어
font 변수에 저장 후 좌로 SHIFT (두번째 비트필드 읽음)
- 위 조작을 8번째 필드까지 실시하여 font 에 모아진 데이터를 tConvertedFONT[x] 에 저장
LED DOT MATRIX 폰트 구조 (제어에 따라 다름)
GLCD 폰트 데이터를 읽은 후 변환하여 임시 버퍼에 저장된 데이터 구조
한글 폰트 데이터 영문 폰트 데이터 디스플레이용 버퍼
변환 변환 루틴
루틴
// ---------------------------------------------------------------------------- void TransposeFONT(uint8_t *ndx, uint8_t tConvertedFont[32]){ uint8_t font, mask, LEDRow, FontRow, data[2]={0}, FontData[32], cnt = 0; if(*ndx > 127){ // FONT data in 0...31 data[0] = *ndx++; data[1] = *ndx; getKoreanFONT(FontData, data); }else{ // FONT data in 0...15 getBigFONT(FontData, *ndx); } mask = 0x01; // it is Korean so convert all from 0...31 if(*ndx > 127){ for(LEDRow = 0; LEDRow < 32; LEDRow++){ font = 0x00; // Fill all with '00' for(FontRow = 0; FontRow < 8; FontRow++){// temp = [7654321X] if(mask & FontData[FontRow+(cnt/8)*8]) font |= 1; if(FontRow != 7) font = font<<1; // If last, do NOT shift } // In case of last bit is HIGH then shift will lost the INFO //font = font >> 1; // Rewind last shifted - NO tConvertedFont[LEDRow] = font; // Converted to LED DoMatrix mask = mask << 1; // get next LEDRow from FONT cnt++; // to split 8 bytes blocks if((cnt%8)==0) mask = 0x01; } }else{ for(LEDRow = 0; LEDRow < 8; LEDRow++){ font = 0x00; // Fill all with '00' for(FontRow = 0; FontRow < 8; FontRow++){// temp = [7654321X] if(mask & FontData[FontRow]) font |= 1; font = font << 1; // Shift X0 until temp bit 4 } font = font >> 1; // Rewind last shifted tConvertedFont[LEDRow] = font; // Converted to LED DoMatrix mask = mask << 1; // get next LEDRow from FONT } mask = 0x01; for(LEDRow = 16; LEDRow < 24; LEDRow++){ font = 0x00; // Fill all with '00' for(FontRow = 0; FontRow < 8; FontRow++){// temp = [7654321X] if(mask & FontData[FontRow+8]) font |= 1; font = font << 1; // Shift X0 until temp bit 4 } font = font >> 1; // Rewind last shifted tConvertedFont[LEDRow] = font; // Converted to LED DoMatrix mask = mask << 1; // get next LEDRow from FONT } } } // ----------------------------------------------------------------------------
실제 GLCD 폰트 데이터와 변환된 예 : "데" 에 해당하는 폰트 데이터
GLCD 폰트 ------------------------------>>> 변환된 폰트 데이터
'uAVR' 카테고리의 다른 글
AVR에서 MDF화일 저장 - ASAM MCD-2MC (0) | 2019.11.02 |
---|---|
도트매트릭 LED 제어루틴 (0) | 2017.02.09 |
FAST AVR UTFT Library for C (Not CPP) - SSD1289 / HY32D (0) | 2017.01.21 |
윤덕용 교수님의 한글 GLCD 라이브러리 - 하위 제어포트 살리기 (0) | 2017.01.21 |
윤덕용 교수의 한글 GLCD 라이브러리 수정 - 그래픽 기능 추가 (0) | 2017.01.21 |