Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Initializing a ST7735 driven lcd spi display

Status
Not open for further replies.

huub8

Junior Member level 3
Joined
Jul 9, 2012
Messages
29
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,489
I’m trying to get a lcd display to initialise using a 18f45k22 microcontroller, its controlled by a ST7735 chip. Some useful data:

**broken link removed**
The datasheet of the ST7735 chip
**broken link removed**
A library for a very similar display from adafruit

The problem is that I can’t get the display to initialize. The arduino library from adafruit talks about 2 different types, its also big and for arduino, but I also got some code from the ebay page (linked to above) where I brought my display. Its not written for 18f microcontrollers though, so I converted it to code in mikroC for an 18f45k22. The problem is that I cant get the display to display anything, it just shows a blank screen. I think the problem lies in the initialization routine, but I cant find the problem myself.

The code from ebay:

Code:
//     
/***************************************************/

#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int

sbit cs        =P3^5;
sbit rs        =P2^3;
sbit sda       =P2^2;
sbit scl       =P2^1;
sbit reset     =P3^4;

uchar bdata bitdata;
sbit bit7=bitdata^7;
sbit bit6=bitdata^6;
sbit bit5=bitdata^5;
sbit bit4=bitdata^4;
sbit bit3=bitdata^3;
sbit bit2=bitdata^2;
sbit bit1=bitdata^1;
sbit bit0=bitdata^0;


void  delay(uint t);


void delay(uint time)
{
 uint i,j;
  for(i=0;i<time;i++)
   for(j=0;j<250;j++);
}




void LCD_CtrlWrite_IC(uchar c)
{
bitdata=c;
cs=0;
rs=0;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;


}
void  LCD_DataWrite_IC(uchar d)  
{

bitdata=d;
cs=0;
rs=1;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}

void LCD_DataWrite(uchar LCD_DataH,uchar LCD_DataL)
{
LCD_DataWrite_IC(LCD_DataH);
LCD_DataWrite_IC(LCD_DataL);
}


void  write_command(uchar c)
{
bitdata=c;
cs=0;
rs=0;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;      
}

void  write_data(uchar d)
{
bitdata=d;
cs=0;
rs=1;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}


void Reset()
{
    reset=0;
    delay(100);
    reset=1;
    delay(100);
}
//////////////////////////////////////////////////////////////////////////////////////////////

void lcd_initial()
{

   reset=0;
   delay(100);
   reset=1;
   delay(100);
 
//------------------------------------------------------------------//  
//-------------------Software Reset-------------------------------//
//------------------------------------------------------------------//


 
write_command(0x11);//Sleep exit 
delay (120);
 
//ST7735R Frame Rate
write_command(0xB1); 
write_data(0x01); write_data(0x2C); write_data(0x2D); 
write_command(0xB2); 
write_data(0x01); write_data(0x2C); write_data(0x2D); 
write_command(0xB3); 
write_data(0x01); write_data(0x2C); write_data(0x2D); 
write_data(0x01); write_data(0x2C); write_data(0x2D); 

write_command(0xB4); //Column inversion 
write_data(0x07); 
 
//ST7735R Power Sequence
write_command(0xC0); 
write_data(0xA2); write_data(0x02); write_data(0x84); 
write_command(0xC1); write_data(0xC5); 
write_command(0xC2); 
write_data(0x0A); write_data(0x00); 
write_command(0xC3); 
write_data(0x8A); write_data(0x2A); 
write_command(0xC4); 
write_data(0x8A); write_data(0xEE); 
 
write_command(0xC5); //VCOM 
write_data(0x0E); 
 
write_command(0x36); //MX, MY, RGB mode 
write_data(0xC8); 

//ST7735R Gamma Sequence
write_command(0xe0); 
write_data(0x0f); write_data(0x1a); 
write_data(0x0f); write_data(0x18); 
write_data(0x2f); write_data(0x28); 
write_data(0x20); write_data(0x22); 
write_data(0x1f); write_data(0x1b); 
write_data(0x23); write_data(0x37); write_data(0x00); 

write_data(0x07); 
write_data(0x02); write_data(0x10); 
write_command(0xe1); 
write_data(0x0f); write_data(0x1b); 
write_data(0x0f); write_data(0x17); 
write_data(0x33); write_data(0x2c); 
write_data(0x29); write_data(0x2e); 
write_data(0x30); write_data(0x30); 
write_data(0x39); write_data(0x3f); 
write_data(0x00); write_data(0x07); 
write_data(0x03); write_data(0x10);  

write_command(0x2a);
write_data(0x00);write_data(0x00);
write_data(0x00);write_data(0x7f);
write_command(0x2b);
write_data(0x00);write_data(0x00);
write_data(0x00);write_data(0x9f);

write_command(0xF0); //Enable test command  
write_data(0x01); 
write_command(0xF6); //Disable ram power save mode 
write_data(0x00); 
 
write_command(0x3A); //65k mode 
write_data(0x05); 
 

	write_command(0x29);//Display on
}




