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 POWER 5V/1A |
'CodeVision 용 소스' 카테고리의 다른 글
4개의 키를 각각 누를 때마다 누른 횟수 증가 하는 예제 (0) | 2011.05.11 |
---|---|
Switch 4개의 상태에 따른 LED ON/OFF 변화 (0) | 2011.02.21 |
LED 순차 소등 하기 PORTC.0 => PORTC.7 순서로 (0) | 2011.02.06 |
LED 순차 점등 하기 PORTC.0 => PORTC.7 순서로 (2) | 2011.02.05 |
1초마다 1칸씩 LED 시프트하기 (0) | 2011.01.28 |