2.8" tft touch shield help needed

Hi,

I bouget this 2.8" tft touch shield http://www.ebay.es/itm/2-8-TFT-LCD-for-Arduino-Atmega168-328-/160519609750?pt=LH_DefaultDomain_0&hash=item255fb6dd96#ht_1857wt_647 i think is a good starting shield for a beginer like me cames with sample code and real compatible pins just plug in and play kinde.
What i need help is on writing orientation this the sample code writes in vertical
and i wont "horisontal" write.

sample code writes the way that i wont to write


| | | | | | |
| ARDUINO.CC | | ARDUINO.CC CAMOLAS |
| | | |
| CAMOLAS | | 2012 |
| | | |
| 2012 | | |
|| |________|

1sr part:

#include "Font.h"
#include "digitalWriteFast.h"
#define DB10  2
#define DB11  3
#define DB12  4
#define DB13  5
#define DB14  6
#define DB15  7
#define DB16  8
#define DB17  9
#define CS 11
#define RS 13
#define WR 12
#define RD A0 //use as analog pin in digital mode. allows easy upgrade to mega. as pin14 is different
#define RESET 10
#define lcd_Data  

#define red		0xf800
#define green		0x07e0
#define blue		0x001f
#define black		0x0000
#define white		0xffff
#define gray		0x8c51
#define yellow		0xFFE0
#define cyan		0x07FF
#define purple		0xF81F

const int groundpin = 18;             // analog input pin 4 -- ground
const int powerpin = 19;              // analog input pin 5 -- voltage
const int xpin = A1;                  // x-axis of the accelerometer
const int ypin = A2;                  // y-axis
const int zpin = A3;                  // z-axis (only on 3-axis models)

//int xpin = 0;     // variable to read the value from the analog pin 0 
//int ypin = 0;     // variable to read the value from the analog pin 0 
//int zpin = 0;     // variable to read the value from the analog pin 0 
char value2[4] ; 
unsigned int colorc[]={red,green,blue,black,white,gray,yellow,cyan,purple};

void setup()
{
  char c;
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
   pinMode(DB10,OUTPUT);
  pinMode(DB11,OUTPUT);
  pinMode(DB12,OUTPUT);
  pinMode(DB13,OUTPUT);
  pinMode(DB14,OUTPUT);
  pinMode(DB15,OUTPUT);
  pinMode(DB16,OUTPUT);
  pinMode(DB17,OUTPUT);
  pinMode(RESET,OUTPUT);
  pinMode(CS,OUTPUT);
  pinMode(WR,OUTPUT);
  pinMode(RS,OUTPUT);
  pinMode(RD,OUTPUT);  
  lcd_Init();

  Serial.begin(1152000);
  pinMode(groundpin, OUTPUT);
  pinMode(powerpin, OUTPUT);
  digitalWrite(groundpin, LOW); 
  digitalWrite(powerpin, HIGH);
  
  lcd_Clear(yellow);
  delay(1);
  lcd_Clear(green);
  delay(1);
  for(byte y=0; y<100;y++) 
  lcd_Circle(120, 120, y,purple);
  
  lcd_Line(0,0, 190,310,white);
  lcd_Line(190,310, 0,0,white);
  
   lcd_Str(0,150,"          Arduino TFT (profounddevices)          ",white,blue);
   lcd_Str(0,0,"      Atmega328  Example                ",yellow,black);
delay(1000000);// pause her efor reset
}
void charcodetable()
{
  char c;
 lcd_Str(0,0," 0123456789ABCDEF",white,red);    
  c=0x30;
  for(int y=0;y<10;y++)
    lcd_Char(0,y+1,c++,white,red);    
  c=0x41;
  for(int y=10;y<16;y++)
    lcd_Char(0,y+1,c++,white,red);    
 // disp_ANKFont();
  for(int y=0;y<204;y+=12)
    for(int x=0;x<102;x++)
      lcd_Pixel(x,y,black);
  for(int x=5;x<102;x+=6)
    for(int y=0;y<204;y++)
      lcd_Pixel(x,y,black);
}
  void loop()
{
   itoa (xpin, value2, 10);

   lcd_Str(10,180,'Text Value :'+value2,white,blue);
}
  
void SET_LOW(int pin)
{
  digitalWriteFast2(pin,LOW);
}

void SET_HIGH(int pin)
{
  digitalWriteFast2(pin,HIGH);
}