void dsp_single_colour(DH,DL)
{
 uchar i,j;
 //RamAdressSet();
 for (i=0;i<160;i++)
    for (j=0;j<128;j++)
        LCD_DataWrite(DH,DL);
}



main()
{
 lcd_initial();

      while(1)
  {
 write_command(0x2C);
  //  Disp_gradscal(); //»Ò½×
   // delay(500); 
      
//    dsp_single_colour(0x84,0x10);//»ÒÉ«
//    delay(500);	

    dsp_single_colour(0xff,0xff);//°×É«
    delay(500);	
    	
    dsp_single_colour(0x00,0x00);//ºÚÉ«
    delay(500);	
    	
    dsp_single_colour(0xf8,0x00);//ºìÉ«
    delay(500);	
    	
    dsp_single_colour(0x07,0xe0);//ÂÌÉ«
    delay(500);	
    	
    dsp_single_colour(0x00,0x1f);//À¶É«
    delay(500);	

    }

 }


My own code:
Code:
sbit cs at latB0_bit;
sbit rs at latB1_bit;
sbit sdalcd at latB2_bit;
sbit scllcd at latB3_bit;
sbit reset at latB4_bit;

char bitdata;
sbit bit7 at bitdata.b7;
sbit bit6 at bitdata.b6;
sbit bit5 at bitdata.b5;
sbit bit4 at bitdata.b4;
sbit bit3 at bitdata.b3;
sbit bit2 at bitdata.b2;
sbit bit1 at bitdata.b1;
sbit bit0 at bitdata.b0;

void LCD_CtrlWrite_IC(char c)
{
  bitdata=c;
  cs=0;
  rs=0;
  sdalcd=bit7; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit6; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit5; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit4; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit3; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit2; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit1; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit0; scllcd=0; delay_us(100); scllcd=1;
  cs=1;
}

void  LCD_DataWrite_IC(char d)
{
  bitdata=d;
  cs=0;
  rs=1;
  sdalcd=bit7; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit6; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit5; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit4; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit3; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit2; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit1; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit0; scllcd=0; delay_us(100); scllcd=1;
  cs=1;
}

void LCD_DataWrite(char LCD_DataH,char LCD_DataL)
{
  LCD_DataWrite_IC(LCD_DataH);
  LCD_DataWrite_IC(LCD_DataL);
}


void  write_command(char c)
{
  bitdata=c;
  cs=0;
  rs=0;
  sdalcd=bit7; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit6; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit5; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit4; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit3; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit2; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit1; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit0; scllcd=0; delay_us(100); scllcd=1;
  cs=1;
}

