Подключил ЖКИ MT-10S1(МЭЛТ) по 4-х битному интерфейсу. Но выводит какую-то ерунду... Помогите пожалуйста! Подключил ЖКИ. Для работы по 4-х битному интерфейсу. Написал программу, в кот. в 7 разряде дисплея должен выводиться симов Z(5Ah). Но у меня выводится какой-то квадратик, а иногда символ "e" в 3 разряде. ЧТо не так? Всю ночь сидел, но так и не разобрался пока...
Пишу программу в AVR Studio 4. Вот листинг:
/*Вывод ЖКИ МЭЛТ MT-10S1
Тактовая частота микроконтроллера ATtiny2313 8МГц-
-следовательно длительность одног такта 125ns*/
#include <io2313v.h>
// задержка
void delay(int takt)
{
while(takt--);
}
// передача байта команды в 4-х битном режиме
void command(int reg)
{
int i;
PORTB = reg; // сначала старшие PB4-PB7
// A=0(поразрядное И с 11111011)
PORTB &= 0x00FB;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные
delay(40000);
// сдвигаем младшие 4 бита на PB4-PB7
reg = reg << 4;
// A=0(поразрядное И с 11111011)
reg &= 0x00FB;
// работаем с младшими 4-мя битами
PORTB = reg;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные
delay(40000);
}
// передача байта данных в 4-х битном режиме
void data(int reg)
{
int i;
PORTB = reg; // сначала старшие PB4-PB7
// A=1(поразрядное ИЛИ с 00000100)
PORTB |= 0x0004;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные
delay(40000);
// сдвигаем младшие 4 бита на PB4-PB7
reg = reg << 4;
// A=1(поразрядное И с 11111011)
reg |= 0x0004;
// работаем с младшими 4-мя битами
PORTB = reg;
//необходимо выдержать Tas=100ns
delay(1);
// E=1
PORTB |= 0x0008;
// удерживаем E=1 в течение PWeh=700ns
delay(6);
// строб E=0
PORTB &= 0x00F7;
//удерживаем данные
delay(40000);
}
// Инициализация модуля ЖКИ
void init(void)
{
int registr, i;
PORTB &= 0x00F7;
for(i=0; i<=3; i++)
{
delay(50000);
}
PORTB = 0x0030;
delay(1);
PORTB |= 0x0008;
delay(2);
PORTB &= 0x00F7;
delay(320);
PORTB |= 0x0008;
delay(2);
PORTB &= 0x00F7;
delay(320);
PORTB |= 0x0008;
delay(2);
PORTB &= 0x00F7;
delay(320);
PORTB = 0x0020;
PORTB |= 0x0008;
delay(2);
PORTB &= 0x00F7;
delay(3);
// разрядность
registr = 0x0028;
command(registr);
delay(320);
// включает индикатор
registr = 0x000C;
command(registr);
delay(320);
// очистка и в левую позицию
registr = 0x0001;
command(registr);
delay(40000);
registr = 0x0006;
command(registr);
delay(320);
}
void main(void)
{
// Инициализация портов процессора
DDRB = 0x00FF;
PORTB = 0x0000;
int registr;
// инициализация модуля ЖКИ
init();
// установка адреса ячейки памяти, в кот. помещ. символ для отобр. в 7 разряде ЖКИ
registr = 0x0086;
command(registr);
//delay(800);
// вывод буквы Z(eng)
registr = 0x005A;
data(registr);
while (1);
}