Привет!!
Не проходит инициализация в граф.ЖКИ (мк SiLabs c8051F120
LCD t6963c) после запуска программы на экране появляется всякий мусор (буквы, линии...), а когда пытаюсь вывести символ-экран опять полностью закрашивается
. Подскажите, с чем это может быть связано??
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);
}