void  write_data(char d)
{
  bitdata=d;
  cs=0;
  rs=1;
  sdalcd=bit7; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit6; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit5; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit4; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit3; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit2; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit1; scllcd=0; delay_us(100); scllcd=1;
  sdalcd=bit0; scllcd=0; delay_us(100); scllcd=1;
  cs=1;
}

void lcd_initial()
{
   reset=0;
   delay_ms(100);
   reset=1;
   delay_ms(100);

//------------------------------------------------------------------//
//-------------------Software Reset-------------------------------//

write_command(0x11);//Sleep exit
delay_ms(500);

//ST7735R Frame Rate
write_command(0xB1); delay_us(100);
write_data(0x01);    delay_us(100);
write_data(0x2C);    delay_us(100);
write_data(0x2D);    delay_us(100);
write_command(0xB2); delay_us(100);
write_data(0x01);    delay_us(100);
write_data(0x2C);    delay_us(100);
write_data(0x2D);    delay_us(100);
write_command(0xB3); delay_us(100);
write_data(0x01);    delay_us(100);
write_data(0x2C);    delay_us(100);
write_data(0x2D);    delay_us(100);
write_data(0x01);    delay_us(100);
write_data(0x2C);    delay_us(100);
write_data(0x2D);    delay_us(100);

//Column inversion
write_command(0xB4); delay_us(100);
write_data(0x07);    delay_us(100);

//ST7735R Power Sequence
write_command(0xC0);    delay_us(100);
write_data(0xA2);       delay_us(100);
write_data(0x02);       delay_us(100);
write_data(0x84);       delay_us(100);
write_command(0xC1);    delay_us(100);
write_data(0xC5);       delay_us(100);
write_command(0xC2);    delay_us(100);
write_data(0x0A);       delay_us(100);
write_data(0x00);       delay_us(100);
write_command(0xC3);    delay_us(100);
write_data(0x8A);       delay_us(100);
write_data(0x2A);       delay_us(100);
write_command(0xC4);    delay_us(100);
write_data(0x8A);       delay_us(100);
write_data(0xEE);       delay_us(100);

//VCOM
write_command(0xC5);    delay_us(100);
write_data(0x0E);       delay_us(100);

//MX, MY, RGB mode
write_command(0x36);    delay_us(100);
write_data(0xC8);       delay_us(100);

//ST7735R Gamma Sequence
write_command(0xe0);    delay_us(100);
write_data(0x0f);       delay_us(100);
write_data(0x1a);       delay_us(100);
write_data(0x0f);       delay_us(100);
write_data(0x18);       delay_us(100);
write_data(0x2f);       delay_us(100);
write_data(0x28);       delay_us(100);
write_data(0x20);       delay_us(100);
write_data(0x22);       delay_us(100);
write_data(0x1f);       delay_us(100);
write_data(0x1b);       delay_us(100);
write_data(0x23);       delay_us(100);
write_data(0x37);       delay_us(100);
write_data(0x00);       delay_us(100);

write_data(0x07);       delay_us(100);
write_data(0x02);       delay_us(100);
write_data(0x10);       delay_us(100);
write_command(0xe1);    delay_us(100);
write_data(0x0f);       delay_us(100);
write_data(0x1b);       delay_us(100);
write_data(0x0f);       delay_us(100);
write_data(0x17);       delay_us(100);
write_data(0x33);       delay_us(100);
write_data(0x2c);       delay_us(100);
write_data(0x29);       delay_us(100);
write_data(0x2e);       delay_us(100);
write_data(0x30);       delay_us(100);
write_data(0x30);       delay_us(100);
write_data(0x39);       delay_us(100);
write_data(0x3f);       delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x07);       delay_us(100);
write_data(0x03);       delay_us(100);
write_data(0x10);       delay_us(100);

write_command(0x2a);    delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x7f);       delay_us(100);
write_command(0x2b);    delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x00);       delay_us(100);
write_data(0x9f);       delay_us(100);

//Enable test command
write_command(0xF0);    delay_us(100);
write_data(0x01);       delay_us(100);

