[CG ROM에 저장되어 있는 기본 문자 폰트]
▶ 사용자가 화면에 표시하고자 하는 문자 코드를 DD RAM에 써주기만 하면 이것에 해당하는 폰트가 자동으로 CG ROM에서 찾아져서 화면에 디스플레이 된다.
▶상위비트 하위비트 H=1 L=0
ex)A = LHLL LLLH 》0100 0001 》65(A의 ASCII값과 일치)
☞기본 문자 이외의 문자(한글)를 화면에 표시 하려면 사용자 정의 문자를 만들어 사용
CG RAM을 사용하며 5*7 도트를 사용하는 경우 최대 8문자까지 정의
5*10 도트를 사용하는 경우 최대 4문자까지 정의
▶사용자 정의 문자 지정방법◀
16진수로 0x08, 0x0c, 0x0e, 0x0f, 0x0e, 0x0c, 0x08, 0x00으로 배열로 찍어주면 되는데
원리는 아래와 같다.
x x x 0 1 0 0 0 8bit 중 5bit만 사용
x x x 0 1 1 0 0 x는 don't care
x x x 0 1 1 1 0
x x x 0 1 1 1 1
x x x 0 1 1 1 0 '▶' 이렇게 나옴
x x x 0 1 1 0 0
x x x 0 1 0 0 0
x x x 0 0 0 0 0
▶사용자 정의 문자를 사용한 예제◀
#include "project.h"
void LCD_Instruction(unsigned char ins);
void LCD_Data(unsigned char data);
void LCD_Init();
void LCD_Myfont();
volatile unsigned int iCount = 0;
volatile unsigned int uiCount = 0;
int main()
{
LCD_Init();
LCD_Instruction(0x80); // DDRAM Address
LCD_Data(0x00);
LCD_Data(0x01);
LCD_Data(0x02);
LCD_Data(0x03);
return 0;
}
void LCD_Myfont()
{
unsigned int i;
// LCD의 첫번째 라인의 시작위치는 기본 0x80이며 시작 문자의 위치는 조절 가능하다.
// 두번째 라인의 시작위치는 0xC0이며, 이것 역시 시작위치의 조절이 가능하다.
unsigned int font[] = {
0x09, 0x15, 0x15, 0x15, 0x00, 0x08, 0x0F, 0x00, // '신' 0x00
0x00, 0x1F, 0x04, 0x04, 0x0A, 0x11, 0x00, 0x00, // 'ㅈ' 0x01
0x00, 0x14, 0x14, 0x1C, 0x14, 0x14, 0x00, 0x00, // 'ㅐ' 0x02
0x04, 0x1F, 0x0E, 0x11, 0x0E, 0x04, 0x1F, 0x00 }; // '호' 0x03
// 배열에 저장된 문자를 출력하기 위한 반복문
LCD_Instruction(0x40);
for(i = 0; i < 32; i++)
{
LCD_Data(font[i]);
}
}
void LCD_Init()
{
*PIO_PER = DBUS | RS | RW | EN | BL; // 병렬입력 활성화
*PIO_OER = DBUS | RS | RW | EN | BL; // 병렬출력 활성화
LCD_Myfont();
LCD_Instruction(0x01); // Clear Display
LCD_Instruction(0x0C); // Display On
LCD_Instruction(0x38); // Function Set.. 5x7
LCD_Instruction(0x06); // Entry Mode On
}
void LCD_Instruction(unsigned char ins)
{
*PIO_CODR = EN; // 클리어비트에 1을 넣어 LCD비활성화
*PIO_CODR = RS; // 인스트럭션 레지스터 사용
// High : Data, Low : Instruction
*PIO_CODR = RW; // Write 선택
for(uiCount = 0; uiCount < 100000; uiCount++); // 딜레이
*PIO_SODR = EN; // LCD 활성화
for(uiCount = 0; uiCount < 100000; uiCount++); // 딜레이
*PIO_CODR = DBUS; // DBUS Clear
*PIO_SODR = ins; // BUS에 8Bit를 쓴다.
for(uiCount = 0; uiCount < 100000; uiCount++); // 딜레이
*PIO_CODR = EN; // EN을 High에서 Low로 LCD 비활성화
for(uiCount = 0; uiCount < 100000; uiCount++); // 딜레이
}
void LCD_Data(unsigned char data)
{
*PIO_CODR = EN; // 클리어비트에 1을 넣어 LCD비활성화
*PIO_SODR = RS; // 인스트럭션 레지스터 사용
// High : Data, Low : Instruction
*PIO_CODR = RW; // Write 선택
for(uiCount = 0; uiCount < 10000; uiCount++); // 딜레이
*PIO_SODR = EN; // LCD 활성화
for(uiCount = 0; uiCount < 10000; uiCount++); // 딜레이
*PIO_CODR = DBUS;
*PIO_SODR = data;
for(uiCount = 0; uiCount < 10000; uiCount++); // 딜레이
*PIO_CODR = EN;
for(uiCount = 0; uiCount < 10000; uiCount++); // 딜레이
} | |

더보기