STM32F407 ile 7" TFT 800x480 SSD1963 Sürme

Başlatan M_B, 27 Mart 2013, 11:30:06

M_B

SSD1963 Driver Kutuphanesi
Kutuphane bu hali ile güzel çalışıyor.
Tek kullanilan font 16x8 dir.

16x8 fontu dısında font basamadim.
Font kisminda biraz yardima ihtiyacim var.
İyice kafam karişti.  :(

Resimler:




STM32F407 ve 7" TFT LCD SSD1963 Driver Baloncuk uygulamasi

SSD1963.c
/* Includes ------------------------------------------------------------------*/
#include "SSD1963.h"


#define ABS(X)  ((X) > 0 ? (X) : -(X))     


unsigned long color1=0;

unsigned int  HDP=799; //Horizontal Display Period
unsigned int  HT=1000; //Horizontal Total
unsigned int  HPS=51;  //LLINE Pulse Start Position
unsigned int  LPS=3;   //	Horizontal Display Period Start Position
unsigned char HPW=8;   //	LLINE Pulse Width


unsigned int  VDP=479;	//Vertical Display Period
unsigned int  VT=530;	//Vertical Total
unsigned int  VPS=24;	//	LFRAME Pulse Start Position
unsigned int  FPS=23;	//Vertical Display Period Start Positio
unsigned char VPW=3;	// LFRAME Pulse Width



extern u16  POINT_COLOR = BLACK;  
extern u16  BACK_COLOR  = WHITE;



static sFONT *LCD_Currentfonts;

  /* Global variables to set the written text color */
static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
  
/**
  * @}
  */ 


#ifndef USE_Delay
static void delay(__IO uint32_t nCount);
#endif /* USE_Delay*/

		  
/******************************************

   SSD1963 kismi

*******************************************/

void SSD1963_LCD_Init(void)
{ 
  __IO uint32_t lcdid = 0;
  
/* Configure the LCD Control pins --------------------------------------------*/
  LCD_CtrlLinesConfig();
 
/* Configure the FSMC Parallel interface -------------------------------------*/
  LCD_FSMCConfig();
 
    /* Start Initial Sequence ------------------------------------------------*/
  
  	GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);
  	GPIOC->BSRRH = GPIO_BSRR_BS_6;
    _delay_(5);
  	GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);
/******************************************************/
		LCD_WriteCommand(0x0001);	 // software reset
		LCD_WriteCommand(0x0001);	 // software reset
		  _delay_(5);


LCD_WriteCommand(0x00E2); // PLL ayar bolumu.
			LCD_WriteData(0x0023);  // 23 
			LCD_WriteData(0x0001);  // 2  N degeri Bolucu oran1 
			LCD_WriteData(0x0004);	 //4
		
		LCD_WriteCommand(0x00E0); // Start PLL 
			LCD_WriteData(0x0001);
			  _delay_(5);
		LCD_WriteCommand(0x00E0); // Start PLL 
			LCD_WriteData(0x0003);
			  _delay_(5);
	//	LCD_WriteCommand(0x0001);	 // software reset
			  _delay_(5);
				
		LCD_WriteCommand(0x00E6); 		// Set_lshift_freg	  	
			LCD_WriteData(0x0004);		  // 00/04
			LCD_WriteData(0x00DD);	    // 93/DD
			LCD_WriteData(0x00DC);		  // E0/DC
			
	/************************************************
				LCD Modu ayarlama 
	************************************************/
		LCD_WriteCommand(0x00B0);   // Set Lcd_Mode 
			LCD_WriteData(0x0000);
			LCD_WriteData(0x0000);
			LCD_WriteData((HDP>>8)&0X00FF);  //Set HDP
			LCD_WriteData(HDP&0X00FF);
			LCD_WriteData((VDP>>8)&0X00FF);  //Set VDP
			LCD_WriteData(VDP&0X00FF);
			LCD_WriteData(0x0000);

	LCD_WriteCommand(0x00B4);					//HSYNC Set_hori_period.
		LCD_WriteData((HT>>8)&0X00FF);  //Set HT
		LCD_WriteData(HT&0X00FF);
		LCD_WriteData((HPS>>8)&0X00FF);  //Set HPS
		LCD_WriteData(HPS&0X00FF);
		LCD_WriteData(HPW);			   			//Set HPW
		LCD_WriteData((LPS>>8)&0X00FF); //Set HPS
		LCD_WriteData(LPS&0X00FF);
		LCD_WriteData(0x0000);

	LCD_WriteCommand(0x00B6);					 //VSYNC  Set_vrt_period.
		LCD_WriteData((VT>>8)&0X00FF);   //Set VT
		LCD_WriteData(VT&0X00FF);
		LCD_WriteData((VPS>>8)&0X00FF);  //Set VPS
		LCD_WriteData(VPS&0X00FF);
		LCD_WriteData(VPW);			   			 //Set VPW
		LCD_WriteData((FPS>>8)&0X00FF);  //Set FPS
		LCD_WriteData(FPS&0X00FF);

	LCD_WriteCommand(0x00BA);    // set_gpio_value
		 LCD_WriteData(0x000F);     //GPIO[3:0] out 1

	LCD_WriteCommand(0x00B8);   // set_gpio_conf
		 LCD_WriteData(0x0007);    //GPIO3=input, GPIO[2:0]=output
		 LCD_WriteData(0x0001);    //GPIO0 normal

	LCD_WriteCommand(0x0036); //rotation
		 LCD_WriteData(0x0080);

	LCD_WriteCommand(0x00F0); //pixel data interface
		 LCD_WriteData(0x0003);

	 _delay_(5);
	LCD_WriteCommand(0x0026); //display on
		 LCD_WriteData(0x0001);

