I wrote a code for this LCD referring to the data sheet of the NT75451 controller and a sample code for LPC1114 device. But I ended up with no result. I expected a filled up rectangle to show up on screen, but nothing happened. Here is the code that I wrote.(The loop and setup function are towards the end.). Can someone please check out what's wrong with the code. I'm completely new to this advanced electronics, so I have no clue how to proceed further.
Thank you.
//My variables.
#define DB0 6
#define DB7 DB0 + 7
#define BUSY_FLAG DB7
#define RW 5
#define RST 3
#define RS 4
#define CS1 2
#define PAGE1 0xB0
#define COL1 0
#define NOP() asm("NOP")
byte pow2(byte n)
{ byte i, ans;
for(i = 1; i <= n; i++)
ans *= 2;
return ans;
}
void write_cmd(byte cmd)
{ int i;
digitalWrite(RS, LOW); NOP();
digitalWrite(CS1, LOW);NOP();
digitalWrite(RW, LOW);NOP();
for(i = DB0; i <= DB7; i++)
digitalWrite(i, LOW);NOP();
for(i = 0; i < 8; i++)
digitalWrite(i + DB0, (cmd & byte(pow(2, i))) >> i);NOP();
delay(10);
digitalWrite(RW, HIGH);NOP();
digitalWrite(CS1, HIGH);NOP();
digitalWrite(RS, HIGH);NOP();
Serial.println("Command written.");
}
void set_page(byte page, byte col)
{
byte msb,lsb;
msb = (((col & 0xF0) >> 4)| 0x10);
lsb = (col & 0x0F);
write_cmd(page);
write_cmd(msb);
write_cmd(lsb);
}
void write_data(byte data)
{ int i;
digitalWrite(RS, HIGH); NOP();
digitalWrite(CS1, LOW);NOP();
digitalWrite(RW, LOW);NOP();
for(i = DB0; i <= DB7; i++)
digitalWrite(i, LOW);NOP();
for(i = 0; i < 8; i++)
digitalWrite(i + DB0, (data & byte(pow(2, i))) >> i); NOP();
delay(10);
digitalWrite(RW, HIGH);NOP();
digitalWrite(CS1, HIGH);NOP();
digitalWrite(RS, LOW);NOP();
}
byte read_data()
{
byte rd = 0, i;
digitalWrite(RS, HIGH); NOP();
digitalWrite(CS1, LOW);NOP();
digitalWrite(RW, HIGH); NOP();
for(i = DB0; i <= DB7; i++)
pinMode(i, INPUT);
for(i = DB0; i <= DB7; i++)
rd += digitalRead(i) * pow(2, i); NOP();
digitalWrite(RS, LOW); NOP();
digitalWrite(CS1, HIGH);NOP();
digitalWrite(RW, LOW);NOP();
for(i = DB0; i <= DB7; i++)
pinMode(i, OUTPUT);NOP();
return rd;
}
void initLCD()
{
pinMode(RST, OUTPUT);
digitalWrite(RST, LOW);
Serial.println("Wait for 10 seconds.");
delay(10000);
Serial.println("Wait released.");
digitalWrite(RST, HIGH);
pinMode(RS, OUTPUT);
pinMode(RW, OUTPUT);
pinMode(CS1, OUTPUT);
for(int i = DB0; i <= DB7; i++)
pinMode(i, OUTPUT);
write_cmd(0xA3); // LCD bias
write_cmd(0xA0); // ADC select
write_cmd(0xC0); // COM Normal
write_cmd(0x89); //DC-DC setup.
write_cmd(0x01); //Select 4 times boosting circuit.
write_cmd(0x22); // reg resistor select
write_cmd(0x81); // Ref vg select mode
write_cmd(0x3f); // Ref vg reg select
write_cmd(0x2F); // Power control
write_cmd(0x40); // Initial display line 00
write_cmd(0xA4); // Normal display
write_cmd(0xA6); // REverce display a7
write_cmd(0xAF); // Display ON
write_cmd(0XB0); // Set page address
write_cmd(0x10); // Set coloumn addr MSB
write_cmd(0x00); // Set coloumn addr LSB
Serial.println("Initialization over.");
}
/* clears entire lcd or clears all page*/
void blank(void)
{
unsigned char i = 0,j = 0;
set_page(PAGE1,COL1); // initial page, col
for(i = 0; i < 8; i ++)
{
for(j = 0; j < 128; j ++)
{
write_data(0x00);
}
set_page(PAGE1 + i + 1 , COL1); // increment page
}
set_page(PAGE1,COL1); // initial page,col
}
void setup()
{ Serial.begin(9600);
initLCD();
blank();
int i, j;
set_page(PAGE1+5, COL1);
for(i = 0; i < 128; i++)
write_cmd(0xff);
Serial.println("60 second delay.");
delay(60000);
}
void loop()
{
}