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 폰트   ------------------------------>>> 변환된 폰트 데이터

    


LED_DOT_FONT_IN_GLCD.xlsx




블로그 이미지

DIYworld

,