//Disable ram power save mode
write_command(0xF6);    delay_us(100);
write_data(0x00);       delay_us(100);

//65k mode
write_command(0x3A);    delay_us(100);
write_data(0x05);       delay_us(100);

//Display on
write_command(0x29);    delay_us(100);

}




void dsp_single_colour(char DH,char DL)
{
 char i,j;
 //RamAdressSet();
 for (i=0;i<160;i++)
    for (j=0;j<128;j++)
        LCD_DataWrite(DH,DL);
}



void main()
{
  ADCON1 |= 0x0F;                         // Configure all ports with analog function as digital
  ANSELB  = 0;                       // Configure pins as digital
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;

  reset = 1;
  cs = 1;

  trisA = 0;
  trisB = 0;
  trisC = 0;
  trisD = 0;
  trisE = 0;

  lcd_initial();

   while(1)
   {
    write_command(0x2C);

    dsp_single_colour(0xff,0xff);
    delay_ms(500);

    dsp_single_colour(0x00,0x00);
    delay_ms(500);

    dsp_single_colour(0xf8,0x00);
    delay_ms(500);

    dsp_single_colour(0x07,0xe0);
    delay_ms(500);

    dsp_single_colour(0x00,0x1f);
    delay_ms(500);

   }
 }


I'm completely stuck, so it would be very grateful if someone could help me out.
 

Hi there.

I've been struggling with this LCD for a while but I finally got it to work!

I'm using a PIC32, so I'm sure you'll have to change the ports. Also, I'm using SPI so for your PIC18 you'd need to take out my LCD_Write and replace it with your one.
You should see a kinda triangle shape on the LCD if it worked. The code's a real mess (I copied parts from a microlab SPI example and parts I copied from some Arduino code).

Good luck!


Code:
#include <stdbool.h>
#include <stdint.h>
#include <plib.h>

#define LCD_SPIBUF  SPI2BUF
#define LCD_SPISTATbits SPI2STATbits
#define LCD_SPI_CHANNEL SPI_CHANNEL2
#define LCD_SPICONbits SPI2CONbits

#define SYS_FREQ (2000000L) // 20Mhz

// PIC32 configuration settings
#pragma config UPLLEN   = OFF      // USB PLL Enabled
#pragma config FPLLMUL  = MUL_24   // PLL Multiplier
#pragma config UPLLIDIV = DIV_2    // USB PLL Input Divider
#pragma config FPLLIDIV = DIV_2    // PLL Input Divider
#pragma config FPLLODIV = DIV_4   // PLL Output Divider
#pragma config FPBDIV   = DIV_4   // Peripheral Clock divisor
#pragma config FWDTEN   = OFF      // Watchdog Timer
#pragma config WDTPS    = PS1      // Watchdog Timer Postscale
#pragma config FCKSM    = CSDCMD   // Clock Switching & Fail Safe Clock Monitor
#pragma config OSCIOFNC = OFF      // CLKO Enable
#pragma config POSCMOD  = HS       // Primary Oscillator
#pragma config IESO     = ON       // Internal/External Switch-over
#pragma config FSOSCEN  = OFF      // Secondary Oscillator Enable (KLO was off)
#pragma config FNOSC    = PRIPLL   // Oscillator Selection
#pragma config CP       = OFF      // Code Protect
#pragma config BWP      = OFF      // Boot Flash Write Protect
#pragma config PWP      = OFF      // Program Flash Write Protect
#pragma config ICESEL   = ICS_PGx2 // ICE/ICD Comm Channel Select
#pragma config DEBUG    = OFF      // Background Debugger Enable


void DelayMs(unsigned int msec)
 {
     int32_t tWait, tStart;

     tWait=((SYS_FREQ/500)*msec);        //   
     tStart=ReadCoreTimer();
     while((ReadCoreTimer()-tStart)<tWait);        // wait for the time to pass
 }

