//
//   LCD Charctor display Interface Library 
//
//      Host CPU: PIC24FJ64GA002
//      Display:  SC2004CS*B (20x4line)
//

#ifndef __C_LCD_H_
#define __C_LCD_H_

#define _C_LCD_INTERFACE_PORT	PORTB
#define _C_LCD_INTERFACE_LAT	LATB
#define _C_LCD_READ_WRITE		LATAbits.LATA4
#define _C_LCD_ENABLE			LATBbits.LATB7
#define _C_LCD_REGISTER_SELECT	LATBbits.LATB4

//================================================================

#define _C_LCD_NUMBER_OF_LINE			4
#define _C_LCD_CHAR_PER_LINE			16

#define _C_LCD_CLEAR_SCREEN				0x01
#define _C_LCD_CURSOR_HOME				0x02
#define _C_LCD_ENTRY_MODE				0x04
#define _C_LCD_ENTRY_MODE_DIRECT_LEFT	0x06
#define _C_LCD_ENTRY_MODE_DIRECT_RIGHT	0x04
#define _C_LCD_ENTRY_MODE_SHIFT_ON		0x05
#define _C_LCD_ENTRY_MODE_SHIFT_OFF		0x04
#define _C_LCD_DISPLAY					0x08
#define _C_LCD_DISPLAY_ON				0x0C
#define _C_LCD_DISPLAY_OFF				0x08
#define _C_LCD_DISPLAY_CURSOR_ON		0x0A
#define _C_LCD_DISPLAY_CURSOR_OFF		0x08
#define _C_LCD_DISPLAY_BLINK_ON			0x09
#define _C_LCD_DISPLAY_BLINK_OFF		0x08
#define _C_LCD_SHIFT					0x10
#define _C_LCD_SHIFT_CURSOR_LEFT		0x10
#define _C_LCD_SHIFT_CURSOR_RIGHT		0x14
#define _C_LCD_SHIFT_DISPLAY_LEFT		0x18
#define _C_LCD_SHIFT_DISPLAY_RIGHT		0x1C
#define _C_LCD_FUNCTION				0x20
#define _C_LCD_FUNCTION_8BIT			0x30
#define _C_LCD_FUNCTION_4BIT			0x20
#define _C_LCD_FUNCTION_2LINE			0x28
#define _C_LCD_FUNCTION_1LINE			0x20
#define _C_LCD_FUNCTION_FONT10			0x24
#define _C_LCD_FUNCTION_FONT7			0x20
#define _C_LCD_CGRAM_ADDRESS_SET		0x40
#define _C_LCD_DDRAM_ADDRESS_SET		0x80

#define _C_LCD_COMMAND					0
#define _C_LCD_DSPDATA					1
#define _C_LCD_WRITE					0
#define _C_LCD_READ					1

void c_lcd_init(void);
void c_lcd_putc(unsigned short);
void c_lcd_setpos(unsigned short, unsigned short);
void c_lcd_line(unsigned short, unsigned char *);
void c_lcd_out(unsigned short, unsigned short);
void c_lcd_wait(void);
void c_lcd_strobe(void);


#endif // __C_LCD_H_

