Страница 1 из 1

инициализация графического ЖКИ

Добавлено: Пн мар 15, 2010 13:34:43
goodking
Привет!! :) Не проходит инициализация в граф.ЖКИ (мк SiLabs c8051F120
LCD t6963c) после запуска программы на экране появляется всякий мусор (буквы, линии...), а когда пытаюсь вывести символ-экран опять полностью закрашивается :( . Подскажите, с чем это может быть связано??

Код: Выделить всё

#include "c8051F120.h"

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;

char 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;// disable WDT
	SFRPAGE   = CONFIG_PAGE;
    P2MDOUT   = 0xFF;
    P4MDOUT   = 0xFF;// инициализация портов (push-pull)
	XBR2      = 0x40;

    LcdInit();

   
    
 
    

while (1) {};
}


char GetStatusLCD(void)
{
char i;


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


for (a=0;a<2;a++);//Задержка


i=P4;

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

for (a=0;a<2;a++);//Задержка

return i;

}

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++);//задержка

P4=bt;
WR=0;
CE=0;



for (i=0;i<2;i++);//задержка

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



void LcdInit()
{
CE=1;
RST=1;
CD=1;
RD=1;
WR=1;
RST=0;
delay(10000);
RST=1;
while ((GetStatusLCD()&0x03)!=0x03);//опрос флагов готовности ЖКИ
Send8LCD(0,0x00);// подпрограмма передачи данных или команд в ЖКИ
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);//Text Home Address
Send8LCD(1,0x40);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Graphic Home Address
Send8LCD(1,0x42);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Text Area
Send8LCD(1,0x41);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Graphic Area
Send8LCD(1,0x43);
while ((GetStatusLCD()&0x03)!=0x03);//OR mode
Send8LCD(1,0x80);

while ((GetStatusLCD()&0x03)!=0x03);//ВКЛ. ТЕКСТ, ВЫКЛ. ГРАФИКУ, ВЫКЛ. КУРСОР
Send8LCD(1,0x94);
}