использую Winstar WH1602a-NGG-CP LCD display.
но надо нестандартное включение:
(смотри схему ниже)
Программа тут:
- Код: Выделить всё • Развернуть
- /*****************************************************
 CodeWizardAVR V1.25.9
 Project : lcd-2
 Version : 1
 Date : 10.02.2010
 Author : alex
 Company : SVR
 Comments:
 Chip type : ATmega8
 Program type : Application
 Clock frequency : 16,000000 MHz
 Memory model : Small
 External SRAM size : 0
 Data Stack size : 256
 *****************************************************/
 #include <mega8.h>
 // Standard Input/Output functions
 #include <stdio.h>
 #include <delay.h>
 // ==============================================
 // Declare your global variables here
 char i;
 unsigned char pc;
 void init_mylcd(void)
 {
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x03; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1); // delay = 1 milisecond
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x03; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 delay_ms(100);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x03; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x02; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x02; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x0C; // init N+F
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x00; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x08; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x00; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x01; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x00; // init !
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=0; // ïîäíèìàåì RS â 0
 pc=0x07; // init ID+S
 // pc|=0b00100000; // ïîäíèìàåì Å â 1
 pc&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=pc; // âûâîäèì äàííûå èç ðñ
 PORTC.5=1; // Å â 1
 delay_ms(1);
 PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
 delay_ms(5);
 PORTC.4=1; // ïîäíèìàåì RS â 1
 delay_ms(220);
 }
 void WriteIns(unsigned char instruction)
 {
 unsigned char tmp;
 PORTC.4=0; // ïîäíèìàåì RS â 0
 tmp=instruction>>4;
 // tmp|=0b00100000; // ïîäíèìàåì Å â 1
 tmp&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC=tmp; // âûâîäèì äàííûå
 PORTC.5=1; // ïîäíèìàåì Å â 1
 delay_ms(1);
 PORTC.5=0; // ïîäíèìàåì Å â 0
 // instruction|=0b00100000; // ïîäíèìàåì Å â 1
 instruction&=0b00001111; // ãàñèì ñòàðø.áèòû
 PORTC.4=0; // ïîäíèìàåì RS â 0
 PORTC=instruction; // âûâîäèì äàííûå
 PORTC.5=1; // ïîäíèìàåì Å â 1
 delay_ms(1);
 PORTC.5=0; // ïîäíèìàåì Å â 0
 delay_ms(100);
 }
 void WriteData(unsigned char data1)
 {
 unsigned char tmp1;
 PORTC.4=1; // ïîäíèìàåì RS â 1
 tmp1=data1>>4;
 // tmp1|=0b00110000; // ïîäíèìàåì Å è RS â 1
 tmp1&=0b00011111; // ãàñèì ñòàðø.áèòû
 PORTC=tmp1; // âûâîäèì äàííûå
 PORTC.5=1; // ïîäíèìàåì Å â 1
 delay_ms(1);
 PORTC.5=0; // ïîäíèìàåì Å â 0
 // data1|=0b00110000; // ïîäíèìàåì Å è RS â 1
 data1&=0b00011111; // ãàñèì ñòàðø.áèòû
 PORTC.4=1; // ïîäíèìàåì RS â 1
 PORTC=data1; // âûâîäèì äàííûå
 PORTC.5=1; // ïîäíèìàåì Å â 1
 delay_ms(1);
 PORTC.5=0; // ïîäíèìàåì Å â 0
 delay_ms(100);
 }
 void main(void)
 {
 PORTB=0x00;
 DDRB=0x00;
 PORTC=0x00;
 DDRC=0x7F;
 PORTD=0x00;
 DDRD=0x00;
 // External Interrupt(s) initialization
 // INT0: Off
 // INT1: Off
 MCUCR=0x00;
 // Global enable interrupts
 #asm("sei")
 while (1)
 {
 delay_ms(500);
 init_mylcd();
 // ---------------------
 i=0;
 pc=0;
 for (i=0; i<20; i++)
 {
 WriteIns(0x00); // Óñòàíîâèëè êóð â 1 ïîç ïåð ñòðîê
 WriteData(0x44); // âûâåëè "D"
 WriteIns(0x01); // âòîð ïîçèöèÿ ïåð ñòîðîêè
 WriteData(0x49); // âûâåëè "I"
 WriteIns(0x02); // òðåòüÿ ïîçèöèÿ ïåð ñòîðîêè
 WriteData(0x47); // âûâåëè "G"
 WriteIns(0x03); // ÷åòâåðòàÿ ïîçèöèÿ ïåð ñòîðîêè
 WriteData(0x49); // âûâåëè "I"
 WriteIns(0x04); // ïÿòàÿ ïîçèöèÿ ïåð ñòîðîêè
 WriteData(0x54); // âûâåëè "T"
 delay_ms(500);
 }
 delay_ms(1000);
 };
 }
Писано "дебильно"
 потому что я уже задолбался - не работает дисплей - ни одного символа не выводит и инит не проходит. Осциллографом все проверил - все сигналы АТмега8 выдает, ЖКИ сам рабочий - проверял на другом контроллере...
 потому что я уже задолбался - не работает дисплей - ни одного символа не выводит и инит не проходит. Осциллографом все проверил - все сигналы АТмега8 выдает, ЖКИ сам рабочий - проверял на другом контроллере...Пайка нормальная - проверил все что можно.
Косяков нет.
ПОМОГИТЕ !!!
саму тему такого нестандартного включения я брал отсюда:
http://www.pocketmagic.net/?p=447

 
 



 
 

