реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> инициализация графического LCD
goodking
сообщение Mar 11 2010, 12:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Привет! Не проходит инициализация ЖКИ, подскажите, в чем ошибка, или посоветуйте пример, т.к. перепробовал уже несколько различных вариантов, но кроме мусора на экране ничего не получается
мк SiLabs c8051F120
LCD t6963c

CODE
#include "c8051F120.h"

#define DATA P4

#define BUSY P4&0x03

sbit WR=P2^0;

sbit RD=P2^1;

sbit CE=P2^2;

sbit CD=P2^3;

sbit RST=P2^4;

sbit FS=P2^5;

sbit RV=P2^6;

void GetStatusLCD(void);
void LcdInit (void);
void Send8LCD(unsigned char cmd, unsigned char bt);
void LcdInit(void);
void delay(unsigned int i);
int a;

void main (void)

{ WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = CONFIG_PAGE;

P2MDOUT = 0xFF;
P4MDOUT = 0xFF;
XBR2 = 0x40;

LcdInit();





while (1) {};
}


void GetStatusLCD(void)
{


RD=0;
WR=1;
CE=0;
CD=1;

for (a=0;a<2;a++);


while(BUSY != 0x03);

CE = 1;
CD = 1;
WR = 1;
RD = 1;
delay(50);
}


void delay(unsigned int i)
{
while ( i--!=0);
}



void Send8LCD(unsigned char cmd, unsigned char bt)
{
char i;

if (cmd)
CD=1;
else
CD=0;

for (i=0;i<2;i++);

CE=0;
WR=0;
DATA=bt;

for (i=0;i<2;i++);

CE=1;
WR=1;
CD=1;
}



void LcdInit()
{
delay(1000);
RST=0;
GetStatusLCD();
RST=1;

Send8LCD(1,0x80);
GetStatusLCD();
Send8LCD(0,0x00);//graphic home
GetStatusLCD();
Send8LCD(0,0x00);
GetStatusLCD();
Send8LCD(1,0x42);
GetStatusLCD();
Send8LCD(0,0x28);//graphic ar
GetStatusLCD();
Send8LCD(0,0x00);
GetStatusLCD();
Send8LCD(1,0x43);
GetStatusLCD();
Send8LCD(0,0x00);//text home
GetStatusLCD();
Send8LCD(0,0x17);
GetStatusLCD();
Send8LCD(1,0x40);
GetStatusLCD();
Send8LCD(0,0x28);//text ar
GetStatusLCD();
Send8LCD(0,0x00);
GetStatusLCD();
Send8LCD(1,0x41);
GetStatusLCD();
Send8LCD(0,0x17);
GetStatusLCD();
Send8LCD(0,0x00);
GetStatusLCD();
Send8LCD(1,0x24);

GetStatusLCD();
Send8LCD(0,0x24);
GetStatusLCD();
Send8LCD(1,0xc0);
GetStatusLCD();
Send8LCD(0,0x25);
GetStatusLCD();
Send8LCD(1,0xc0);
GetStatusLCD();
Send8LCD(0,0x2e);
GetStatusLCD();
Send8LCD(1,0xc0);
GetStatusLCD();
Send8LCD(1,0x9c);

}
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 11 2010, 18:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Запись типа sbit WR=P2^0; из какого языка/компилятора?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 11 2010, 18:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(rezident @ Mar 11 2010, 21:21) *
Запись типа sbit WR=P2^0; из какого языка/компилятора?

А какая разница? Кто-то будет вычитывать весе это обильное нагромождение букв, цифр и символов в котором сам Автор и не собирается разбираться?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Sensar
сообщение Mar 11 2010, 23:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 18-02-09
Пользователь №: 45 052



Не понятно зачем несколько прототипов функциий, и что то запутанная процедура инициализации.
Временные интервалы для каждой команды инициализации выдержены?

Сообщение отредактировал rezident - Mar 12 2010, 03:58
Причина редактирования: Дурацкое цитирование.
Go to the top of the page
 
