#define D7 PORTD.F7
#define D6 PORTD.F6
#define D5 PORTD.F5
#define D4 PORTD.F4
#define E PORTD.F3
#define RS PORTD.F2
void lcd_send_nibble( unsigned char n ) {
D7 = (n >> 3) & 1;
D6 = (n >> 2) & 1;
D5 = (n >> 1) & 1;
D4 = n & 1;
_asm nop
E=1;
delay_us(2);
E=0;
}
void lcd_send_byte( unsigned char address, unsigned char n ) {
RS = address;
_asm nop
E = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
Delay_ms(200);
}
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
unsigned char const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
void xlcd_init() {
unsigned char i;
RS = 0;
E = 0;
Delay_ms(15);
for(i=1;i<=3;++i) {
lcd_send_nibble(3);
Delay_ms(5);
}
lcd_send_nibble(2);
for(i=0;i<=3;++i)
lcd_send_byte(0,LCD_INIT_STRING[i]);
}
void main(){
ADCON1 = 0xff;
TRISD = 0;
PORTD = 0;
TRISC = 0;
PORTC = 0;
xlcd_init();
lcd_send_byte(0,1); //clear screen
lcd_send_byte(1,'h');
lcd_send_byte(1,'e');
lcd_send_byte(1,'l');
lcd_send_byte(1,'l');
lcd_send_byte(1,'o');
}