#include #include "mylcd.h" #include "delay.h" #include "MyI2C.h" bit enable0; bit enable1; void mylcd_strobe(void) { if (enable0) LCD_EN0 = 1; if (enable1) LCD_EN1 = 1; asm("nop"); asm("nop"); DelayUs(1); if (enable0) LCD_EN0 = 0; if (enable1) LCD_EN1 = 0; } void mylcd_write_byte(unsigned char data) { StartI2C(LCD_IC); WriteI2CByte( data ); StopI2C(); DelayUs(4); //I2C spec's siger min 4.7 uSec mellem stop og nęste start } void mylcd_cmd(unsigned char c) { LCD_WAIT; // may check LCD busy flag, or just delay a little, depending on lcd.h mylcd_write_byte(c); mylcd_strobe(); } void mylcd_data(unsigned char c) { LCD_WAIT; // may check LCD busy flag, or just delay a little, depending on lcd.h LCD_RS0 = 1; LCD_RS1 = 1; mylcd_cmd(c); LCD_RS0 = 0; LCD_RS1 = 0; } void mylcd_init(void) { char init_value = 0x3F; mylcd_write_byte(0); enable0 = 1; enable1 = 1; LCD_RS0 = 0; LCD_EN0 = 0; LCD_RW0 = 0; LCD_RS0_TRIS = OUTPUT_PIN; LCD_EN0_TRIS = OUTPUT_PIN; LCD_RW0_TRIS = OUTPUT_PIN; LCD_RS1 = 0; LCD_EN1 = 0; LCD_RW1 = 0; LCD_RS1_TRIS = OUTPUT_PIN; LCD_EN1_TRIS = OUTPUT_PIN; LCD_RW1_TRIS = OUTPUT_PIN; /* DelayMs(15); mylcd_write_byte(init_value); mylcd_strobe(); DelayMs(5); mylcd_write_byte(init_value); mylcd_strobe();; DelayUs(200); mylcd_write_byte(init_value); mylcd_strobe(); */ //DEM20485 init DelayMs(35); //Make sure LCD is initialized mylcd_write_byte(0b00110000); mylcd_strobe(); DelayUs(50); mylcd_write_byte(0b00001111); mylcd_strobe(); DelayUs(50); mylcd_write_byte(0b00000001); mylcd_strobe(); DelayMs(2); mylcd_write_byte(0b00000110); mylcd_strobe(); DelayUs(50); /* mylcd_cmd(0x38); mylcd_cmd(0xF); //Display On, Cursor On, Cursor Blink mylcd_cmd(0x1); //Display Clear mylcd_cmd(0x6); //Entry Mode mylcd_cmd(0x80); //Initialize DDRAM address to zero /* mylcd_cmd(0x02); //Home */ } void mylcd_enable_lcd0(unsigned char enable) { if (enable) enable0 = 1; else enable0 = 0; } void mylcd_enable_lcd1(unsigned char enable) { if (enable) enable1 = 1; else enable1 = 0; }