Совсем недавно начал изучать микроконтроллеры. Пытаюсь в Proteus7 присоединить LCD-дисплей LM016L к Atmega8535. Получившаяся схема подключения во вложенном файле.
В среде разработки IAR написал следующую программу (команды дисплея взял из даташита к нему).
- Код: Выделить всё • Развернуть
#include "iom8535.h"
short unsigned int i;
//Ожидание готовности дисплея
void ReadyWait(){
do{
DDRD = 0;
DDRA = 255;
PORTA = 6;
asm("NOP");
PORTA = 2;
}while((PORTD & 128) == 1);
}
int main( void )
{
//Выбираем шину в 8 бит и 2 строки
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 56;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Очистка экрана
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 1;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Настройка сдвига экрана и курсора
//Инкремент адреса. Экран не движется
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 6;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Включили дисплей
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 12;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Очистили дисплей. Указатель встал на DDRAM
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 1;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Сдвинули курсор (S/C=0) вправо (R/L=1)
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 4;
PORTD = 20;
asm("NOP");
PORTA = 0;
DDRD = 0;
//Выводим 1
ReadyWait();
DDRD = 255;
DDRA = 255;
PORTA = 5;
PORTD = 49;
asm("NOP");
PORTA = 0;
DDRD = 0;
return 0;
}
Все нормально компилируется. После присоединения программы к микроконтроллеру в Proteus7 и запуска дисплей загорается но информация (цифра 1) на нем не выводится. Попробовал поотлаживать но проблема так и не всплыла. Подскажите пожалуйста в чем может быть проблема. Мне самому кажется что я не правильно что то соединил в схеме. По идее там должен быть еще контроллер самого дисплея но как через него работать и зачем тогда нам самим дается 8 линий данных и 3 линии комманд на самом дисплее не ясно.
Подскажите пожалуйста или скажите что можно почитать. Всем огромное спасибо!