//	LCD_WriteCommand(0x0029); //display on

	LCD_WriteCommand(0x00BE); //set PWM for B/L
		 LCD_WriteData(0x0006);
		 LCD_WriteData(0x0080);
		 LCD_WriteData(0x0001);
		 LCD_WriteData(0x00f0);
		 LCD_WriteData(0x0000);
		 LCD_WriteData(0x0000);
		
	LCD_WriteCommand(0x00d0);  //set_dbc_conf 
		LCD_WriteData(0x0009);   // d
		LCD_WriteCommand(0x0029); //display on
	
	
}
/*****************SSD1963 SONU ****************************/
   


/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
{
  TextColor = _TextColor; 
  BackColor = _BackColor;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
{
  *_TextColor = TextColor; *_BackColor = BackColor;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetTextColor(__IO uint16_t Color)
{
  TextColor = Color;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetBackColor(__IO uint16_t Color)
{
  BackColor = Color;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetFont(sFONT *fonts)
{
  LCD_Currentfonts = fonts;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
sFONT *LCD_GetFont(void)
{
  return LCD_Currentfonts;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c)
{
  uint32_t index = 0, i = 0;
  uint16_t  Xaddress = 0;
  Xaddress = Xpos;
  
	SSD1963_Address_set(Xaddress,Ypos,Xaddress,Ypos);   
  
  for(index = 0; index < LCD_Currentfonts->Height; index++)
  {
 
    for(i = 0; i < LCD_Currentfonts->Width; i++)
    {
  
      if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
        (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))

      {
				LCD_WriteData(BACK_COLOR); 	
  
      }
      else
      {
				LCD_WriteData(POINT_COLOR); 	
    
      } 
    }
    Xaddress++;
		SSD1963_Address_set(Xaddress,Ypos,Xaddress,Ypos);   
 
  }
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_DisplayChar(uint16_t Line, uint16_t Column, uint8_t Ascii)
{
  Ascii -= 32;
  LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
}


/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
		  
/***********************************************


								SSD1963  Bolumü




***********************************************/
void LCD_WriteCommand(uint16_t LCD_Reg)
{
 /* Write 16-bit Reg */
  LCD->LCD_REG = LCD_Reg;
}
 
void LCD_WriteData(uint16_t LCD_RegValue)	
{

	LCD->LCD_RAM = LCD_RegValue;

}

void SendData(uint32_t color)
{
	LCD_WriteData((color)>>16);
	LCD_WriteData((color)>>8);
	LCD_WriteData(color); 
}

void windowSet(uint16_t s_x,uint16_t e_x,uint16_t s_y,uint16_t e_y)
{
	LCD_WriteCommand(0x2a);
		LCD_WriteData((s_x)>>8);
		LCD_WriteData(s_x);
		LCD_WriteData((e_x)>>8);
		LCD_WriteData(e_x);

	LCD_WriteCommand(0x2b);
		LCD_WriteData((s_y)>>8);
		LCD_WriteData(s_y);
		LCD_WriteData((e_y)>>8);
		LCD_WriteData(e_y);	  
}

void FULL_ON(uint32_t data)
{
uint16_t x,y;
windowSet(0x0000,0x013f,0x0000,0x00ef);
LCD_WriteCommand(0x2c);
	for(x=0;x<320;x++)
		{
			for(y=0;y<240;y++)
				{
					SendData(data);
				}
		
		}	
}
 
	  
void TFT_CLEAR(unsigned int color)
{                    
     unsigned int l=800,w;

	LCD_WriteCommand(0x002A);	
	LCD_WriteData(0);	    
	LCD_WriteData(0);
	LCD_WriteData(HDP>>8);	    
	LCD_WriteData(HDP&0x00ff);
  LCD_WriteCommand(0x002b);	
	LCD_WriteData(0);	    
	LCD_WriteData(0);
	LCD_WriteData(VDP>>8);	    
	LCD_WriteData(VDP&0x00ff);
	LCD_WriteCommand(0x002c);
	
	
	while(l--)
	{
	    for(w=0;w<480;w++)
		{    
          	LCD_WriteData(color);
		}
	} 
}

/***************************************************************/

void TFT_Fill(unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend,unsigned int color)
{                    
    unsigned long n;

	n=(unsigned long)(yend-ysta+1)*(xend-xsta+1);

	LCD_WriteCommand(0x002A);	
	LCD_WriteData(xsta>>8);	    
	LCD_WriteData(xsta&0x00ff);
	LCD_WriteData(xend>>8);	    
	LCD_WriteData(xend&0x00ff);
  LCD_WriteCommand(0x002b);	
	LCD_WriteData(ysta>>8);	    
	LCD_WriteData(ysta&0x00ff);
	LCD_WriteData(yend>>8);	    
	LCD_WriteData(yend&0x00ff);
	LCD_WriteCommand(0x002c);
	while(n--)LCD_WriteData(color);
} 


void TFT_DrawPoint(unsigned int x,unsigned int y,unsigned int fontcolor)
{
	LCD_WriteCommand(0x002A);	
	LCD_WriteData(x>>8);	    
	LCD_WriteData(x&0x00ff);
	LCD_WriteData(HDP>>8);	    
	LCD_WriteData(HDP&0x00ff);
    LCD_WriteCommand(0x002b);	
	LCD_WriteData(y>>8);	    
	LCD_WriteData(y&0x00ff);
	LCD_WriteData(VDP>>8);	    
	LCD_WriteData(VDP&0x00ff);
	LCD_WriteCommand(0x002c);	
	LCD_WriteData(fontcolor); 
}  



/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_Address_set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_Address_set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{ 
	LCD_WriteCommand(0x002A);	
	LCD_WriteData(x1>>8);	    
	LCD_WriteData(x1&0x00ff);
	LCD_WriteData(x2>>8);	    
	LCD_WriteData(x2&0x00ff);
  LCD_WriteCommand(0x002b);	
	LCD_WriteData(y1>>8);	    
	LCD_WriteData(y1&0x00ff);
	LCD_WriteData(y2>>8);	    
	LCD_WriteData(y2&0x00ff);
	LCD_WriteCommand(0x002c);			
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawPoint(uint16_t x,uint16_t y)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawPoint(uint16_t x,uint16_t y)
{
	SSD1963_Address_set(x,y,x,y);
	LCD_WriteData(POINT_COLOR); 	    
} 	 

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawPoint_big(uint16_t x,uint16_t y)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawPoint_big(uint16_t x,uint16_t y)
{
	SSD1963_LCD_Fill(x-1,y-1,x+1,y+1,POINT_COLOR);
} 

/*********************************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color) 
* Kullanisi      : 
* Output         : 
* Return         : 
**********************************************************************************************************/
void SSD1963_LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
	uint16_t i,j; 
	SSD1963_Address_set(xsta,ysta,xend,yend);   
	for(i=ysta;i<=yend;i++)
	{													   	 	
		for(j=xsta;j<=xend;j++)LCD_WriteData(color);
	} 					  	    
}  

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
	uint16_t t; 
	int xerr=0,yerr=0,delta_x,delta_y,distance; 
	int incx,incy,uRow,uCol; 

	delta_x=x2-x1; 
	delta_y=y2-y1; 
	uRow=x1; 
	uCol=y1; 
	if(delta_x>0)incx=1;  
	else if(delta_x==0)incx=0;
	else {incx=-1;delta_x=-delta_x;} 
	if(delta_y>0)incy=1; 
	else if(delta_y==0)incy=0;
	else{incy=-1;delta_y=-delta_y;} 
	if( delta_x>delta_y)distance=delta_x; 
	else distance=delta_y; 
	for(t=0;t<=distance+1;t++ )
	{  
		SSD1963_LCD_DrawPoint(uRow,uCol);
		xerr+=delta_x ; 
		yerr+=delta_y ; 
		if(xerr>distance) 
		{ 
			xerr-=distance; 
			uRow+=incx; 
		} 
		if(yerr>distance) 
		{ 
			yerr-=distance; 
			uCol+=incy; 
		} 
	}  
}    

/***********************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
* Kullanisi      : 
* Output         : 
* Return         : 
***************************************************************************************************/
void SSD1963_LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
	SSD1963_LCD_DrawLine(x1,y1,x2,y1);
	SSD1963_LCD_DrawLine(x1,y1,x1,y2);
	SSD1963_LCD_DrawLine(x1,y2,x2,y2);
	SSD1963_LCD_DrawLine(x2,y1,x2,y2);
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r)
{
	int a,b;
	int di;
	a=0;b=r;	  
	di=3-(r<<1);           
	while(a<=b)
	{
		SSD1963_LCD_DrawPoint(x0-b,y0-a);             //3           
		SSD1963_LCD_DrawPoint(x0+b,y0-a);             //0           
		SSD1963_LCD_DrawPoint(x0-a,y0+b);             //1       
		SSD1963_LCD_DrawPoint(x0-b,y0-a);             //7           
		SSD1963_LCD_DrawPoint(x0-a,y0-b);             //2             
		SSD1963_LCD_DrawPoint(x0+b,y0+a);             //4               
		SSD1963_LCD_DrawPoint(x0+a,y0-b);             //5
		SSD1963_LCD_DrawPoint(x0+a,y0+b);             //6 
		SSD1963_LCD_DrawPoint(x0-b,y0+a);             
		a++;
		if(di<0)di +=4*a+6;	  
		else
		{
			di+=10+4*(a-b);   
			b--;
		} 
		SSD1963_LCD_DrawPoint(x0+a,y0+b);
	}
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
{
  uint8_t temp;
  uint8_t pos,t;
	uint16_t x0=x;
	uint16_t colortemp=POINT_COLOR;  
	
    if(x>LCD_W-16||y>LCD_H-16)return;	
	
	num=num-' ';
	
	SSD1963_Address_set(x,y,x+8-1,y+16-1);     
	if(!mode) 
	{
		for(pos=0;pos<16;pos++)
		{ 
			temp=ASCII16x8_Table[(uint16_t)num*16+pos];		 
				for(t=0;t<8;t++)
						{                 
								if(temp&0x01)POINT_COLOR=colortemp;
						else
									POINT_COLOR=BACK_COLOR;
									LCD_WriteData(POINT_COLOR);	
									temp>>=1; 
									x++;
						} x=x0;	y++;
		}	
	}else  // bu kisimda yazi cikmiyor. Bu kisma ise 1 konulursa geliyor.
			{
				for(pos=0;pos<16;pos++)
						{
								temp=ASCII12x12_Table[(uint16_t)num*16+pos];		
											for(t=0;t<8;t++)
												{                 
														if(temp&0x01)SSD1963_LCD_DrawPoint(x+t,y+pos);     
														temp>>=1; 
												}
						}
			} POINT_COLOR=colortemp;	    	   	 	  
}   

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/

uint32_t mypow(uint8_t m,uint8_t n)
{
	uint32_t result=1;	 
	while(n--)result*=m;    
	return result;
}			 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len)
{         	
	uint8_t t,temp;
	uint8_t enshow=0;
	num=(uint16_t)num;
	for(t=0;t<len;t++)
	{
		temp=(num/mypow(10,len-t-1))%10;
		if(enshow==0&&t<(len-1))
		{
			if(temp==0)
			{
				SSD1963_LCD_ShowChar(x+8*t,y,' ',0);
				continue;
			}else enshow=1; 
		 	 
		}
	 	SSD1963_LCD_ShowChar(x+8*t,y,temp+48,0); 
	}
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/

void SSD1963_LCD_Show2Num(uint16_t x,uint16_t y,uint16_t num,uint8_t len)
{         	
	uint8_t t,temp;						   
	for(t=0;t<len;t++)
	{
		temp=(num/mypow(10,len-t-1))%10;
	 	SSD1963_LCD_ShowChar(x+8*t,y,temp+'0',0); 
	}
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p)
{         
    while(*p!='\0')
    {       
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;SSD1963_LCD_Clear(WHITE);}
        SSD1963_LCD_ShowChar(x,y,*p,0); //0 olacak aksi halde yazi farkli cikiyor
        x+=8;
        p++;
    }  
}


/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_Clear(uint16_t color)
{                    
     unsigned int l=800,w;

	LCD_WriteCommand(0x002A);	
	LCD_WriteData(0x00);	    
	LCD_WriteData(0x00);
	LCD_WriteData(HDP>>8);	    
	LCD_WriteData(HDP&0x00ff);
  LCD_WriteCommand(0x002b);	
	LCD_WriteData(0x00);	    
	LCD_WriteData(0x00);
	LCD_WriteData(VDP>>8);	    
	LCD_WriteData(VDP&0x00ff);
	LCD_WriteCommand(0x002c);
		
	while(l--)
	{
	    for(w=0;w<480;w++)
		{    
          	LCD_WriteData(color);
		}
	} 
}

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
{
	  POINT_COLOR = _TextColor;  
    BACK_COLOR  = _BackColor;		
}

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_SetTextColor(__IO uint16_t Color)
{
  POINT_COLOR = Color;
}

/****************** Fonksiyon sonu***************/

void LCD_CtrlLinesConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIOD, GPIOE, and AFIO clocks */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE |
  						 RCC_AHB1Periph_GPIOC, ENABLE);

/*-- GPIO Configuration ------------------------------------------------------*/
  /* SRAM Data lines,  NOE and NWE configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15 |
                                GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11;//|
								//GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | 
                                GPIO_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);

  /* RESET lines configuration */
  GPIOC->MODER |= GPIO_MODER_MODER6_0;
  GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1;	   
}

/**
  * @brief  Configures the Parallel interface (FSMC) for LCD(Parallel mode)
  * @param  None
  * @retval None
  */
void LCD_FSMCConfig(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
   
  /* Enable FSMC clock */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
  
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 3 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
  p.FSMC_AddressSetupTime = 30;			 // 0x06 /
  p.FSMC_AddressHoldTime = 0;				   //	0 /
  p.FSMC_DataSetupTime = 30;				 //		 0x6 /
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);   

  /* Enable FSMC NOR/SRAM Bank3 */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}


