Цитата(ILYCHOFF @ May 30 2006, 12:25)

Все равно не работает, может у кого есть исходник рабочий для 16*2, просто сравнить, и задержки посмотреть уже не знаю на что думать...

Попробуйте это:
Код
#include <avr_macros.h>
#include "delay.h"
#define EN PORTD
#define EN_Bit 7
#define RS PORTD
#define RS_Bit 5
#define D PORTB
#define lcd_delay 15
// Запись в lcd: mode=0 команда, mode=1 данные
void lcd_write(unsigned char data, unsigned char mode)
{
if (mode) {SETBIT(RS,RS_Bit);} else {CLEARBIT(RS,RS_Bit);}
SETBIT(EN,EN_Bit);
D = (D & 0xF0) | (data >> 4); // старший ниббл
delay_us(lcd_delay);
CLEARBIT(EN,EN_Bit);
delay_us(lcd_delay);
D = (D & 0xF0) | (data & 0x0F); // младший ниббл
SETBIT(EN,EN_Bit);
delay_us(lcd_delay);
CLEARBIT(EN,EN_Bit);
delay_us(lcd_delay*5);
}
void lcd_init(void)
{
lcd_write(0x33, 0); delay_ms(5);
lcd_write(0x32, 0); lcd_write(0x28, 0); // 4 бит, 2 строки
lcd_write(0x08, 0); // полное выключение дисплея
lcd_write(0x01, 0); delay_ms(5); // очистка дисплея
lcd_write(0x06, 0); // сдвиг курсора вправо
lcd_write(0x0C, 0); // включение дисплея, мигающий курсор
// InitCGram();
}
Работает так например:
Код
lcd_init();
lcd_write('Z', 1);
ПС В lcd_init комментарии некорректны.
ППС А за delay.h большое спасибо. Еще бы найти что-нибудь чтобы можно было в IAR-е писать PORTD.3 = 1;