본문 바로가기

정리중인 카테고리/전공 기술

ATmega128 - 128x64 GLCD 문자 표시 동작 소스.


/* 5x7 ASCII Character Font */

const unsigned char GLCD_Font[95][5] = {

    {0x00, 0x00, 0x00, 0x00, 0x00},    // 0x20 Space

    {0x00, 0x00, 0x4F, 0x00, 0x00},    // 0x21 !

    {0x00, 0x07, 0x00, 0x07, 0x00},    // 0x22 "

    {0x14, 0x7F, 0x14, 0x7F, 0x14},    // 0x23 #

    {0x24, 0x2A, 0x7F, 0x2A, 0x12},    // 0x24 $

    {0x23, 0x13, 0x08, 0x64, 0x62},    // 0x25 %

    {0x36, 0x49, 0x55, 0x22, 0x50},    // 0x26 &

    {0x00, 0x05, 0x03, 0x00, 0x00},    // 0x27 '

    {0x00, 0x1C, 0x22, 0x41, 0x00},    // 0x28 (

    {0x00, 0x41, 0x22, 0x1C, 0x00},    // 0x29 )

    {0x14, 0x08, 0x3E, 0x08, 0x14},    // 0x2A *

    {0x08, 0x08, 0x3E, 0x08, 0x08},    // 0x2B +

    {0x00, 0x50, 0x30, 0x00, 0x00},    // 0x2C ,

    {0x08, 0x08, 0x08, 0x08, 0x08},    // 0x2D -

    {0x00, 0x60, 0x60, 0x00, 0x00},    // 0x2E .

    {0x20, 0x10, 0x08, 0x04, 0x02},    // 0x2F /

    {0x3E, 0x51, 0x49, 0x45, 0x3E},    // 0x30 0

    {0x00, 0x42, 0x7F, 0x40, 0x00},    // 0x31 1

    {0x42, 0x61, 0x51, 0x49, 0x46},    // 0x32 2

    {0x21, 0x41, 0x45, 0x4B, 0x31},    // 0x33 3

    {0x18, 0x14, 0x12, 0x7F, 0x10},    // 0x34 4

    {0x27, 0x45, 0x45, 0x45, 0x39},    // 0x35 5

    {0x3C, 0x4A, 0x49, 0x49, 0x30},    // 0x36 6

    {0x01, 0x71, 0x09, 0x05, 0x03},    // 0x37 7

    {0x36, 0x49, 0x49, 0x49, 0x36},    // 0x38 8

    {0x06, 0x49, 0x49, 0x29, 0x1E},    // 0x39 9

    {0x00, 0x36, 0x36, 0x00, 0x00},    // 0x3A :

    {0x00, 0x56, 0x36, 0x00, 0x00},    // 0x3B ;

    {0x08, 0x14, 0x22, 0x41, 0x00},    // 0x3C <

    {0x14, 0x14, 0x14, 0x14, 0x14},    // 0x3D =

    {0x00, 0x41, 0x22, 0x14, 0x08},    // 0x3E >

    {0x02, 0x01, 0x51, 0x09, 0x06},    // 0x3F ?

    {0x32, 0x49, 0x79, 0x41, 0x3E},    // 0x40 @

    {0x7E, 0x11, 0x11, 0x11, 0x7E},    // 0x41 A

    {0x7F, 0x49, 0x49, 0x49, 0x36},    // 0x42 B

    {0x3E, 0x41, 0x41, 0x41, 0x22},    // 0x43 C

    {0x7F, 0x41, 0x41, 0x22, 0x1C},    // 0x44 D

    {0x7F, 0x49, 0x49, 0x49, 0x41},    // 0x45 E

    {0x7F, 0x09, 0x09, 0x09, 0x01},    // 0x46 F

    {0x3E, 0x41, 0x49, 0x49, 0x7A},    // 0x47 G

    {0x7F, 0x08, 0x08, 0x08, 0x7F},    // 0x48 H

    {0x00, 0x41, 0x7F, 0x41, 0x00},    // 0x49 I

    {0x20, 0x40, 0x41, 0x3F, 0x01},    // 0x4A J

    {0x7F, 0x08, 0x14, 0x22, 0x41},    // 0x4B K

    {0x7F, 0x40, 0x40, 0x40, 0x40},    // 0x4C L

    {0x7F, 0x02, 0x0C, 0x02, 0x7F},    // 0x4E M

    {0x7F, 0x04, 0x08, 0x10, 0x7F},    // 0x4E N

    {0x3E, 0x41, 0x41, 0x41, 0x3E},    // 0x4F O

    {0x7F, 0x09, 0x09, 0x09, 0x06},    // 0x50 P

    {0x3E, 0x41, 0x51, 0x21, 0x5E},    // 0x51 Q

    {0x7F, 0x09, 0x19, 0x29, 0x46},    // 0x52 R

    {0x26, 0x49, 0x49, 0x49, 0x32},    // 0x53 S

    {0x01, 0x01, 0x7F, 0x01, 0x01},    // 0x54 T

    {0x3F, 0x40, 0x40, 0x40, 0x3F},    // 0x55 U

    {0x1F, 0x20, 0x40, 0x20, 0x1F},    // 0x56 V

    {0x3F, 0x40, 0x38, 0x40, 0x3F},    // 0x57 W

    {0x63, 0x14, 0x08, 0x14, 0x63},    // 0x58 X

    {0x07, 0x08, 0x70, 0x08, 0x07},    // 0x59 Y

    {0x61, 0x51, 0x49, 0x45, 0x43},    // 0x5A Z

    {0x00, 0x7F, 0x41, 0x41, 0x00},    // 0x5B [

    {0x02, 0x04, 0x08, 0x10, 0x20},    // 0x5C (\)

    {0x00, 0x41, 0x41, 0x7F, 0x00},    // 0x5D ]

    {0x04, 0x02, 0x01, 0x02, 0x04},    // 0x5E ^

    {0x40, 0x40, 0x40, 0x40, 0x40},    // 0x5F _

    {0x00, 0x01, 0x02, 0x04, 0x00},    // 0x60 `

    {0x20, 0x54, 0x54, 0x54, 0x78},    // 0x61 a

    {0x7F, 0x48, 0x44, 0x44, 0x38},    // 0x62 b

    {0x38, 0x44, 0x44, 0x44, 0x20},    // 0x63 c

    {0x38, 0x44, 0x44, 0x48, 0x7F},    // 0x64 d

    {0x38, 0x54, 0x54, 0x54, 0x18},    // 0x65 e

    {0x08, 0x7E, 0x09, 0x01, 0x02},    // 0x66 f

    {0x0C, 0x52, 0x52, 0x52, 0x3E},    // 0x67 g

    {0x7F, 0x08, 0x04, 0x04, 0x78},    // 0x68 h

    {0x00, 0x04, 0x7D, 0x00, 0x00},    // 0x69 i

    {0x20, 0x40, 0x44, 0x3D, 0x00},    // 0x6A j

    {0x7F, 0x10, 0x28, 0x44, 0x00},    // 0x6B k

    {0x00, 0x41, 0x7F, 0x40, 0x00},    // 0x6C l

    {0x7C, 0x04, 0x18, 0x04, 0x7C},    // 0x6D m

    {0x7C, 0x08, 0x04, 0x04, 0x78},    // 0x6E n

    {0x38, 0x44, 0x44, 0x44, 0x38},    // 0x6F o

    {0x7C, 0x14, 0x14, 0x14, 0x08},    // 0x70 p

    {0x08, 0x14, 0x14, 0x18, 0x7C},    // 0x71 q

    {0x7C, 0x08, 0x04, 0x04, 0x08},    // 0x72 r

    {0x48, 0x54, 0x54, 0x54, 0x20},    // 0x73 s

    {0x04, 0x3F, 0x44, 0x40, 0x20},    // 0x74 t

    {0x3C, 0x40, 0x40, 0x20, 0x7C},    // 0x75 u

    {0x1C, 0x20, 0x40, 0x20, 0x1C},    // 0x76 v

    {0x3C, 0x40, 0x30, 0x40, 0x3C},    // 0x77 w

    {0x44, 0x28, 0x10, 0x28, 0x44},    // 0x78 x

    {0x0C, 0x50, 0x50, 0x50, 0x3C},    // 0x79 y

    {0x44, 0x64, 0x54, 0x4C, 0x44},    // 0x7A z

    {0x00, 0x08, 0x36, 0x41, 0x00},    // 0x7B {

    {0x00, 0x00, 0x77, 0x00, 0x00},    // 0x7C |

    {0x00, 0x41, 0x36, 0x08, 0x00},    // 0x7D }

    {0x08, 0x04, 0x08, 0x10, 0x08}     // 0x7E ~

};