#ifndef USE_Delay
/**
  * @brief  Inserts a delay time.
  * @param  nCount: specifies the delay time length.
  * @retval None
  */
static void delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0; 
  for(index = (100000 * nCount); index != 0; index--)
  {
  }
}
#endif /* USE_Delay*/
/**
  * @}
  */ 

/**
  * @}
  */ 
  
/**
  * @}
  */ 

/**
  * @}
  */ 
  
/**
  * @}
  */  

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


SSD1963.h
#ifdef __cplusplus
 extern "C" {
#endif 

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
#include "fonts.h"


typedef struct 
{
  int16_t X;
  int16_t Y;
} Point, * pPoint;   
/**
  * @}
  */ 

 typedef struct
{
  __IO uint16_t LCD_REG;
  __IO uint16_t LCD_RAM;
} LCD_TypeDef;
/**
  * @}
  */ 


/** @defgroup STM322xG_EVAL_LCD_Private_Defines
  * @{
  */
/* Note: LCD /CS is NE1 - Bank 1 of NOR/SRAM Bank 1~4 */
#define LCD_BASE           ((uint32_t)(0x60000000 | 0x0001fffE))
#define LCD                ((LCD_TypeDef *) LCD_BASE)
#define MAX_POLY_CORNERS   200
#define POLY_Y(Z)          ((int32_t)((Points + Z)->X))
#define POLY_X(Z)          ((int32_t)((Points + Z)->Y))


/* #define USE_Delay */

#ifdef USE_Delay
#include "main.h" 
  #define _delay_     Delay  /* !< User can provide more timing precise _delay_ function
                                   (with 10ms time base), using SysTick for example */
#else
  #define _delay_     delay      /* !< Default _delay_ function with less precise timing */
#endif

/**
 *
 *
 * 	@brief	SSD1963 Kismi
 *
*/
//     TFT	

#define BLUE  0XF800
#define GREEN 0X07E0
#define RED   0X001F  
#define BRED  0XF81F
#define GRED  0XFFE0
#define GBLUE 0X07FF
#define WHITE 0XFFFF


#define BLACK 0X0000 
#define BROWN 0XBC40 
#define BRRED 0XFC07 
#define GRAY  0X8430 
#define LGRAY 0XC618 
 
#define FSIZE 16 

#define LCD_W 800
#define LCD_H 480

// SSD1963 Tanimlama Sonu




/********** SSD1963 KISMI ********************/

/** 
  * @brief LCD default font 
  */ 
#define LCD_DEFAULT_FONT         Font16x8 

/** 
  * @brief  LCD Direction  
  */ 
#define LCD_DIR_HORIZONTAL       0x0000
#define LCD_DIR_VERTICAL         0x0001

/** 
  * @brief  LCD Size (Width and Height)  
  */ 
#define LCD_PIXEL_WIDTH          0x0140
#define LCD_PIXEL_HEIGHT         0x00F0

/**
  * @}
  */ 

#define ASSEMBLE_RGB(R ,G, B)    ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3)) 

/******* SSD1963 fonksiyon Tanimlamalari Bolumu *******/

void SSD1963_LCD_Init(void);
void TFT_CLEAR(unsigned int color);
void TFT_DrawPoint(unsigned int x,unsigned int y,unsigned int fontcolor);

void SSD1963_Address_set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);
void SSD1963_LCD_DrawPoint(uint16_t x,uint16_t y);
void SSD1963_LCD_DrawPoint_big(uint16_t x,uint16_t y);
void SSD1963_LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color);
void SSD1963_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void SSD1963_LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void SSD1963_Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r);
void SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode);
uint32_t mypow(uint8_t m,uint8_t n);
void SSD1963_LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len);
void SSD1963_LCD_Show2Num(uint16_t x,uint16_t y,uint16_t num,uint8_t len);
void SSD1963_LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p);
void SSD1963_LCD_Clear(uint16_t Color);
void SSD1963_LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
void SSD1963_LCD_SetTextColor(__IO uint16_t Color);

