-
[마이크로프로세서] font 설계& dislay전공공부/전자공학 2020. 5. 29. 15:23
< module type의 ATmega128 실습 장치(LCD가 2개의 port 사용 )에서 font 설계 및 display >
LCD 첫째 줄에는 자신의 " 영문 이름 "
LCD 둘째 줄에는 "정사각형 JBNU 이등변 삼각형"
(제작한 font에의한 정사각형 심볼과 JBNU글자 사이에는 한개의 글자 간격, JBNU글자와 제작한 font에의한 이등변 삼각형 심볼간의 간격은 한개의 글자 간격 )
(정사각형 심볼과 이등변 삼각형 심볼의 크기는 임의로 설계)
#include <mega128.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>
#include <stdio.h>
#define PORT_LCD PORTB
typedef unsigned char BYTE;
// 정사각형 모양
BYTE flash FONT1[8] ={
0b00000000,
0b00000000,
0b00011111,
0b00010001,
0b00010001,
0b00010001,
0b00011111,
0b00000000};
// 이등변 삼각형 모양
BYTE flash FONT2[8] ={
0b00000000,
0b00000000,
0b00000000,
0b00000100,
0b00001010,
0b00011111,
0b00000000,
0b00000000};
void make_custom_font(unsigned char addr, unsigned char flash *font)
{
unsigned char cnt, ADDR;
addr <<= 3;
ADDR = addr | 0x40;
for ( cnt = 0; cnt <8 ; cnt++)
{
lcd_write_byte(ADDR+cnt, font[cnt]);
}
}
void lcd_Cmd(char command)
{
unsigned char temp;
temp = (command & 0xF0) | 0x04;
delay_ms(1);
PORT_LCD = temp;
PORT_LCD &= ~0x04;
delay_ms(1);
temp =((command & 0x0F)<<4)|0x04;
delay_ms(1);
PORT_LCD = temp;
PORT_LCD &= ~0x04;
delay_ms(1);
}
void Write_Data(char ch)
{
unsigned char temp;
temp = (ch & 0xF0) | 0x05;
delay_ms(1);
PORT_LCD = temp;
PORT_LCD &= ~0x04;
delay_ms(1);
temp = ((ch & 0x0F) <<4) | 0x05;
delay_ms(1);
PORT_LCD = temp;
PORT_LCD &= ~0x04;
delay_ms(1);
}
void CLCD_String(flash unsigned char *str)
{
while(*str)
{
Write_Data(*str);
str++;
delay_ms(200);
}
}
void main()
{
delay_ms(15);
lcd_init(16);
delay_ms(15);
lcd_gotoxy(0,0);
lcd_Cmd(0x01);
while(1)
{
lcd_Cmd(0x80);
CLCD_String("chang hwan");
lcd_Cmd(0xC0);
lcd_putchar(1);
CLCD_String(" JBNU ");
lcd_putchar(2);
make_custom_font(1, FONT1);
make_custom_font(2, FONT2);
}
}
결과 사진