Character LCD Control

 

Character LCD 에 문자열을 출력하는 예제입니다.

LCD 에 아래의 문자열이 출력됩니다.

WATSIM LCD TEST

watsim.tistory.c

 

        

 

 

 

 

LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

 

        

 

 

 

전체 소스 Codevision 용

 

 

   

/*********************************************

Character LCD Control

PORTC ==> LCD DataLine

PORTD.7 ==> LCD RS

PORTD.6 ==> LCD RW

PORTD.5 ==> LCD E

 

 

Main Clock : 8Mhz

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

#define LCD_RS 7

#define LCD_EA 5

 

void CLCD_XY(BYTE x1, BYTE y1);

void CLCD_COMMAND(BYTE data);

void CLCD_ON();

BYTE LCD_BUSYCHK();

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str);

void LCD_PUTCHAR(BYTE chr);

void LCD_CLEAR();

 

// time delay for us

void Delay_us(unsigned char time_us)        

{

    register unsigned char i;

    for(i = 0; i < time_us; i++)

    {

#asm

        PUSH R0 ;

        POP R0 ;

#endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    unsigned char chLCDdata = '0';

    DDRA = 0x00;    

    DDRC = 0xFF;    

    DDRD = 0xFF;    

 

    SetBit(PORTD,5);    // ENABLE

    ClearBit(PORTD,6);

 

 

    CLCD_ON();

    LCD_CLEAR();

 

 

    while (1)

    {

        LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

        LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

        Delay_ms(100);

    }

}

 

BYTE LCD_BUSYCHK()

{

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    

    return (0);

}

 

 

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str)

{

    int len = 0;

    CLCD_XY(x,y);

    while(*str ){

        if(len>16) break;

        LCD_PUTCHAR(*str++);

        len++;

    }

}

 

 

 

void LCD_PUTCHAR(BYTE data)

{

    while(LCD_BUSYCHK());

    ClearBit(PORTD,LCD_EA);

    SetBit(PORTD,LCD_RS);

    Delay_us(2);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(50);

    ClearBit(PORTD,LCD_EA);

}

 

void LCD_CLEAR()

{

    CLCD_COMMAND(1);

    Delay_ms(1);

    CLCD_COMMAND(2);

    Delay_ms(1);

}

 

void CLCD_XY(BYTE x, BYTE y)

{

    BYTE position;

    if(x>16) x = 0;

    switch(y)

    {

    case 0 :

        position = 0x80;

        break;

    case 1 :

        position = 0xC0;

        break;

    }

    CLCD_COMMAND(position + x);

}

 

void CLCD_COMMAND(BYTE data)

{

    while(LCD_BUSYCHK()){}

    ClearBit(PORTD,LCD_RS);

    ClearBit(PORTD,LCD_EA);

    Delay_us(1);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(20);

    ClearBit(PORTD,LCD_EA);

    Delay_us(50);

}

 

void CLCD_ON()

{

    CLCD_COMMAND(0x01);// dummy

    CLCD_COMMAND(0x38);

    CLCD_COMMAND(0x0C );

    CLCD_COMMAND(0x01);

    CLCD_COMMAND(0x06);

    CLCD_COMMAND(0x01);

    Delay_ms(2);

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

ABC016002E57 – 1EA
Character LCD 16x2

POWER 5V/1A

 

 

Posted by WhiteAT
,