void TFT_Fill(unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend,unsigned int color);



/********** SSD1963 fonksiyon Sonu  *******************/

void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor); 
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
void LCD_SetTextColor(__IO uint16_t Color);
void LCD_SetBackColor(__IO uint16_t Color);



void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c);
void LCD_DisplayChar(uint16_t Line, uint16_t Column, uint8_t Ascii);
void LCD_SetFont(sFONT *fonts);
sFONT *LCD_GetFont(void);


/**
  * @}
  */ 

/** @defgroup  
  * @{
  */ 
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);

void LCD_WriteCommand(uint16_t LCD_Reg); 
void LCD_WriteData(uint16_t LCD_RegValue);
void FULL_ON(uint32_t data);
void windowSet(uint16_t s_x,uint16_t e_x,uint16_t s_y,uint16_t e_y);	
void SendData(uint32_t color);

/**
  * @}
  */ 

/** @defgroup
  * @{
  */ 
void LCD_CtrlLinesConfig(void);
void LCD_FSMCConfig(void);
/**
  * @}
  */
/**
  * @}
  */    
#ifdef __cplusplus
}
#endif



/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


fonts.h
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __FONTS_H
#define __FONTS_H

#ifdef __cplusplus
 extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>

/** @addtogroup Utilities
  * @{
  */
  