-------------------------------------------------------------------------------------------------------------------


#define    GLCD_DATABUS         PORTA

#define    GLCD_CONTROL         PORTF

// #define    GLCD_CONTROL_RS      0

// #define    GLCD_CONTROL_RW      1

// #define    GLCD_CONTROL_EN      2

// #define    GLCD_CONTROL_CS1     3

// #define    GLCD_CONTROL_CS2     4

// #define    GLCD_CONTROL_RSTB    5


unsigned char X_Char, Y_Char;

unsigned char Cursor = 0, X_Cursor, Y_Cursor;


void Device_Init (void) {

    DDRA = 0xFF;

    PORTA = 0x00;

    DDRF = 0xFF;

    PORTF = 0x00;

}


void GLCD_Instruction (unsigned char Inst, unsigned char Data) {

    GLCD_CONTROL = Inst & 0x38;         // RS 0, E 0

    delay_us(10);

    GLCD_DATABUS = Data;

    GLCD_CONTROL = (Inst & 0x38) | 0x04;    // RS 0, E 1

    delay_us(10);

    GLCD_CONTROL = Inst & 0x38;         // RS 0, E 0

    GLCD_CONTROL = 0x20;            // All Clear

    delay_us(100);

}


void GLCD_Data (unsigned char Inst, unsigned char Data) {

    GLCD_CONTROL = (Inst & 0x38) | 0x01;    // RS 1, E 0

    delay_us(10);

    GLCD_DATABUS = Data;

    GLCD_CONTROL = (Inst & 0x38) | 0x05;    // RS 1, E 1

    delay_us(10);

    GLCD_CONTROL = (Inst & 0x38) | 0x01;    // RS 1, E 0

    GLCD_CONTROL = 0x20;            // All Clear

    delay_us(100);

}


