Задача такая: есть PIC16F84A, есть ЖК MT-20S4A
Документация на этот ЖКтут
Программу пишу в среде microC.Передача 4 бита. В программе проходит только инициализация.После выполнения должен мигать курсор
Delay_Cyc(16) - делает задержку:подбирал по дебагеру
delay_ms(int) -задержка в мс
PB0 -ножка 0 порта B
Листинг.
Код
void _LCD_INIT(void){
/*
PB0=DB4;PB1=DB5;PB2=DB6;PB3=DB7;
PB4=A0;PB5=R/W;PB6=E;
|PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0
|XXX| E |R/W|A0 |DB7|DB6|DB5|DB4
*/
delay_ms(20);
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
//----------------
//|PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0
//|XXX| E |R/W|A0 |DB7|DB6|DB5|DB4
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
//Установка параметров
PORTB=0b01000010;
PORTB=0b00000010;
PORTB=0b01001000;
PORTB=0b00001000;
delay_ms(1);
//Выключение дисплея
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01001111;
PORTB=0b00001111;
delay_ms(1);
//Очистка дисплея
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01000001;
PORTB=0b00000001;
delay_ms(1);
//Установка режима ввода данных
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01000110;
PORTB=0b00000110;
delay_ms(1);
}
void main()
{
TRISB = 0x00; //порт B-вывод
PORTB = 0x00;
_LCD_INIT();
while(1)
{};
}
/*
PB0=DB4;PB1=DB5;PB2=DB6;PB3=DB7;
PB4=A0;PB5=R/W;PB6=E;
|PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0
|XXX| E |R/W|A0 |DB7|DB6|DB5|DB4
*/
delay_ms(20);
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000011;
PORTB=0b00000011;
Delay_Cyc(16);
//----------------
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
//----------------
//|PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0
//|XXX| E |R/W|A0 |DB7|DB6|DB5|DB4
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
PORTB=0b01000010;
PORTB=0b00000010;
Delay_Cyc(16);
//Установка параметров
PORTB=0b01000010;
PORTB=0b00000010;
PORTB=0b01001000;
PORTB=0b00001000;
delay_ms(1);
//Выключение дисплея
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01001111;
PORTB=0b00001111;
delay_ms(1);
//Очистка дисплея
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01000001;
PORTB=0b00000001;
delay_ms(1);
//Установка режима ввода данных
PORTB=0b01000000;
PORTB=0b00000000;
PORTB=0b01000110;
PORTB=0b00000110;
delay_ms(1);
}
void main()
{
TRISB = 0x00; //порт B-вывод
PORTB = 0x00;
_LCD_INIT();
while(1)
{};
}
Что я делаю не так? В порт записывают данные с документации (при этом E=1), следующей командой E устанавливаю в 0 (как понял, происходит передача первых 4 бит) ну итд...