/** @addtogroup STM32_EVAL
  * @{
  */ 

/** @addtogroup Common
  * @{
  */

/** @addtogroup FONTS
  * @{
  */ 

/** @defgroup FONTS_Exported_Types
  * @{
  */ 
typedef struct _tFont
{    
  const uint16_t *table;
  uint16_t Width;
  uint16_t Height;
  
} sFONT;

extern sFONT Font16x24;
extern sFONT Font12x12;
extern sFONT Font8x12;
extern sFONT Font8x8;
extern sFONT Font16x8;

extern const uint16_t ASCII16x8_Table[];
extern const uint16_t ASCII12x12_Table[];

/**
  * @}
  */ 

/** @defgroup FONTS_Exported_Constants
  * @{
  */ 
#define LINE(x) ((x) * (((sFONT *)LCD_GetFont())->Height))

/**
  * @}
  */ 

/** @defgroup FONTS_Exported_Macros
  * @{
  */ 
/**
  * @}
  */ 

/** @defgroup FONTS_Exported_Functions
  * @{
  */ 
/**
  * @}
  */

#ifdef __cplusplus
}
#endif
  
#endif /* __FONTS_H */


/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


Fonts.c
  
/* Includes ------------------------------------------------------------------*/
#include "fonts.h"
  
const uint16_t ASCII16x8_Table [] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
0x00,0x48,0x6C,0x24,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x24,0x24,0x24,0x7F,0x12,0x12,0x12,0x7F,0x12,0x12,0x12,0x00,0x00,
0x00,0x00,0x08,0x1C,0x2A,0x2A,0x0A,0x0C,0x18,0x28,0x28,0x2A,0x2A,0x1C,0x08,0x08,
0x00,0x00,0x00,0x22,0x25,0x15,0x15,0x15,0x2A,0x58,0x54,0x54,0x54,0x22,0x00,0x00,
0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0A,0x76,0x25,0x29,0x11,0x91,0x6E,0x00,0x00,
0x00,0x06,0x06,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,
0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x6B,0x1C,0x1C,0x6B,0x08,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x04,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,
0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00,
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,
0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04,
0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x46,0x40,0x20,0x10,0x10,0x00,0x18,0x18,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x5A,0x55,0x55,0x55,0x55,0x2D,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x18,0x14,0x14,0x24,0x3C,0x22,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x1E,0x22,0x42,0x42,0x42,0x22,0x1F,0x00,0x00,
0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x1F,0x22,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1F,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x42,0x42,0x3F,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x02,0x02,0x07,0x00,0x00,
0x00,0x00,0x00,0x3C,0x22,0x22,0x01,0x01,0x01,0x71,0x21,0x22,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x0F,
0x00,0x00,0x00,0x77,0x22,0x12,0x0A,0x0E,0x0A,0x12,0x12,0x22,0x22,0x77,0x00,0x00,
0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00,
0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00,
0x00,0x00,0x00,0xE3,0x46,0x46,0x4A,0x4A,0x52,0x52,0x52,0x62,0x62,0x47,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x4D,0x53,0x32,0x1C,0x60,0x00,
0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x3E,0x12,0x12,0x22,0x22,0x42,0xC7,0x00,0x00,
0x00,0x00,0x00,0x7C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x42,0x42,0x3E,0x00,0x00,
0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x22,0x24,0x24,0x14,0x14,0x18,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x6B,0x49,0x49,0x49,0x49,0x55,0x55,0x36,0x22,0x22,0x22,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x77,0x22,0x22,0x14,0x14,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,
0x00,0x00,0x00,0x7E,0x21,0x20,0x10,0x10,0x08,0x04,0x04,0x42,0x42,0x3F,0x00,0x00,
0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,
0x00,0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40,
0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,
0x00,0x38,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00,
0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00,
0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x49,0x49,0x55,0x55,0x22,0x22,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x18,0x08,0x08,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x22,0x10,0x08,0x08,0x44,0x7E,0x00,0x00,
0x00,0xC0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x00,
0x0C,0x32,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
}; 


