This is the library coding for LCD display...
in this coding..the LCD display is defined to be connected to port B in a microcontroller,
anyone knows how to change this coding to make the LCD display connected to port C instead..
anyone?
Code:
#define use_portb_lcd TRUE
struct lcd_pin_map {
BOOLEAN enable;
BOOLEAN rs;
BOOLEAN rw;
BOOLEAN unused;
int data: 4;
}lcd;
#if defined(_PCH_)
#if defined use_portb_lcd
#byte lcd = 0xF81
#else
#byte lcd = 0xF83
#endif
#else
#if defined use_portb_lcd
#byte lcd = 6
#else
#byte lcd = 8
#endif
#endif
#if defined use_portb_lcd
#define set_tris_lcd(x) set_tris_b(x)
#else
#define set_tris_lcd(x) set_tris_d(x)
#endif
#define lcd_type 2
#define lcd_line_two 0x40
BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
struct lcd_pin_map const LCD_WRITE = {0, 0, 0, 0, 0};
struct lcd_pin_map const LCD_READ = {0, 0, 0, 0, 15};
BYTE lcd_read_byte() {
BYTE low, high;
set_tris_lcd(LCD_READ);
lcd.rw=1;
delay_cycles(1);
lcd.enable = 1;
delay_cycles(1);
high = lcd.data;
lcd.enable = 0;
delay_cycles(1);
lcd.enable = 1;
delay_us(1);
low = lcd.data;
lcd.enable = 0;
set_tris_lcd(lCD_WRITE);
return ( (high<<4) | low);
}
void lcd_send_nibble(BYTE n) {
lcd.data = n;
delay_cycles(1);
lcd.enable = 1;
delay_us(2);
lcd.enable = 0;
}
void lcd_send_byte( BYTE address, BYTE n) {
lcd.rs = 0;
while ( bit_test(lcd_read_byte(),7) );
lcd.rw = address;
delay_cycles(1);
lcd.rw = 0;
delay_cycles(1);
lcd.enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
void lcd_init() {
BYTE i;
set_tris_lcd(LCD_WRITE);
lcd.rs = 0;
lcd.rw = 0;
lcd.enable = 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 lcd_gotoxy(BYTE x, BYTE y) {
BYTE address;
if (y!=1)
address=lcd_line_two;
else
address=0;
address+=x-1;
lcd_send_byte(0,0x80|address);
}
void lcd_putc( char c) {
switch (c) {
case '\f' : lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n' : lcd_gotoxy(1,2); break;
case '\b' :lcd_send_byte(0,0x10); break;
default : lcd_send_byte(1,c); break;
}
}
char lcd_getc(BYTE x, BYTE y) {
char value;
lcd_gotoxy(x,y);
while ( bit_test (lcd_read_byte(), 7) );
lcd.rs=1;
value = lcd_read_byte();
lcd.rs=0;
return(value);
}