
Проблем с LCD 4x16 AC-164A и PIC16F886.
Проблема е че не се изписва думата на дисплея. Нещо май не съм направил както трябва. Използвам съм драйвера за 4 бит от hi-tech и се опитах да го преработя в 8 битов.
#define LCD_RS RC5
#define LCD_RW RC6
#define LCD_EN RC7
#define LCD_DATA PORTB
#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN = 0))
void
lcd_write(unsigned char c)
{
delay_ms(100);
LCD_RW = 0;
LCD_DATA = ( ( c >> 8 ) & 0xFF );
LCD_STROBE();
LCD_DATA = ( c & 0xFF );
LCD_STROBE();
}
void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
delay_ms(2);
}
void
lcd_sends(const char *s) // записване на символи
{
LCD_RS = 1;
while(*s)
lcd_write(*s++);
}
void
lcd_send(char c) // записване на символ
{
LCD_RS = 1;
lcd_write( c );
}
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
void
lcd_init(void)
{
char init_value;
init_value = 0x3;
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
delay_ms(60);
LCD_DATA = init_value;
LCD_STROBE();
delay_ms(10);
LCD_STROBE();
delay_ms(10);
LCD_STROBE();
delay_ms(10);
LCD_DATA = 2;
LCD_STROBE();
lcd_write(0x38);
lcd_write(0xC);
lcd_clear();
lcd_write(0x06);
}
/**********************************************************************************************/
void main(void)
{
OSCCON = 0b01100111; //вътрешен осцилатор - 4MHz
OPTION = 0b00110111; //включване на изтеглящи резистори на PORTB, такт на TMR0-от крак RA4, от високо към ниско ниво, 1:256
TRISC = 0b00000000;
TRISB = 0b00000000;
lcd_init();
lcd_goto(0x3);
lcd_send(BG_Z);
lcd_send(BG_d);
lcd_send('p');
lcd_send('a');
lcd_send(BG_v);
lcd_send('e');
lcd_send(BG_ii);
lcd_send(BG_t);
lcd_send('e');
lcd_send(0x21);
}
Буквите съм ги дефинирал.