void SSP_Init(void)
{
	SpiChnOpen(LCD_SPI_CHANNEL,SPI_OPEN_MSTEN|SPI_OPEN_CKP_HIGH|SPI_OPEN_SMP_END|SPI_OPEN_MODE8,64);
	LCD_SPICONbits.ON = 1;
}


void setCS(int val)
{
    if (val == 1)
        LATD |= 16;
    else
        LATD &= 0b11101111;
}

void setRS(int val)
{
    if (val == 1)
        LATD |= 32;
    else
        LATD &= 0b11011111;
}

void setReset(int val)
{
    if (val == 1)
        LATD |= 64;
    else
        LATD &= 0b10111111;
}

char LCD_Write(unsigned char data)
{
    LCD_SPIBUF = data;
    while (!LCD_SPISTATbits.SPIRBF);
    return (BYTE)LCD_SPIBUF;
}

void LCD_Command(unsigned char cmd)
{
    // Clear CS pin
    setCS(0);
    // Clear RS pin
    setRS(0);
    LCD_Write(cmd);
    // Set CS pin
   setCS(1);
}

void LCD_Data(unsigned char data)
{
    // Clear CS pin
    setCS(0);
    // Set RS pin
   setRS(1);
    LCD_Write(data);
    // Set CS pin
   setCS(1);
}

void LCD_SetArea(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2)
{
    LCD_Command(0x2A);
    LCD_Data(x1 >> 8);
    LCD_Data(x1 & 0xFF);
    LCD_Data(x2 >> 8);
    LCD_Data(x2 & 0xFF);

    LCD_Command(0x2B);
    LCD_Data(y1 >> 8);
    LCD_Data(y1 & 0xFF);
    LCD_Data(y2 >> 8);
    LCD_Data(y2 & 0xFF);
}

void LCD_Rectangle(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned short colour)
{
    int x, y;

    LCD_SetArea(x1,y1,x2,y2);
    LCD_Command(0x2C);

    setRS(1);
    setCS(0);

    for (x=x1; x<x2; x++)
        for (y=y1; y<y2; y++)
        {
            LCD_Write(colour >> 8);
            LCD_Write(colour & 0xFF);
        }

    setCS(1);
}

void PutPixel(int x,int y,int colour)
{
    LCD_SetArea(x,y,x+1,y+1);
    LCD_Command(0x2C);
    setRS(1);
    setCS(0);
    LCD_Write(colour >> 8);
    LCD_Write(colour & 0xFF);
}