void GLCD_Init (void) {

    unsigned char i, j, k;


    GLCD_CONTROL = 0x00;         // All Clear

    GLCD_Instruction(0x38, 0x3F);    // CS1, CS2 Display On

    GLCD_Instruction(0x38, 0xC0);    // CS1, CS2 Display Position


    k = 0xB8;

    for(i=0; i<=7; i++) {

    GLCD_Instruction(0x38, k);       // X Start Address

    GLCD_Instruction(0x38, 0x40);    // Y Start Address

    for(j=0; j<=63; j++)

        GLCD_Data(0x38, 0x00);       // Clear CS1, CS2

    k++;

    }

}


void GLCD_X_Y (unsigned char X, unsigned char Y) {

    X_Char = X;    Y_Char = Y;

  

    GLCD_Instruction(0x38, 0xB8 + X_Char);


    // CS1 1, CS2 0

    if(Y_Char <= 9)    GLCD_Instruction(0x28, 0x40 + Y_Char * 6 + 4);

    // CS1 0, CS2 1

    else           GLCD_Instruction(0x30, 0x40 + (Y_Char - 10) * 6);

}


void GLCD_Character (unsigned char Data) {

    unsigned char i, Inst, Font_Data;


    GLCD_X_Y(X_Char, Y_Char);

    if(Y_Char <= 9)    Inst = 0x28;

    else           Inst = 0x30;

    for(i=0; i<=4; i++) {

    Font_Data = GLCD_Font[Data - 0x20][i];

    if((Cursor == 1) && (X_Char == X_Cursor) && (Y_Char == Y_Cursor))

        GLCD_Data(Inst, Font_Data | 0x80);

    else

        GLCD_Data(Inst, Font_Data);

    }

    GLCD_Data(Inst, 0x00);    Y_Char++;

    if(Y_Char == 20) { Y_Char = 0; X_Char++; }

}


void GLCD_String (unsigned char X, unsigned char Y, unsigned char *Str) {

    X_Char = X;    Y_Char = Y;

    while(*Str != '\0') {

    GLCD_Character(*Str);

    Str++;

    }

}