+Quote Post
goodking
сообщение Mar 12 2010, 07:25
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(rezident @ Mar 11 2010, 22:21) *
Запись типа sbit WR=P2^0; из какого языка/компилятора?

Описание sbit

Сообщение отредактировал zltigo - Mar 12 2010, 13:56
Причина редактирования: Убрано повторное!!! самоцитирование мутного исзодника
Go to the top of the page
 
+Quote Post
goodking
сообщение Mar 12 2010, 10:56
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Извиняюсь, в предыдущем коде я неверно указал опрос флагов готовности, и как я догадываюсь, в них вся проблема,

правильно так
Код
char GetStatusLCD(void)
{


char i;
i=0;
CD=1;
WR=1;
CE=0;
RD=0;

for (a=0;a<2;a++);

i=DATA;

WR=1;
RD=1;
CE=1;
CD=1;

for (a=0;a<2;a++);
return i;


}


тогда инициализация будет выглядеть так:
Код
void LcdInit()
{
delay(1000);
RST=0;
delay(100);
RST=1;

Send8LCD(1,0x80);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);//graphic home
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x42);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x28);//graphic ar
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x43);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);//text home
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x17);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x40);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x28);//text ar
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x41);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x17);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x24);

while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x24);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x25);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x2e);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x9c);

}
почему-то программа зависает на первой же проверке статуса, с чем это может быть связано??
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение Mar 15 2010, 15:03
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



2 goodking
В вашем коде не видна продедура инициализации МК. Правильно ли настроены порты MK? Crossbar включен? Раз пишете, потом читаете с порт P4 (DATA) надо менять настройки порта, на вход(выход).
Чтоб легхче сделать инициализацию МК лучше использовать Config Wizard с сайта производителя.
В проект правильно ли указана частота на кот. работает МК?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 15 2010, 15:09
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(-JonnS- @ Mar 15 2010, 18:03) *
Чтоб легхче сделать инициализацию МК лучше использовать Config Wizard с сайта производителя.

Упаси бог, еще добавить к имеющемуся еще и мусор от волшебника sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение Mar 15 2010, 15:25
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Тоже его ловил в ошибках. Ползовался в самом начале проекта, как бы сгенерировать "рыбу", потом перепроверял ВСЕ что сгенерил волшебник. Помощ в основном, чтоб не забыть проинициализировать что небуть. laughing.gif
Go to the top of the page
 
+Quote Post
goodking
сообщение Mar 15 2010, 15:29
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(-JonnS- @ Mar 15 2010, 18:03) *
2 goodking
В вашем коде не видна продедура инициализации МК. Правильно ли настроены порты MK? Crossbar включен? Раз пишете, потом читаете с порт P4 (DATA) надо менять настройки порта, на вход(выход).
Чтоб легхче сделать инициализацию МК лучше использовать Config Wizard с сайта производителя.
В проект правильно ли указана частота на кот. работает МК?

Показана в самом начале темы! Порты настроены (push-pull)
Код
    P2MDOUT   = 0xFF;
    P4MDOUT   = 0xFF;
, crossbar включен
Код
XBR2 = 0x40;
! С флагами разобрался, не проходит инициализация, во всех примерах указано почему-то по разному.

Сообщение отредактировал goodking - Mar 15 2010, 15:56
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 16 2010, 16:34
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(goodking @ Mar 15 2010, 20:29) *
во всех примерах указано почему-то по разному.
Поэтому нужно писать работу с периферией самому, своими ручками, осмысленно и на основе чтения оригинальной документации, а не пользуясь визардами или какими-то "левоватыми" примерами.
Go to the top of the page
 
+Quote Post
goodking
сообщение Mar 26 2010, 11:04
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Спасибо, с инициализацией разобрался! Но такой вопрос: какой командой отключается реверс отображения. Перепробовал все режимы (OR, EXOR, AND), никакого результата- все буквы на черном фоне.
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 27 2010, 01:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Если уж кросспостите по разным форумам, то делайте это одновременно.
Цитата
я забыл про существование ножки RV =) - silver(Вчера, 18:50)

http://caxapa.ru/186969.html
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 03:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016