void LCD_Init(void)
{
    setReset(0);
    DelayMs(500);
    setReset(1);
    DelayMs(500);
   
    LCD_Command(0x11);//Sleep out
	DelayMs(120);
	//ST7735R Frame Rate
	LCD_Command(0xB1);
	LCD_Data(0x01);
	LCD_Data(0x2C);
	LCD_Data(0x2D);
	LCD_Command(0xB2);
	LCD_Data(0x01);
	LCD_Data(0x2C);
	LCD_Data(0x2D);
	LCD_Command(0xB3);
	LCD_Data(0x01);
	LCD_Data(0x2C);
	LCD_Data(0x2D);
	LCD_Data(0x01);
	LCD_Data(0x2C);
	LCD_Data(0x2D);
	//------------------------------------End ST7735R Frame Rate-----------------------------------------//
	LCD_Command(0xB4);//Column inversion
	LCD_Data(0x07);
	//------------------------------------ST7735R Power Sequence-----------------------------------------//
	LCD_Command(0xC0);
	LCD_Data(0xA2);
	LCD_Data(0x02);
	LCD_Data(0x84);
	LCD_Command(0xC1);
	LCD_Data(0xC5);
	LCD_Command(0xC2);
	LCD_Data(0x0A);
	LCD_Data(0x00);
	LCD_Command(0xC3);
	LCD_Data(0x8A);
	LCD_Data(0x2A);
	LCD_Command(0xC4);
	LCD_Data(0x8A);
	LCD_Data(0xEE);
	//---------------------------------End ST7735R Power Sequence-------------------------------------//
	LCD_Command(0xC5);//VCOM
	LCD_Data(0x0E);
	LCD_Command(0x36);//MX, MY, RGB mode
	LCD_Data(0xC8);
	//------------------------------------ST7735R Gamma Sequence-----------------------------------------//
	LCD_Command(0xe0);
	LCD_Data(0x02);
	LCD_Data(0x1c);
	LCD_Data(0x07);
	LCD_Data(0x12);
	LCD_Data(0x37);
	LCD_Data(0x32);
	LCD_Data(0x29);
	LCD_Data(0x2d);
	LCD_Data(0x29);
	LCD_Data(0x25);
	LCD_Data(0x2b);
	LCD_Data(0x39);
	LCD_Data(0x00);
	LCD_Data(0x01);
	LCD_Data(0x03);
	LCD_Data(0x10);
	LCD_Command(0xe1);
	LCD_Data(0x03);
	LCD_Data(0x1d);
	LCD_Data(0x07);
	LCD_Data(0x06);
	LCD_Data(0x2e);
	LCD_Data(0x2c);
	LCD_Data(0x29);
	LCD_Data(0x2d);
	LCD_Data(0x2e);
	LCD_Data(0x2e);
	LCD_Data(0x37);
	LCD_Data(0x3f);
	LCD_Data(0x00);
	LCD_Data(0x00);
	LCD_Data(0x02);
	LCD_Data(0x10);
	 LCD_Command(0x2A);
   LCD_Data(0x00);
   LCD_Data(0x02);
   LCD_Data(0x00);
   LCD_Data(0x81);

   LCD_Command(0x2B);
   LCD_Data(0x00);
   LCD_Data(0x01);
   LCD_Data(0x00);
   LCD_Data(0xA0);
	//------------------------------------End ST7735R Gamma Sequence-----------------------------------------//

    LCD_Command(0x3A);
    LCD_Data(0x05);
	//LCD_Command(0x3A);//65k mode
	//LCD_Data(0x05);
    LCD_Command(0x2C);//Display on
    LCD_Rectangle(0,0,128,160,0); // black it out
    LCD_Command(0x29);//Display on
}

int	main(void)
{
    LATD = 0;
    TRISD = 0;
    LATE = 0;
    TRISE = 0;
    int buffer[160];
    int cnt;

    for (cnt = 0; cnt < 80; cnt++)
        buffer[cnt] = 60 + (cnt / 2);
    for (cnt = 80; cnt < 160; cnt++)
        buffer[cnt] = 139 - cnt/2;

    SYSTEMConfigPerformance(SYS_FREQ);



        SSP_Init();
        LCD_Init();

       DelayMs(120);

        
	while(1)
        {
            // Draw the wave
            for (cnt = 0; cnt < 160; cnt++)
                PutPixel(buffer[cnt], cnt, 0xf800);
            // Clear the wave
            for (cnt = 0; cnt < 160; cnt++)
                PutPixel(cnt, buffer[cnt], 0);
        }
	return 1;

}
 

This thread is the first hit on Google for "st7735 initialization" so thats the reason for me to update this old thread.

The part regarding memory access control of the suggested Init-code feels wrong. If you want the display origo to be in the upper left corner and the data pointer to increment in x-direction primarily, then I suggest to use the following lines of code.

Code:
  LCD_WriteCommand(0x36); // Memory data access control
  LCD_WriteData(0xA0);    // Display rotation correct with FPC to right
  //LCD_WriteData(0x60);    // Display rotation correct with FPC to left
  //LCD_WriteData(0xC0);    // Display rotation coorect with FPC down

Writing 0xC8 will give you BGR instead of RGB
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top