extern void Trans_Dat(unsigned int index, unsigned int data)
{
	unsigned char low8  = lowByte(index);
	unsigned char high8 = highByte(index);
	
	digitalWriteFast2(CS,LOW);//SET_LOW(CS);
	digitalWriteFast2(RS,LOW);//SET_LOW(RS);
	digitalWriteFast2(WR,HIGH);//SET_HIGH(WR);

        Write_Data(high8);
      
	digitalWriteFast2(WR,LOW);//SET_LOW(WR);
        
	digitalWriteFast2(WR,HIGH); //SET_HIGH(WR);
	Write_Data(low8);
    
	digitalWriteFast2(WR,LOW);//SET_LOW(WR);
        
	digitalWriteFast2(WR,HIGH); //SET_HIGH(WR);

	digitalWriteFast2(RS,HIGH); //SET_HIGH(RS);
        
	low8  = lowByte(data);
	high8 = highByte(data);

	Write_Data(high8);
//delayMicroseconds(5);
	//PORTD = high8;
        digitalWriteFast2(WR,LOW); // SET_LOW(WR);
  //	delayMicroseconds(5);
        digitalWriteFast2(WR,HIGH) //SET_HIGH(WR);
	Write_Data(low8);
//delayMicroseconds(5);
	digitalWriteFast2(WR,LOW);// SET_LOW(WR);
       // delayMicroseconds(5);
	digitalWriteFast2(WR,HIGH) ;//SET_HIGH(WR);
//delayMicroseconds(5);
	digitalWriteFast2 (CS,HIGH); //SET_HIGH(CS);
}

void Write_Data(unsigned char data)
{// made pin specific as port is not the same on arduino and mega
 //  PORTD=data<<2; //FASTERWAY/ WHY BECAUSE PIN IS NOW KNOWN ALWAYS. IT IS HARDCODED IN COMPILE

if (bitRead(data,0)){digitalWriteFast2(DB10,HIGH);} else{digitalWriteFast2(DB10,LOW);}// digitalWriteFast2(DB16,bitRead(data,6));
if (bitRead(data,2)){digitalWriteFast2(DB12,HIGH);} else{digitalWriteFast2(DB12,LOW);}// digitalWriteFast2(DB17,bitRead(data,6));
if (bitRead(data,4)){digitalWriteFast2(DB14,HIGH);} else{digitalWriteFast2(DB14,LOW);}// digitalWriteFast2(DB16,bitRead(data,6));
if (bitRead(data,6)){digitalWriteFast2(DB16,HIGH);} else{digitalWriteFast2(DB16,LOW);}// digitalWriteFast2(DB17,bitRead(data,6));
if (bitRead(data,1)){digitalWriteFast2(DB11,HIGH);} else{digitalWriteFast2(DB11,LOW);}// digital
if (bitRead(data,3)){digitalWriteFast2(DB13,HIGH);} else{digitalWriteFast2(DB13,LOW);}// digitalWriteFast2(DB17,bitRead(data,6));
if (bitRead(data,5)){digitalWriteFast2(DB15,HIGH);} else{digitalWriteFast2(DB15,LOW);}// digitalWriteFast2(DB16,bitRead(data,6));
if (bitRead(data,7)){digitalWriteFast2(DB17,HIGH);} else{digitalWriteFast2(DB17,LOW);}// digitalWriteFast2(DB17,bitRead(data,6));
}

