Код: Выделить всё
#define LCD_RES (1<<0)
#define LCD_A0 (1<<1)
#define LCD_RW (1<<2)
#define LCD_E (1<<3)
#define LCD_C86 (1<<4)
#define LCD_PS (1<<5)
#define LCD_HPM (1<<6)
#define LCD_IRS (1<<7)
#define LCD_0 LCD_IRS|LCD_HPM|LCD_PS|LCD_RES|LCD_C86
void lcd_out_i(unsigned char data)
{
lcd_wait();
asm volatile ("nop");
lcd_cs_clr();
asm volatile ("nop");
PORTB = LCD_0;
asm volatile ("nop");
PORTA = data;
asm volatile ("nop");
PORTB |= LCD_E;
asm volatile ("nop");
PORTB &= ~LCD_E;
asm volatile ("nop");
lcd_cs_set();
asm volatile ("nop");
}
void lcd_out_d(unsigned char data)
{
lcd_wait();
lcd_cs_clr();
asm volatile ("nop");
PORTB = LCD_0|LCD_A0;
asm volatile ("nop");
PORTA = data;
asm volatile ("nop");
PORTB |= LCD_E;
asm volatile ("nop");
PORTB &= ~LCD_E;
asm volatile ("nop");
PORTB = LCD_0;
lcd_cs_set();
}
void lcd_wait()
{
tmpuc = 0x00;
DDRA = 0;
asm volatile ("nop");
PORTB = LCD_0;
asm volatile ("nop");
PORTB |= LCD_RW;
asm volatile ("nop");
lcd_cs_clr();
asm volatile ("nop");
PORTB |= LCD_E;
asm volatile ("nop");
tmpuc = PINA & 0x80;
asm volatile ("nop");
PORTB &= ~LCD_E;
asm volatile ("nop");
while(tmpuc)
{
PORTB |= LCD_E;
asm volatile ("nop");
tmpuc = PINA & 0x80;
asm volatile ("nop");
PORTB &= ~LCD_E;
}
lcd_cs_set();
PORTB = LCD_0;
asm volatile ("nop");
DDRA = 0xff;
}
Пока делаю в чтении статуса, что бы при работе дисплея включался диод (отладчика нет). Но ни lcd_out_i(0xAF), ни lcd_out_i(0xAE) ничего не меняют.
И ещё не понятно назначение вывода "VRS - This is the internal-input VREG power supply for the lcd power supply". Что к нему подключать?
Конденсаторы к выводам CAP подключены. Хотя думаю, от этого работает только сам дисплей, а не его контроллер.
В общем, прошу помощи.

