Hello all,
I am working with Lpc 2106 controller and Hitachi Monochrome 4 bit
LCD,320x240 pixels with S1D13700 Lcd Controller.I have done initialize code..
But LCd Not initializing...
Please go through my code..
#include <LPC210X.H>
//#include<stdio.h>
//#include"font.h"
#define HIGH 1
#define LOW 0
#define SYSTEM_SET 0x40
#define POWER_SAVE 0x53
#define DISPLAY_OFF 0x58
#define DISPLAY_ON 0x59
#define SCROLL 0x44
#define CSRFORM 0x5D
#define OVERLAY 0x5B
#define CGRAM_ADR 0x5C
#define HDOT_SCR 0x5A
#define CSRW 0x46
#define CSRR 0x47
#define GRAYSCALE 0x60
#define MEMWRITE 0x42
#define MEMREAD 0x43
#define A0 (1<<28)
#define READ (1<<29)
#define WRITE (1<<19)
#define CS (1<<20)
#define WAIT (1<<21)
//#define RESET (1<<28)
//#define D0 (1<<10)
void command_write(int);
void parameter_write(int);
//unsigned char LcdBufFont[240][40];
//char screen_invert = 0xff;
//int wait;
__inline void output_data(int data)
{
IOSET = data<<6;
IOCLR = (~data<<6);
}
void output_bit(long pin,char data)
{
if(data)
IOSET = pin;
else
IOCLR = pin;
}
int main(void)
{
int i;
// 29-28 21-20 19,17 -10
IODIR = 0x303BFC00; // 0011 0000 0011 1011 1111 1100 0000 0000
output_bit(WRITE,LOW); // 3 0 3 B F C 0 0
output_bit(READ,LOW);
output_bit(CS,LOW);
/* Indirect Addressing Initialization Procedure*/
/*############# SYSTEM_SET ######################### */
command_write(SYSTEM_SET); /* C system_set Command */
for(i=0;i<3000;i++);
parameter_write(0x38); /*P1 INTERGAL cgroM 8 LINES PER CHAR,Dual panel Drive */
parameter_write(0x87); /* P2 Horizontal_character size 8 pixels*/
parameter_write(0x07); /* P3 Vertical Character size 8 pixels */
//C/R
parameter_write(0x4F); /* P4 No of Bytes per Line 40*2-1 =79*/
// TC/R
parameter_write(0x53); /* P5 Total Characres Per ROW 79+4 */
parameter_write(0xEF); /* P6 L/F 240 display Lines* 240-1 */
parameter_write(0xF0); /* P7 virtual screen Size 240 */
parameter_write(0x00); /* P8 for Indirect Addressing Power save mode to be disable */
/* ########### SCROLL ###################### */
// 320x240 pixels ,Double panel Drive
//First Layer Text : 320/8 = 40 characters per Line
//240/8 = 30 Characters per Line
// 40x30 =1200 bytes
//Second Layer Graphics
// 320/8 = 40 characters per Line
//240/1 =240 Lines
// 40x240 = 9600 bytes.. 2580 in HEX 2580+1000 = 3580 hex SAD3
command_write(SCROLL);
parameter_write(0x00); // p1 // First Screen Block Start Address
parameter_write(0x00); //p2 // set to 0000 h
parameter_write(0x28); // p3
parameter_write(0x00); // p4 // Second Screen Block Start Address
parameter_write(0x10); //p5 //set to 1000 h
parameter_write(0x28); //p6
parameter_write(0x00); //p7 // 3rd Screen Block Start Address
parameter_write(0x4B); // p8 // set to 004Bh =1200 Bytes
parameter_write(0x80); //p9 //4th Screen Block Start Address
parameter_write(0x35); // p10 //Set to 3580h
/*############## HDOT SCR ################# */
command_write(HDOT_SCR);
parameter_write(0x00);
/* ############ OVER LAY ################## */
command_write(OVERLAY);
parameter_write(0x01); /* EX-OR Layered Screen Composition Method */
// First Screen Block in Text Mode
// Third Screen Block in Text Mode
/* ########### DISPLAY off ############## */
command_write(DISPLAY_OFF); /*Display off*/
parameter_write(0x56); /* Flash Cursor at 2 HZ */
parameter_write(0x08); /* First Screen Block ON */
parameter_write(0x20); /* Second Screen Block ON */
parameter_write(0x80); /* Third Screen Block ON */
/* Fill the First Layer Memory with 20h */
/* ########## MWRITE ################ */
command_write(CSRW); /* set the cursor */
command_write(MEMWRITE); // MWrite
parameter_write(0x00);
parameter_write(0x00); // Set to 0000 for 1st screen Block..
parameter_write(0x20);
command_write(CSRW); /* set the cursor */
command_write(MEMWRITE); // MWrite
parameter_write(0x00);
/* Second Screen Layer */
parameter_write(0x10);
parameter_write(0x00);
command_write(CSRW); /* Set the Cursor to start of First screen block */
parameter_write(0x00);
// parameter_write()
// CSR FORM Cursor size
command_write(CSRFORM);
parameter_write(0x04);
parameter_write(0x86);
// DISPLAY ON
command_write(DISPLAY_ON);
//CSR DIR
command_write(0x42);
parameter_write(0x20); // " "
parameter_write(0x45); // E
parameter_write(0x50); // P
parameter_write(0x53); // S
parameter_write(0x4f); // O
parameter_write(0x4e); // N
}
void command_write(int C)
{
output_bit(A0,HIGH); // Command_write
output_bit(CS,LOW); // A0 --> HIGH
output_bit(WRITE,LOW); // _
// WR --> LOW
output_bit(READ,HIGH); // _
output_data(C); // RD --> HIGH
// output_bit(WAIT,LOW);
output_bit(WRITE,HIGH);
// output_bit(WAIT,HIGH);
}
void parameter_write(int D)
{
output_bit(A0,LOW);
output_bit(CS,LOW);
output_bit(WRITE,LOW);
output_bit(READ,HIGH);
output_data(D);
// output_bit(WAIT,LOW);
output_bit(WRITE,HIGH);
// output_bit(WAIT,HIGH);
}
if anywhere i have done mistake,,Please reply me...and suggust me what is the real problem..
Regards,
G.srinivasan.
|