Только начал изучать Си. Хочу запрограммить ЖКИ и вывести хотя бы один символ.
Но не получается
Ниже приведена программа.
Отладка в AVR Studio 4.14 build 589.
Почему на ЖКИ не выводится символ "A"
#include <stdlib.h>
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#define F_CPU 4000000UL
unsigned char E,RS,RW,to_LCD,Value_RS;
/** Функция записи байта в драйвер LCD **
void transmit_to_LCD (void)
{
_delay_ms(10);
// устанавливаем нужное значение бита RS
PORTB|=(Value_RS<<RS);
// записываем в порт команду
PORTA=to_LCD;
// устан. E=1
PORTB= _BV(PB2);
_delay_ms(1);
// E=0
PORTB= ~_BV(PB2);
}
void init_HD44788() // иниц. HD44788
{
// будем записывать команду в регистр IR драйвера LCD поэтому Value_RS=0
Value_RS=0;
_delay_ms(25);
// будем записывать команду в регистр IR драйвера LCD поэтому Value_RS=0
Value_RS=0;
// команда $30
to_LCD=0x030;
// записываем в регистр IR
transmit_to_LCD ();
_delay_ms(7);
to_LCD=0x030;
// записываем в регистр IR
transmit_to_LCD ();
_delay_ms(1);
to_LCD=0x030;
transmit_to_LCD ();
// записываем наиболее популярную последовательность команд
////_delay_ms(1);
to_LCD=0x038;
transmit_to_LCD ();
to_LCD=0x08;
transmit_to_LCD ();
to_LCD=0x0C;
transmit_to_LCD ();
}
int main(void)
{
RS=0; // PB0
RW=1; // PB1 всегдо равен лог. 0!
E=2; // PB2
DDRA=0xFF; // выход
DDRB=0xFF; // выход
PORTB=0x00; // RS,RW,E=0
DDRD=0xFF; // светодиод
// инициируем драйвер ЖКИ
init_HD44788();
// выводим символ A на ЖКИ
// будем записывать команду в буфер ЖК поэтому RS=1
Value_RS=1;
to_LCD="A";
transmit_to_LCD ();
while (1)
{
_delay_ms(100);
PORTD ^= _BV(PD7);
}
}