void lcd_Init(void)
{
	digitalWriteFast2(RD,HIGH); //SET_HIGH(RD);
	digitalWriteFast2 (RD,HIGH); //SET_HIGH(RESET);
	delay(3);
	digitalWriteFast2(RESET,LOW); //SET_LOW(RESET);
	delay(15);
	digitalWriteFast2(RESET,HIGH);//SET_HIGH(RESET);
	delay(20);

	Trans_Dat(0x00E3, 0x3008); 
	Trans_Dat(0x00E7, 0x0012); 
	Trans_Dat(0x00EF, 0x1231); 
	Trans_Dat(0x0001, 0x0100); 
	Trans_Dat(0x0002, 0x0700); // set line inversion
//	Trans_Dat(0x0003, 0b0001000000011000); // ???
	Trans_Dat(0x0003, 0b0001000000110000); // ???
	Trans_Dat(0x0004, 0x0000);
	Trans_Dat(0x0008, 0x0207);
	Trans_Dat(0x0009, 0x0000);
	Trans_Dat(0x000A, 0x0000);
	Trans_Dat(0x000C, 0x0000); 
	Trans_Dat(0x000D, 0x0000);
	Trans_Dat(0x000F, 0x0000); 
	Trans_Dat(0x0010, 0x0000); 
	Trans_Dat(0x0011, 0x0007); 
	Trans_Dat(0x0012, 0x0000); // VREG1OUT voltage
	Trans_Dat(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
	delay(200);
	Trans_Dat(0x0010, 0x1490); // SAP, BT[3:0], AP[2:0], DSTB, SLP, STB
	Trans_Dat(0x0011, 0x0227); 
	delay(50); // Delayms 50ms
	Trans_Dat(0x0012, 0x001c); // External reference voltage= Vci;
	delay(50); // Delayms 50ms
	Trans_Dat(0x0013, 0x0A00); // R13=0F00 when R12=009E;VDV[4:0] for VCOM amplitude
	Trans_Dat(0x0029, 0x000F); // R29=0019 when R12=009E;VCM[5:0] for VCOMH//0012//
	Trans_Dat(0x002B, 0x000D); // Frame Rate = 91Hz
	delay(50); 
	Trans_Dat(0x0030, 0x0000);
	Trans_Dat(0x0031, 0x0203);
	Trans_Dat(0x0032, 0x0001);
	Trans_Dat(0x0035, 0x0205);
	Trans_Dat(0x0036, 0x030C);
	Trans_Dat(0x0037, 0x0607);
	Trans_Dat(0x0038, 0x0405);
	Trans_Dat(0x0039, 0x0707);
	Trans_Dat(0x003C, 0x0502);
	Trans_Dat(0x003D, 0x1008);
        lcd_ClearWindow();
	Trans_Dat(0x0060, 0xA700); // Gate Scan Line
	Trans_Dat(0x0061, 0x0001); 
	Trans_Dat(0x006A, 0x0000);
	Trans_Dat(0x0080, 0x0000);
	Trans_Dat(0x0081, 0x0000);
	Trans_Dat(0x0082, 0x0000);
	Trans_Dat(0x0083, 0x0000);
	Trans_Dat(0x0084, 0x0000);
	Trans_Dat(0x0085, 0x0000);
	Trans_Dat(0x0090, 0x0010);
	Trans_Dat(0x0092, 0x0600); //0x0000
	Trans_Dat(0x0093, 0x0003);
	Trans_Dat(0x0095, 0x0110);
	Trans_Dat(0x0097, 0x0000);
	Trans_Dat(0x0098, 0x0000);
	Trans_Dat(0x0007, 0x0133); 
}

#define ENDCOL     240	// X
#define ENDROW     320	// Y
#define XChar	  (int)((ENDCOL) / 6)
#define YLine	  (int)((ENDROW) / 12)

void lcd_Clear(unsigned int Color)
{
  unsigned long i;
  lcd_SetX(0);
  lcd_SetY(0);
  lcd_ClearWindow();
  for(i=0;i<320UL*240UL;i++) 
    Trans_Dat(0x0022,Color);
}

void lcd_ClearWindow(void) 
{
  lcd_SetWindow(0,239,0,319); 
}

void lcd_SetWindow(unsigned int HSA,unsigned int HEA,unsigned int VSA,unsigned int VEA)
{
  Trans_Dat(0x0050, HSA); // ??(Horizontal) G
  Trans_Dat(0x0051, HEA); // ??(Horizontal) 
  Trans_Dat(0x0052, VSA); // ??(Vertical) 
  Trans_Dat(0x0053, VEA); // ??(Vertical) 
}

2s part:

void lcd_SetX(unsigned int x) //??X
{
  Trans_Dat(0x0020, x);
}  

void lcd_SetY(unsigned int y) //??Y
{
  Trans_Dat(0x0021, y);
}  

void lcd_Color(unsigned int Color) 
{
  Trans_Dat(0x0022,Color);
}

void lcd_Pixel(unsigned int Xpos, unsigned int Ypos, unsigned int Color){

	if((Xpos<ENDCOL) && (Ypos<ENDROW)){
		Trans_Dat(0x0020, Xpos);			// ????
		Trans_Dat(0x0021, Ypos);
		Trans_Dat(0x0022, Color);
	}
}

#define	abs(a)	(((a)>0) ? (a) : -(a))
void lcd_Line(int x0, int y0, int x1, int y1, unsigned int Color)
{
	int steep, t;
	int deltax, deltay, error;
	int x, y;
	int ystep;
	
	y0=ENDROW-y0 -1;
	y1=ENDROW-y1 -1;
	steep = (abs(y1 - y0) > abs(x1 - x0));
	if(steep){
		t = x0; x0 = y0; y0 = t;
		t = x1; x1 = y1; y1 = t;
	}
	if(x0 > x1) {
		t = x0; x0 = x1; x1 = t;
		t = y0; y0 = y1; y1 = t;
	}
	deltax = x1 - x0;	
	deltay = abs(y1 - y0);
	error = 0;
	y = y0;
	if(y0 < y1) ystep = 1; else ystep = -1;
	for(x=x0; x<=x1; x++) {
		if(steep) lcd_Pixel(y,x,Color); else lcd_Pixel(y,x,Color);
		error += deltay;
		if((error << 1) >= deltax) {
			y += ystep;
			error -= deltax;
		}
	}
}
void lcd_Circle(int x0, int y0, int r, unsigned int color)
{
	int x = r;
	int y = 0;
	int F = -2 * r + 3;
	
	while(x >= y){
		lcd_Pixel(x0+x, y0+y, color);
		lcd_Pixel(x0-x, y0+y, color);		
		lcd_Pixel(x0+x, y0-y, color);
		lcd_Pixel(x0-x, y0-y, color);		
		lcd_Pixel(x0+y, y0+x, color);
		lcd_Pixel(x0-y, y0+x, color);		
		lcd_Pixel(x0+y, y0-x, color);
		lcd_Pixel(x0-y, y0-x, color);
		if(F >= 0){
			x--;
			F -= 4 * x;
		}
		y++; 
		F += 4 * y + 2;
	}
}

void lcd_Char(unsigned  char X, unsigned char Y, unsigned char C, unsigned int Color1, unsigned int Color2){
  unsigned char FontMask;
  unsigned int DrawX,DrawY; 
  unsigned char FontData;
  
  DrawX=X*6;
  DrawY=Y*12;
  lcd_SetX(DrawX);
  lcd_SetY(DrawY);
  lcd_SetWindow(DrawX,DrawX+5,DrawY,DrawY+11);
  for(unsigned char y=0;y<12;y++)
  {
    FontMask=0b10000000;
    if(C<0xa1)
      FontData=pgm_read_byte_near(ANKFont[C-0x20]+y); 
    else
    //  FontData=pgm_read_byte_near(HalfKanaFont[C-0xa1]+y);
    Serial.print("C=");
    Serial.print(C,HEX);
    Serial.print(" C2=");
    Serial.println(C-0xa1,HEX);
    for(unsigned char x=0;x<6;x++)
    {
      if(FontData&FontMask)
        lcd_Color(Color1); 
      else
        lcd_Color(Color2);
      FontMask>>=1;
    }
  }
 
}

void lcd_CharZ(unsigned  char X, unsigned char Y, unsigned char utf8, unsigned int Color1, unsigned int Color2){
  unsigned char FontMask;
  unsigned int DrawX,DrawY; 
  unsigned char FontData; 
  unsigned char fp=0;
  
  utf8-=0x90;
  DrawX=X*6;
  DrawY=Y*12;
  lcd_SetX(DrawX); 
  lcd_SetY(DrawY);
  lcd_SetWindow(DrawX,DrawX+11,DrawY,DrawY+11);
  for(unsigned char y=0;y<6;y++)
  {
    FontMask=0b10000000;
    FontData=pgm_read_byte_near(KanjiFont[utf8]+ fp++);
    for(unsigned char x=0;x<8;x++)
    {
      if(FontData&FontMask)
        lcd_Color(Color1);
      else
        lcd_Color(Color2); 
      FontMask>>=1;
    }
    
    FontMask=0b10000000;
    FontData=pgm_read_byte_near(KanjiFont[utf8]+ fp++);
    for(unsigned char x=0;x<4;x++)
    {
      if(FontData&FontMask)
        lcd_Color(Color1); 
      else
        lcd_Color(Color2); 
      FontMask>>=1;
    }
    
    FontMask=0b1000;
    for(unsigned char x=0;x<4;x++)
    {
      if(FontData&FontMask)
        lcd_Color(Color1);
      else
        lcd_Color(Color2);
      FontMask>>=1;
    }
    
    FontMask=0b10000000;
    FontData=pgm_read_byte_near(KanjiFont[utf8]+ fp++);
    for(unsigned char x=0;x<8;x++)
    {
      if(FontData&FontMask)
        lcd_Color(Color1); 
      else
        lcd_Color(Color2); 
      FontMask>>=1;
    }
  }
}

void lcd_Str(int colum, int line, char *s, unsigned int Color1, unsigned int Color2)
{
  while (*s)
  {
    if(*s==0xffef)
    {
      Serial.println("ef-mode");
      for(int a=0;a<3;a++)
      {
        Serial.print("CharCode=");
        Serial.println(*(s+a),HEX);
      }
      if(*(s+1)==0xffbd && *(s+2)>=0xffa1)
      {
        Serial.println("BBBBB");
        Serial.println(*(s+2),HEX);
        lcd_Char(colum,line,*(s+2),Color1,Color2);
        colum++;
      }
      else         
      {
        Serial.println("CCCCC");
        lcd_CharZ(colum,line,*(s+2),Color1,Color2);
        colum=+2;
      }
      s+=3;
    } else
    {
      Serial.println("normal-mode");
      lcd_Char(colum++, line, *s++, Color1, Color2);
    }
    if(colum >= XChar)
    {
      line++;
      colum = 0;
      if(line >= YLine)	line = 0;
    }
  }
}

The code is to big to post in a single one sow i had to breack it in 2.

Thanks and sory form the long post

Hi,

Any ideas how to work this TFT ST7781 out?

Thanks,

Paulo