sFONT Font16x24 = {
  ASCII16x24_Table,
  16, /* Width */
  24, /* Height */
};

/*************************/
sFONT Font16x8 = {
  ASCII16x8_Table,
  16, /* Width */
  8, /* Height */
};
/*************************/


sFONT Font12x12 = {
  ASCII12x12_Table,
  12, /* Width */
  12, /* Height */
};

sFONT Font8x12 = {
  ASCII8x12_Table,
  8, /* Width */
  12, /* Height */
};


sFONT Font8x8 = {
  ASCII8x8_Table,
  8, /* Width */
  8, /* Height */
};

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

[/quote]
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam Muhittin Abiyi Takip edin. O bu işi çözecek gibi  :)

Birşey Sorayım

Bende yine üzerinde SSD1963 bulanan 4.3" TFT var.

Çözünürlük 480x272,

Bu kütüphaneyi kullanarak Sadece Ekran çözünürlüğünü benim lcd ye göre ayarlasam çalışırmı yoksa başka ayarlardamı yapmak gerek

M_B

#2
Alıntı yapılan: Mucit23 - 27 Mart 2013, 12:59:17
Hocam Muhittin Abiyi Takip edin. O bu işi çözecek gibi  :)

Birşey Sorayım

Bende yine üzerinde SSD1963 bulanan 4.3" TFT var.

Çözünürlük 480x272,

Bu kütüphaneyi kullanarak Sadece Ekran çözünürlüğünü benim lcd ye göre ayarlasam çalışırmı yoksa başka ayarlardamı yapmak gerek
Mucit23 Hocam
SSD1963.c dosyasının ust kısımdaki tanımlamaları değiştirerek çalıştırabilirsiniz.



Edit: Düzenleme yapıldı.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

muhittin_kaplan

Hocam font basmakla img basmak aynı şeymiş :)
yapılması gereken
basılacak fontun taramasını öğrenmek/bilmek. yani karakter in kodları oluşturulurken yukardan aşağımı soldan sağamı onun tespit edilmesi gerekir.

sonrasında karakter boyutunun bilinmesi gerekir (pixel olarak.)

yazılacak bölge önceden açılmalı/bildirilmesi gerekiyor
benim kullandığım fonksiyon

void LCD_Set_Window(unsigned int startX,unsigned int startY,unsigned int endX,unsigned int endY)
{
	LCD_Set_XY(startX,startY);
	LCD_WR_REG(0x50,startX);
	LCD_WR_REG(0x52,startY);
	LCD_WR_REG(0x51,endX);
	LCD_WR_REG(0x53,endY);	
}


sonrasında FontArray dan bilgi sırasıyla basılması gerekir.


void LCD_WR_DATA16(unsigned int data)
{ 
	 DATA_LCD_PORT_H->ODR=data>>8;
	 LCD_RS(1);
	 DATA_LCD_PORT_L->ODR=data;   
     LCD_WR(0);   
     LCD_WR(1);
   
}



void LCD_write_Big_string(unsigned char startX, unsigned int startY, unsigned char *s,unsigned int color,unsigned int xcolor)
{
  unsigned char avl,i,n,z;

   LCD_CS(0);

 while (*s)
  {
/*
 * Aşağıdaki kod ile TFT lerin çalışması "alan aç yazmaya başla" sistemi
 * için gerekli olan bölgeyi açıyor.
 */
 	 LCD_Set_Window(startX,startY,startX+15,startY+15); //Bir Adet daha fazla yer Açıyor.
	 LCD_WR_REG8(0x22);

   for(i=0;i<32;i++) 		//aşağıdaki kodları 16 kez yap Toplam BYTE kadar olmalı.
  {				//	/-------//aşağıdaki 0 yerine *s olacak
   avl=Font3[*s-32][i];	//karakteri bulmak için s in değerini 32 ile çıkartıyoruz. "i" ile tanımlanan tablo bilgisini alıyor ve avl ye atıyor.

    for(n=0;n<8;n++)		//aşağıdaki kodları 8 kez yap
	   {
		/*
		 * Eğer avl nin MSB biti 1 se Color değişkenini yukarıda açılan bölgeye SIRAYLA nokta koyuyor.
		 * Eğer avl nin MSB biti 1 değilse ARKA PLAN rengi basılıyor.
		 */
	    if(avl & 0x80) LCD_WR_DATA16(color);
        else LCD_WR_DATA16(xcolor);

	    avl<<=1; //avl sola kaydırılıyor bu işlem 8 kez yapılıyor ve BIR karakterin tüm taraması çıktığında sonraki karaktere geçiyor.


  	  }
	}

     startX=startX+13;//sonraki karakter için başlangıç noktası ayarlanıyor. (alan açılıyor)
     s++; //Sonraki karaktere geçiliyor.
  }
  LCD_CS(1);
}


Ama SSD chip de böylemidir bilmiyorum.

M_B

