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 |
LED_DOT_FONT_IN_GLCD.xlsx