Hocam sonunda 16x24 fontu da basabildim ve bu font basma olayının mantıgını ogrendim.
yukarda vermiş oldugum kodu daha sonra font secme sekline getirip duzenleyecegim.
Sadece 16x24 font basılması istenirse
yapılması gerekenler
void SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
{
  uint8_t temp;
  uint8_t pos,t;
    uint16_t x0=x;
    uint16_t colortemp=POINT_COLOR;  
    
    if(x>LCD_W-16||y>LCD_H-16)return;	
    
    num=num-' ';
    
    SSD1963_Address_set(x,y,x+16-1,y+24-1);     
    if(!mode) 
    {
        for(pos=0;pos<24;pos++)
        { 
            temp=ASCII16x24_Table[(uint16_t)num*24+pos];		 
                for(t=0;t<16;t++)
                        {                 
                                if(temp&0x01)POINT_COLOR=colortemp;
                        else
                                    POINT_COLOR=BACK_COLOR;
                                    LCD_WriteData(POINT_COLOR);	
                                    temp>>=1; 
                                    x++;
                        } x=x0;	y++;
        }	
    }else  // bu kisimda yazi cikmiyor. Bu kisma ise 1 konulursa geliyor.
            {
                for(pos=0;pos<24;pos++)
                        {
                                temp=ASCII16x24_Table[(uint16_t)num*24+pos];		
                                            for(t=0;t<16;t++)
                                                {                 
                                                        if(temp&0x01)SSD1963_LCD_DrawPoint(x+t,y+pos);     
                                                        temp>>=1; 
                                                }
                        }
            } POINT_COLOR=colortemp;	    	   	 	  
}   

ve
void SSD1963_LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p)
{         
    while(*p!='\0')
    {       
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;SSD1963_LCD_Clear(WHITE);}
        SSD1963_LCD_ShowChar(x,y,*p,0); //0 olacak aksi halde yazi farkli cikiyor
        x+=16;
        p++;
    }  
}

yapılınca direkmen 16x24 karakter basabiliyor.
Mantıgı basitmiş ;)
16X24 demek 16 bit 24satır .

Not: Yukardaki programı daha sonra duzenleyip editleyecem.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

z

Bu balonları (topları) hep merak etmişimdir. Duvara yada bir başka topa çarptığında gerçeğe uygun olarak yön değiştiriyorlar.

Bu olayları gerçek çarpışma denklemleri kullanarak mı yapıyorsunuz? Yoksa basit bir hilesi varmı?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

M_B

Alıntı yapılan: z - 28 Mart 2013, 00:11:44
Bu balonları (topları) hep merak etmişimdir. Duvara yada bir başka topa çarptığında gerçeğe uygun olarak yön değiştiriyorlar.

Bu olayları gerçek çarpışma denklemleri kullanarak mı yapıyorsunuz? Yoksa basit bir hilesi varmı?
@z hocam 
Balonun code : Mantığını bende bilmiyorum. Ben bu kitle ekranla çalışması için düzenleme yaptım.
koddan da görüleceği üzerine kova doldur boşalt mantığı. ( Diziler kendi aralarında doldur boşalt yapıyor )

#define tftX 800
#define tftY 480

#define n 20
#define PI 3.14159265

char deger1[20];

uint8_t i;
uint8_t j;

float x[n];
float y[n];
uint8_t r[n];

float oldX[n];
float oldY[n];

float velX[n];
float velY[n];

uint8_t red[n];
uint8_t green[n];
uint8_t blue[n];


GPIO_InitTypeDef GPIO_InitStructure;
static __IO uint32_t TimingDelay;


void delay_ms(u16 Zms);
void delay_us(u32 Zus);



void setupBouncing(void) {
 float circle1;
 const float phase1 = 2 * PI / 3;
 const float phase2 = 4 * PI / 3;

 for(i = 0; i < n; i++) {
  x[i] = tftX / 2;
  y[i] = tftY / 2;
  r[i] = i * 2 + 10;

  oldX[i] = x[i];
  oldY[i] = y[i];

  velX[i] = 2;
  velY[i] = 2;

  circle1 = i * 2 * PI / n;
  red[i] = cos(circle1) * 127 + 127;
  green[i] = cos(circle1 + phase2) * 127 + 127;
  blue[i] = cos(circle1 + phase1) * 127 + 127;
 }
}

void collision(void) {
 float disX = x[j] - x[i];
 float disY = y[j] - y[i];
 float d2 = disX * disX + disY * disY;

 if(d2 != 0) {
  float rij = r[i] + r[j];
  float rij2 = rij * rij;

  if(d2 < rij2) {
   float ii = (disX * velX[i] + disY * velY[i]) / d2;
   float ji = (disX * velY[i] - disY * velX[i]) / d2;
   float ij = (disX * velX[j] + disY * velY[j]) / d2;
   float jj = (disX * velY[j] - disY * velX[j]) / d2;
   float ratio = rij / sqrt(d2);

   velX[i] = ij * disX - ii * disY;
   velY[i] = ij * disY + ii * disX;
   velX[j] = ji * disX - jj * disY;
   velY[j] = ji * disY + jj * disX;

   disX *= (ratio - 1) / 2;
   disY *= (ratio - 1) / 2;

   x[j] += disX;
   y[j] += disY;
   x[i] -= disX;
   y[i] -= disY;
  }
 }
}

void borders(void) {
 if(x[i] >= tftX - r[i] - 1) {
  x[i] = tftX - r[i] - 1;
  velX[i] = -velX[i];
 } else if(x[i] <= r[i]) {
  x[i] = r[i];
  velX[i] = -velX[i];
 }

 if(y[i] >= tftY - r[i] - 1) {
  y[i] = tftY - r[i] - 1;
  velY[i] = -velY[i];
 } else if(y[i] <= r[i]) {
  y[i] = r[i];
  velY[i] = -velY[i];
 }
}

void draw(void) {

   SSD1963_LCD_SetTextColor(ASSEMBLE_RGB(0, 0, 0));
   SSD1963_Draw_Circle(oldX[i], oldY[i], r[i]);

   SSD1963_LCD_SetTextColor(ASSEMBLE_RGB(red[i], green[i], blue[i]));
   SSD1963_Draw_Circle(x[i], y[i], r[i]);

 oldX[i] = x[i];
 oldY[i] = y[i];
}


void loop(void) {
 for(i = 0; i < n; i++) {

  x[i] += velX[i];
  y[i] += velY[i];

  for(j = i + 1; j < n; j++)
   collision();

  borders();

  if((x[i]) != (oldX[i]) || (y[i]) != (oldY[i]))
   draw();
 }
}


int main(void)
{

if (SysTick_Config(SystemCoreClock / 1000))
  { 
		while (1);
	}
        SSD1963_LCD_Init();
	Delay(500);
	SSD1963_LCD_Clear(BLACK);
      setupBouncing();
   
  while (1)
  {
      loop();
      Delay(10);
    
  }
}
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

controller

Alıntı yapılan: z - 28 Mart 2013, 00:11:44
Bu balonları (topları) hep merak etmişimdir. Duvara yada bir başka topa çarptığında gerçeğe uygun olarak yön değiştiriyorlar.

Bu olayları gerçek çarpışma denklemleri kullanarak mı yapıyorsunuz? Yoksa basit bir hilesi varmı?

Aslında çok basit, balonlar X-Y koordinatında hareket ederken çarptığı düzlemdeki hareket tersine çevriliyor.

Yani X düzleminde ileri doğru hareket ederken sınırlar kontrol ediliyor, çarpma algılandığı anda X yönü tersine çeviriyor.

Buna benzer bende bir uygulama yapmıştım. Birim hareketi örneğin 3 olarak ayarlayıp, çarpma algılandığında bu birim hareketini -1 ile çarpınca geri doğru hareket ediyordu.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

M_B

Ekranla ilgili son resimler:



Buda orjinal resim:

[/quote]
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

muhittin_kaplan

Hocam img sığdımı ? nereden yüklüyorsunuz ?

Mucit23

Hocam Sizde mi 565 formatında resmi gönderdiniz? Eğer öyleyse resmi nasıl işlemciye gömdünüz. 800x480 epeyce bir hafıza gerektirir.


M_B

#11
Alıntı yapılan: muhittin_kaplan - 05 Nisan 2013, 10:01:24
Hocam img sığdımı ? nereden yüklüyorsunuz ?
Hocam resmi Image2lcd programı kullanarak hex cevirip program icine gomuyorum.  Dizi boyutu [768000];
Yalnız Kite yuklemesi uzun suruyor.


mesaj birleştirme:: 05 Nisan 2013, 10:05:58

Alıntı yapılan: Mucit23 - 05 Nisan 2013, 10:03:13
Hocam Sizde mi 565 formatında resmi gönderdiniz? Eğer öyleyse resmi nasıl işlemciye gömdünüz. 800x480 epeyce bir hafıza gerektirir.
evet hocam 16 bit 565 formatı ile cevirip yukledim.
Aslında ikinci bir resim veya aynı resim Flash yapar gibi denemek lazım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

serdararikan

sd karta yüklemeyi neden denemiyorsunuz hocam?

muhittin_kaplan

#13
Hocam 768000 byte değil mi (750kb kalmış 250kb) img basma fonksiyonunuz nasıl ?  ilk byte alıp sola kaydırıp ikinci byte mı alıyor ?

mesaj birleştirme:: 05 Nisan 2013, 10:29:36

Bu arada Font seçerek yazı yazma fonksiyonunu ne yaptınız ?

M_B

#14
Alıntı yapılan: serdararikan - 05 Nisan 2013, 10:10:43
sd karta yüklemeyi neden denemiyorsunuz hocam?
Hocam onu da yapacam. az kaldı Vakit buldukca sırayla gidiyorum. Önce ekran halledeyim diye düşünmüştüm. Ve halletim


mesaj birleştirme:: 05 Nisan 2013, 11:01:58

Alıntı Yap
Hocam 768000 byte değil mi (750kb kalmış 250kb) img basma fonksiyonunuz nasıl ?  ilk byte alıp sola kaydırıp ikinci byte mı alıyor ?
Evet Hocam o kadar byte gidiyor.
ekrana basma işi pixel pixel
void SSD1963_LCD_BMP(uint16_t x,uint16_t y,uint16_t w,uint16_t h,const uint8_t * src)
{       

  volatile uint32_t index;
  volatile uint32_t size = (w * h);
  uint16_t *bitmap_ptr =  (uint16_t*)src;
  uint16_t i;
   
	 
	LCD_WriteCommand(0x002A);	
	LCD_WriteData(x>>8);	    
	LCD_WriteData(x&0x00ff);
	LCD_WriteData((x+w-1)>>8);	    
	LCD_WriteData((x+w-1)&0x00ff);
    LCD_WriteCommand(0x002b);	
	LCD_WriteData(y>>8);	    
	LCD_WriteData(y&0x00ff);
	LCD_WriteData((y+h-1)>>8);	    
	LCD_WriteData((y+h-1)&0x00ff);
	LCD_WriteCommand(0x002c);

	
	for(index = 0; index < size; index++)
  		{
		LCD_WriteData(*bitmap_ptr++);
			for(i=0;i<2;i++);
  		}
 

}

Alıntı Yap
Bu arada Font seçerek yazı yazma fonksiyonunu ne yaptınız ?
Onu da halletim. Son kodu ve resimleri ekleyecem
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet