Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: M_B - 27 Mart 2013, 11:30:06

Başlık: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 27 Mart 2013, 11:30:06
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:

(http://c1303.hizliresim.com/17/n/l8c6f.jpg) (http://bit.ly/c25MCx)

(http://c1303.hizliresim.com/17/n/l8c79.jpg) (http://bit.ly/c25MCx)
STM32F407 ve 7" TFT LCD SSD1963 Driver Baloncuk uygulamasi (http://www.youtube.com/watch?v=gpd7wJe6IRI#)

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]
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 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
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 27 Mart 2013, 13:02:57
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ı.

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 27 Mart 2013, 21:48:00
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.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 28 Mart 2013, 00:01:41
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.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 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ı?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 28 Mart 2013, 07:57:15
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);
   
  }
}
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: controller - 28 Mart 2013, 09:47:03
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.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 05 Nisan 2013, 09:39:51
Ekranla ilgili son resimler:

(http://b1304.hizliresim.com/18/5/lsvh5.jpg) (http://bit.ly/c25MCx)

Buda orjinal resim:
(http://b1304.hizliresim.com/18/5/lsvhn.jpg) (http://bit.ly/c25MCx)
[/quote]
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 05 Nisan 2013, 10:01:24
Hocam img sığdımı ? nereden yüklüyorsunuz ?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 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.

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 05 Nisan 2013, 10:04:28
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.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: serdararikan - 05 Nisan 2013, 10:10:43
sd karta yüklemeyi neden denemiyorsunuz hocam?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 05 Nisan 2013, 10:27:31
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 ?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 05 Nisan 2013, 10:57:11
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
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: HexfeT - 05 Nisan 2013, 11:17:56
Ben de aynı panel ve 32F4 üzerinde çalışıyorum. Paneli ebay'den kargo dahil 50$ a aldım. Chibios'un grafik çizim fonksiyonlarını ve fontlarını kendi koduma uyarladım. Bu ara touch panel işini çözmeye çalışıyorum. ADS7843'ün berbat bir çip olduğunu düşünüyorum.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 05 Nisan 2013, 11:37:03
ADS7843 benim board dada mevcut. bende çözmeliyim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 05 Nisan 2013, 11:45:58
Alıntı yapılan: muhittin_kaplan - 05 Nisan 2013, 11:37:03
ADS7843 benim board dada mevcut. bende çözmeliyim.
Hocam benimde ekrandaki XC2046 yani ADS7843 ile aynı onumuzdeki günlerde 7" Ekrana uyarlayacam o zaman yardımcı olabilirim.
Hatta 3.2 " de calıstırmıstım.

muhittin_kaplan hocam;
Az once iki tane 800x400 resmi derledim.
Program size: code kısımları şu şekilde

Tek resimde
Program size: Code:2952 RO-data=782208

Cift resimde
Program size: Code:2976 RO-data=814008 

Kite atmadım uzun suruyor. 
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 05 Nisan 2013, 13:40:12
TP için
http://blog.tkjelectronics.dk/wp-content/uploads/SSD2119_PaintDemo.zip (http://blog.tkjelectronics.dk/wp-content/uploads/SSD2119_PaintDemo.zip) bir proje var. inceleyeceğim..
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 06 Nisan 2013, 18:43:16
PEN_IRQ yu alabiliyorum ama bir türlü veriyi okuyamadım.
Yeni bir konu açalım.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 26 Nisan 2013, 14:42:50
Hocam bende st nin BB genişleme boardu ve ssd1963 işlemcili 7" lcd var.  Yazılımın son durumu nedir. Rica etsem siteye proje olarak ekleyebilir misiniz. 
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Burak B - 26 Nisan 2013, 15:56:09
Touch kontrolcüleri IRQ ile kullanmanızı tavsiye etmem. Projeniz büyüdükçe size sorun yaratacaktır. Onun yerine SysTick bazlı bir strateji izlemenizi tavsiye ederim. PEN_IRQ ile çok daha hızlı işlem yapıyor olabilir ancak diğer ISR' leri çok etkilediğini zamanla göreceksiniz. Mesela STM32 için konuşuyorum ekrana dokunduğunuz sürece touchdan veri almak istediğiniz zaman systick duracaktır. Buna bağlı gecikme v.s. gibi tüm işlevlerde öyle. IRQ kullanılacaksa öncelikleri çok iyi kontrol edebilmek gerek.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 28 Nisan 2013, 00:20:25
Anlaşılan artık kimse bu LCD ile uğraşmıyor.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 29 Nisan 2013, 16:48:46
SSD1963 ya da başka bir işlemcili LCD de  FSMC kullanmadan LCD yi kullanamazmıyız.  Neden sürücüsü olan bir LCD de FSMC kullanılıyor.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 29 Nisan 2013, 16:53:35
Alıntı yapılan: respected - 29 Nisan 2013, 16:48:46
SSD1963 ya da başka bir işlemcili LCD de  FSMC kullanmadan LCD yi kullanamazmıyız.
Kullanılabilir.
Alıntı YapNeden sürücüsü olan bir LCD de FSMC kullanılıyor.
Bu şekilde kullanılmasının amacı hızlı olması.


mesaj birleştirme:: 29 Nisan 2013, 16:54:49

Alıntı yapılan: respected - 28 Nisan 2013, 00:20:25
Anlaşılan artık kimse bu LCD ile uğraşmıyor.
Bu aralar vaktim olmadığı için uğraşamıyorum. İlerleyen  zamanlarda kaldığım yerden devam edecem.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 29 Nisan 2013, 17:00:28
ilginiz için teşekkür ederim M_B hocam
Şu anda FSMC kullanmadan çalışan bir dosyayı inceliyorum. Çalıştırmayı becerebilirsem proje olarak burada paylaşacağım.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: muhittin_kaplan - 29 Nisan 2013, 17:34:24
Aynen Bende Yeni Aldığım Motosiklet yüzünden pek ilgilenemedim. Touch da kaldım.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mucit23 - 29 Nisan 2013, 17:50:02
Havalar Isındı :) Zaman motorcuların zamanı  ;D
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: serdararikan - 30 Nisan 2013, 10:36:14
bir zamanlar ili9320 chipsetli TFT ile uygulama yapmıştım.kullandığım dokunmatik kontrol entegre tlc2947 gibi bişeydi kodunu tam hatırlamıyorum.
SDC13227 (http://www.youtube.com/watch?v=kAJIuatY66Q#)

PIC18f4520 kullanmıştım.

burada dosyalar mevcut

http://dfiles.eu/files/ysqw46wsu (http://dfiles.eu/files/ysqw46wsu)


touch için PEN_IRQ kullandım.umarım işinize yarar.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 30 Nisan 2013, 21:11:44
[IMG]http://img24.imageshack.us/img24/6736/ssd1963.jpg[/img] (http://imageshack.us/photo/my-images/24/ssd1963.jpg/)



Konunun başındaki kodları yukarıdaki bağlantıyı yaparak yüklüyorum. Fakat ekranda hiç bir şey yazmıyor. Acaba LCD de mi sorun var yoksa bir hata mı yapıyorum?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 30 Nisan 2013, 22:06:29
pin baglantıların FSMC ye mi baglı ?
Şemanda D0-15 demissin ?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 30 Nisan 2013, 22:09:03
Evet hocam FSMC . St nin BB genişleme bourdunda olduğu gibi.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 30 Nisan 2013, 22:16:52
o zaman calısması lazım. Bence yeniden pin baglantılarını kontrol edin.
Lcd nin florasanı yanıyor mu ?
Harici olarak 5V girişi var mı ?
Benim Lcd de pin baglantıları dısında 5V soketi de var.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 30 Nisan 2013, 22:20:45
Harici 5V girişi var. Onu bağladım ve florasan  yanıyor.  Kodları tekrar inceleyelim bakalım.  Proje oluştururken bir yerde hata yapmış olabilirim. Derlemede sorun olmuyor ama bakmakta fayda var.

mesaj birleştirme:: 30 Nisan 2013, 22:44:26

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

hocam fonts.h dosyasındaki satırlarda tanımadığı bölüm var sanki. extern tanımlamayı kabul etmiyor. Daha önce derlemesinin sebebi fonts.h bendeki başka bir dosyayı kullandığımdanmış. keil versiyon 4.70

mesaj birleştirme:: 30 Nisan 2013, 23:02:54

M_B hocam
Burada datalar 0-15 FSMC bağlı
RS- PE3
RD-PD4
WR-PD5
CS-PD7
RESET-PD3

Alıntı YapŞeklinde bağladım fakat kodları incelediğimde PE3 ve PD3 göremedim. kodlar içerisinde RS,RD,WR,CS,RESET tanımlamaları yapılmıyor mu? Yoksa FSMC olarak tanımlı olan uçlardan mı gönderiliyor bu bilgiler.
  Kodların içerisinde kayboldum sanırım :))
Bu sorunun cevabını buldum. Zaten FSMC içerisinde bu uçlar tanımlanmış. Sadece reset için ayrıca uç tanımlaması gerekiyor (GPIO) . Yine de netice alamadım. Ekranın flouresan ı flash yapıyor o kadar.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 01 Mayıs 2013, 13:58:29
stm32f4 board a harici besleme vererek denedim. FSMC ayarları ile biraz oynadım. Şimdi kırmızı bir ekran oldu. Sanırım FSMC ayarlarını tam yapamadığımdan kaynaklı sorun.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 06 Mayıs 2013, 15:53:01
main.c

#include "system_stm32f4xx.c"
#include "delay.c"
#include "lcd.h"

int main(void)
{

  SysTick_Config(SystemCoreClock/1000);


SSD1963_LCD_Init();
Delay(500);
TFT_CLEAR(BLUE);
  while (1)
  {
TFT_CLEAR(BLUE);


  }
}




lcd.c


/* Includes ------------------------------------------------------------------*/
#include "lcd.h"


#define ABS(X)  ((X) > 0 ? (X) : -(X))     
#define LCD_RST_PIN                  (GPIO_Pin_3)
#define LCD_RST_PORT                 (GPIOD)

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



u16  POINT_COLOR = BLACK; 
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 ------------------------------------------------*/
   /* Reset LCD */
  GPIO_ResetBits(LCD_RST_PORT, LCD_RST_PIN);
  _delay_(10);
  GPIO_SetBits(LCD_RST_PORT, LCD_RST_PIN);
_delay_(10);
// GPIO_ResetBits(LCD_RST_PORT, LCD_RST_PIN);
// bu kodlarin yerine ust taraf yazildi.
//    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)
{
  uint16_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 GPIOB, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE |
                         RCC_AHB1Periph_GPIOF, 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_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_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, 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);

  /* SRAM Address lines configuration LCD-DC */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_Init(GPIOE, &GPIO_InitStructure); 
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_FSMC);    

  /* NE3 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);

  /* LCD RST configuration */
  GPIO_InitStructure.GPIO_Pin = LCD_RST_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

  GPIO_Init(LCD_RST_PORT, &GPIO_InitStructure);
}

/**
  * @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);
// YYYYYYYYYYyy
//   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
//   FSMC_NORSRAMTimingInitTypeDef  p;
//   
//   /* Enable FSMC clock */
//   RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
//   
// /*-- FSMC Configuration ------------------------------------------------------*/
// /*----------------------- SRAM Bank 1 ----------------------------------------*/
//   /* FSMC_Bank1_NORSRAM4 configuration */
//   p.FSMC_AddressSetupTime = 1;
//   p.FSMC_AddressHoldTime = 0;
//   p.FSMC_DataSetupTime = 9;
//   p.FSMC_BusTurnAroundDuration = 0;
//   p.FSMC_CLKDivision = 0;
//   p.FSMC_DataLatency = 0;
//   p.FSMC_AccessMode = FSMC_AccessMode_A;
//   /* Color LCD configuration ------------------------------------
//      LCD configured as follow:
//         - Data/Address MUX = Disable
//         - Memory Type = SRAM
//         - Data Width = 16bit
//         - Write Operation = Enable
//         - Extended Mode = Enable
//         - Asynchronous Wait = Disable */

//   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 Bank1 */
//   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****/



lcd.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****/



Kodları yukarıdaki şekilde yazdım.
Bağlantıları ise FSMC Data uçlarına
D0-D15
cs-pd7
reset-pd3
dc(rs) -pe3
rd-pd4
wr-pd5
Şeklinde bağladım. 3.3 V ve back light için 5V bağladım. Ekran bazen kırmızı bazen de çizgili çizgili oluyor.  LCD yi bozmuş olabilir miyim?

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: pisayisi - 06 Mayıs 2013, 22:46:36
Lcd bozulmamıştır lcd yi süren portun çalışma frekansını düşürerek deneme yapmanı ve  main.c de lcdinit yapmadan önce cs pinini set etmeni öneririm...

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 00:45:48
Alıntı YapLcd bozulmamıştır lcd yi süren portun çalışma frekansını düşürerek deneme yapmanı ve  main.c de lcdinit yapmadan önce cs pinini set etmeni öneririm...

Her ikisini de denedim hocam. Sonuç aynı. LCD çizgiler oluşuyor sadece. 
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 07 Mayıs 2013, 08:01:46
Alıntı yapılan: respected - 07 Mayıs 2013, 00:45:48
Her ikisini de denedim hocam. Sonuç aynı. LCD çizgiler oluşuyor sadece.
respected;
Keil kodunu bir yere upload et  kitimde  bir test edeyim bakalım.
Ancak sonucu akşam bildirebilirim.


mesaj birleştirme:: 07 Mayıs 2013, 08:07:41

@respected;
Ekteki hex dosyasını yükle bakalım sonuc ne olacak.
Bu hex ekranda ucan dairelere aittir. Bu hex te ekranın calışmazsa baglantılarını kontrol et.
http://www.dosya.tc/server8/cL23Du/CIKIS.rar.html (http://www.dosya.tc/server8/cL23Du/CIKIS.rar.html)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 10:51:56
http://rapidshare.com/files/2112603697/tft1.zip (http://rapidshare.com/files/2112603697/tft1.zip)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 07 Mayıs 2013, 11:18:05
Alıntı yapılan: respected - 07 Mayıs 2013, 10:51:56
http://rapidshare.com/files/2112603697/tft1.zip (http://rapidshare.com/files/2112603697/tft1.zip)
dosyayı indirdim aksama sonucu bildiririm.
Üst kısımda verdiğim dosyayı yüklediniz mi ?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 11:34:25
Evet yükledim hocam. Ekran beyaz bir şey yok. Bağlantılar
D0-D15 (FSMC Data uçları)
cs-pd7
reset-pd3
dc(rs) -pe3
rd-pd4
wr-pd5

bende böyleydi. Değiştirmem gerekiyor muydu?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 07 Mayıs 2013, 11:59:29
Alıntı yapılan: respected - 07 Mayıs 2013, 11:34:25
Evet yükledim hocam. Ekran beyaz bir şey yok. Bağlantılar
D0-D15 (FSMC Data uçları)
cs-pd7
reset-pd3
dc(rs) -pe3
rd-pd4
wr-pd5

bende böyleydi. Değiştirmem gerekiyor muydu?

Benim baglantı şeklim:
Lcd uzerindeki      Kit üzerinde
RESET---------------> NRST
RS--------------------> PD11
CS--------------------> PD7
WR--------------------> PD5
RD--------------------> PD4

FSMC pinlerini
PD14-PD15-PD0-PD1-
PE7-PE8-PE9-PE10-
PE11-PE12-PE13-
PE14-PE15-
PD8-PD9-PD10

Tekrar baglantılarını kontrol et. En azından benim verdiğim hex calısması lazım.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 14:41:20
Hocam teşekkürler. LCD çalıştı. Sadece text  ayna görüntüsü çıkıyor.  Şu ana kadar reset ucu dışında diğerlerini denemiştim. Sadece reset ucunu kit üzerindeki nrst ye bağlamamıştım.

Kodlar içerisinde anlamadığım yer
  GPIOC->MODER |= GPIO_MODER_MODER6_0;
  GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1;
burası idi. Bende buraya başka bir pin ile reset tanımlamıştım. ST nin kendi kütüphanesindeki gibi..
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 07 Mayıs 2013, 16:11:05
Gozun aydın respected;
Çalıştığına sevindim.
O zaman senin kodu denememe gerek kalmadı
Yazının ters cıkma olayı Lcd init fonksiyonun icindeki registerlardan ayarlanıyor.
Ezbere bilmiyorum Datasheete bakmak lazım.
Bundan sonrası sana ait ;)

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 19:13:42
Evet hocam çok teşekkür ederim. Burada verdiğiniz kod ile en son gönderdiğiniz hex dosya aynı programa mı ait?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 07 Mayıs 2013, 22:53:43
Alıntı yapılan: respected - 07 Mayıs 2013, 19:13:42
Evet hocam çok teşekkür ederim. Burada verdiğiniz kod ile en son gönderdiğiniz hex dosya aynı programa mı ait?
farklı olsa gerek çünkü font basmayla uğraşmıştım.
Musait zamanda hepsini yeniden düzenleyeçem o zaman son halini paylaşırım. ( touch ta olacak )

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 07 Mayıs 2013, 23:00:18
Çünkü buradaki kod ile kırmızı bir ekran geliyor sadece.
Tamam hocam  teşekkür ederim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 10 Mayıs 2013, 11:50:40
M_B Hocam rica etsem çalışan kodları proje olarak verebilir misiniz?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 10 Mayıs 2013, 16:19:52
Alıntı yapılan: respected - 10 Mayıs 2013, 11:50:40
M_B Hocam rica etsem çalışan kodları proje olarak verebilir misiniz?
Merhaba;
Şimdilik resim bastığım kodu veriyorum.
Umarım işinize yarar. Epey zamandır üzerinde çalışamıyorum
http://www.tekdosya.com/files/IN63221KW/a0c2903172dd6ec034f509b803cf03f9/ResimBasma.rar.html (http://www.tekdosya.com/files/IN63221KW/a0c2903172dd6ec034f509b803cf03f9/ResimBasma.rar.html)


mesaj birleştirme:: 10 Mayıs 2013, 16:28:00

Alıntı yapılan: M_B - 10 Mayıs 2013, 16:19:52
Merhaba;
Şimdilik resim bastığım kodu veriyorum.
Umarım işinize yarar. Epey zamandır üzerinde çalışamıyorum
http://www.tekdosya.com/files/IN63221KW/a0c2903172dd6ec034f509b803cf03f9/ResimBasma.rar.html (http://www.tekdosya.com/files/IN63221KW/a0c2903172dd6ec034f509b803cf03f9/ResimBasma.rar.html)

Bir baska download sitesi:
http://s3.dosya.tc/server5/RmKOA1/ResimBasma.rar.html (http://s3.dosya.tc/server5/RmKOA1/ResimBasma.rar.html)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 10 Mayıs 2013, 20:47:26
Teşekkür ederim M_B hocam.  Ekranda çizgi film kahramanı sanırım çok az görünüp sonra kayboluyor. Aslında bugün epey bir uğraşıp ekranda renkleri oluşturdum. Renkler problemsiz çıkıyor.  Resim çok az görünüp kayboluyor.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 10 Mayıs 2013, 20:58:12
Alıntı yapılan: respected - 10 Mayıs 2013, 20:47:26
Teşekkür ederim M_B hocam.  Ekranda çizgi film kahramanı sanırım çok az görünüp sonra kayboluyor. Aslında bugün epey bir uğraşıp ekranda renkleri oluşturdum. Renkler problemsiz çıkıyor.  Resim çok az görünüp kayboluyor.
verdiğim kodla ekrana  800x480 cozunurlukte araba resmi basması lazım.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 10 Mayıs 2013, 21:18:50
http://s7.postimg.cc/vcajg3r7f/20130510_211027.jpg (http://s7.postimg.cc/vcajg3r7f/20130510_211027.jpg)
Hocam buradaki resim çıkıyor. Bazen renk farklı oluyor (Ana renk)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 10 Mayıs 2013, 21:52:38
Alıntı yapılan: respected - 10 Mayıs 2013, 21:18:50
http://s7.postimg.cc/vcajg3r7f/20130510_211027.jpg (http://s7.postimg.cc/vcajg3r7f/20130510_211027.jpg)
Hocam buradaki resim çıkıyor. Bazen renk farklı oluyor (Ana renk)
merhaba;
İş yerindeki makinedeki klasor eskiymiş.
Yenisini şimdi upload ettim. Tekrardan indirip bir denermisin. dosyalar karısmasın diye sonuna Rev1 yazdım
Yanlışlık icin kusura bakma.

Yeni link: http://www.4shared.com/rar/N2dSvX7F/ResimBasmaRev1.html (http://www.4shared.com/rar/N2dSvX7F/ResimBasmaRev1.html)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 10 Mayıs 2013, 22:16:41
(http://s20.postimg.cc/etdyxvhrh/20130510_221316.jpg) (http://postimg.cc/image/mm4mpunqh/full/)
photo share (http://postimg.cc/)

Evet şimdi oldu hocam. Çok teşekkür ederim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 10 Mayıs 2013, 22:42:08
Ekrandaki P harfi ne ?

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 10 Mayıs 2013, 23:21:42
:) Hocam daha jelatini çıkarmadım da jelatinde yazıyor o
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 12 Mayıs 2013, 01:18:02
SSD1963_LCD_ShowNum(10,200,sayi,5);
sayi++;if(sayi>500) sayi=0;
Delay(100);


M_B Hocam whiledöngüsü içerisine yukarıdaki kod satırlarını yazıyorum. Ekranda 500 e kadar sayıp tekrar  başa dönmesi gerekiyor. Fakat sayarken birden ekrandaki bilgiler gidiyor ve çizgili bir hal alıyor.
Aklıma ilk gelenler
1- 5 V adaptör lcd fazla akım çekmeye başladığından yetersiz kalıyor.
2- kodlar efektif olmadığından lcd verileri karışıyor. (Saçma)
3- LCD de ara ara clear yapmak gerekiyor.

Bunlardan biri olabilir mi?

Edit: Fazla akım çektiğinden adaptör yetersiz kalıyormuş.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: dombilik - 12 Mayıs 2013, 16:23:47
@M_B  ve respected hocam ;
Ekrandaki görüntüde periyodik şekilde karnıcalanma şeklinde parazitik
noktacıklar oluşuyor(genellikle ekranın sağ bölgesi).Devre beslemem de bir problem yok.
Kullandığım ekran @M_B hocamınki ile birebir aynı..
Siz böyle bir problemle karşılaştınızmı?

Edit:
LCD panel arkasındaki bir kaç yerin lehimlerini tazeleyince normale geldi..
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 12 Mayıs 2013, 21:02:29
Ekranın bir parçasında değilde genelinde böyle bir problem oldu. M_B hocamın en son verdiği proje dosyasını derleyip yüklersen bir sorun olmaz. Birde LCD nin besleme gerilimini (5 V ekran ) board üzerinden değilde harici bir adaptörle vermelisin
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 28 Mayıs 2013, 15:54:13
(SSD1963 XPT2046)
M_B hocam sizin kodlar üzerine touch eklemeye çalıştım. IRQ  pinin A15 ayarladığım da ekranın herhangi bir yerine dokunsam da tepki veriyor. Kaanx hocam epeyce fikir verdi ama bir türlü beceremedim. Acaba yanlış bir ayar mı yapıyorum? Proje dosyasını aşağıdaki linke koydum. Rica etsem bakabilir misiniz?

http://rapidshare.com/files/3631787352/ResimBasma.rar (http://rapidshare.com/files/3631787352/ResimBasma.rar)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 28 Mayıs 2013, 21:39:58
Merhaba bu aralar yogunum kitle ilgilenemiyorum.
Onumuzdeki günlerde  calısan kod koyacam.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 22 Temmuz 2013, 14:32:34
Türkiyede bu lcd'yi alabileceğim bir yer var mı?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 22 Temmuz 2013, 15:22:39
Karaköyde epeyce gezdim bulamadım. Çin'den getirttim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: OptimusPrime - 22 Temmuz 2013, 15:27:24
stellarisware içerisinde açık kaynak kodlu lcd sürücü kütüphanesi ve grafik kütüphanesi mevcut.
ssd1993 ile gerçekleştirilmiş fakat kolayca kodlar ssd1963 e çevrilebiliyor. stellarisware ile gelen çeşitli toollar sayesinde resmi sıkıştırarak koda eklemekte mümkün. açık kaynak kodlu olduğu için kolayca stm32 için uyarlanabilir diye düşünüyorum.

https://www.picproje.org/index.php/topic,34330.0.html (https://www.picproje.org/index.php/topic,34330.0.html)
ti cortex m3 ü için yukarıdaki linkte konuyla ilgili muhabbet etmiştik.

lcd içinse özdisana telefon edin derim...
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 8051-ARM - 17 Eylül 2013, 00:04:47
Merhaba arkadaşlar aranıza yeni katıldım bugüne kadar 8051 tabanlı işlemcilerle çalıştım çizgi elektronikten stm32f4-discovery kit ve 5.7 " tft lcd ssd1963  sürücü ile arm ye merhaba dedim FSMC kullanmadan tft sürüp resim bastırmayı başardım fakat projemde 2 adet 320x240  resim var resimler arası geçiş çok yavaş oluyor kodlarda gördüğünüz beklemeleri yapmazsam lcd çalışmıyor FSMC ile bu sorunu aşabilir miyim yardımlarınızı bekliyorum .

#include <stm32f4xx.h>

extern u8 resim1[];
extern u8 resim2[];

void SystemInit()
{
unsigned int i;

    (*((int*)0xE000ED88))|=0x0F00000; 
    for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00009400;         // AHB ve APB hizlarini max degerlere set edelim
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin       
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
//  RCC->PLLCFGR = 0x07402A04;     // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
    RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
//  FLASH->ACR = 0x00000705;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
    RCC->AHB1ENR |= 0x0000001F;    // GPIO A,B,C,D clock'u aktif edelim
    GPIOD->MODER = 0x55001155;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz

GPIOE->MODER = 0x00005555;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi
    GPIOE->OTYPER= 0x00005555;
GPIOE->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
GPIOE->PUPDR= 0x00005555;
GPIOE->PUPDR= 0x00005555;
}


void Delay()
{
unsigned int i;

    for(i=0;i<0x800000;i++);
}
void delay_ms(unsigned long Bekle)
{
    Bekle = Bekle * 42008;
    while(Bekle>0){Bekle--;}
}
void delay_us(unsigned long Bekle)
{
    Bekle = Bekle * 42;
    while(Bekle>0){Bekle--;}
}
void delay_uss(unsigned long Bekle)
{
    Bekle = Bekle * 14;
    while(Bekle>0){Bekle--;}
}
void lcd_data(unsigned char data)

unsigned int i;
GPIOE->ODR = data;
//delay_uss(1);
for(i=0;i<0x10;i++);
GPIOD->BSRRH=0x0010; // PD4 RESET LCD_WR
for(i=0;i<0x20;i++);
//delay_uss(2);
GPIOD->BSRRL=0x0010; // PD4 SET LCD_WR
//delay_uss(1);
}
void lcd_cmd(unsigned char cmd)
{
unsigned int i;
GPIOD->BSRRH=0x0004; // PD2 RESET LCD_RS
//delay_uss(1);
for(i=0;i<0x10;i++);
GPIOE->ODR = cmd;
for(i=0;i<0x8;i++);
//delay_uss(1);
GPIOD->BSRRH=0x0010; // PD4 RESET LCD_WR
for(i=0;i<0x20;i++);
//delay_uss(2);
GPIOD->BSRRL=0x0010; // PD4 SET LCD_WR
//delay_uss(1);
GPIOD->BSRRL=0x0004; // PD2 SET LCD_RS
    //delay_uss(1);
}
void lcd_clr()
{
unsigned long y ;

lcd_cmd(0x2A);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x1);
lcd_data(0x3F);

lcd_cmd(0x2B);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0xEF);

lcd_cmd(0x2C);


for(y=0;y<76800;y++)    

{
lcd_data(0x00);
lcd_data(0x00);
lcd_data(0x00);
}
}

void resim_bas(const uint8_t * bmp_)
{       
  volatile uint32_t index;
  uint8_t *bmp =  (uint8_t*)bmp_;
   
    lcd_cmd(0x2A);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x1);
lcd_data(0x3f);

lcd_cmd(0x2B);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0xef);

lcd_cmd(0x2C);

for(index = 0; index < 230400; index++)
  {
lcd_data(*bmp++);
  }
}
void lcd_init(void)
{
GPIOE->ODR= 0xFF;  //
GPIOD->BSRRL= 0x7E; // PD0 //GPIOD->BSRRL= 0x3E; // PD0
delay_ms(100);
      GPIOD->BSRRH=0x0008; // PD3 RESET LCD_RST
      delay_ms(100);
      GPIOD->BSRRL=0x0008; // PD3 SET LCD_RST
delay_ms(120);

      GPIOD->BSRRH=0x0002; // PD1 RESET LCD_CS
     
lcd_cmd(0x1);
    delay_ms(5);

lcd_cmd(0xE0);
lcd_data(0x1);
delay_ms(120);
lcd_cmd(0xE0);
lcd_data(0x3);

      lcd_cmd(0xB0);
lcd_data(0xc);
lcd_data(0x0);
lcd_data(0x1);
lcd_data(0x3F);
lcd_data(0x0);
lcd_data(0xEF);
    lcd_data(0x0);

      lcd_cmd(0x36);
lcd_data(0x0);

lcd_cmd(0xF0);
lcd_data(0x0);

lcd_cmd(0x3A);
lcd_data(0x60);



      lcd_cmd(0xE2);
lcd_data(0x22);
lcd_data(0x3);
lcd_data(0x4);

lcd_cmd(0xE6);
lcd_data(0x00);
lcd_data(0xEA);
lcd_data(0xEC);

lcd_cmd(0xB4);
lcd_data(0x1);
lcd_data(0xB8);
lcd_data(0x0);
lcd_data(0x44);
lcd_data(0xF);
lcd_data(0x0);
    lcd_data(0x0);
lcd_data(0x0);

lcd_cmd(0xB6);
lcd_data(0x1);
lcd_data(0x8);
lcd_data(0x0);
lcd_data(0x12);
lcd_data(0x7);
lcd_data(0x0);
    lcd_data(0x0);

lcd_cmd(0x2A);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x1);
lcd_data(0x3F);

lcd_cmd(0x2B);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0x0);
lcd_data(0xEF);

lcd_cmd(0x13);
lcd_cmd(0x29);
      lcd_clr()  ;

GPIOD->BSRRL=0x0001; // PD0 SET LCD_BCK_L
}      

int main()
{
    lcd_init();

while(1)
{
    unsigned long x ;

      resim_bas(resim1);
    GPIOD->BSRRL=0x1000;
delay_ms(5000);
    resim_bas(resim2);
    GPIOD->BSRRH=0x1000;
delay_ms(5000);

}    
}
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: z - 17 Eylül 2013, 08:28:24
R/W, CS, Enb gibi pinler barindiran harici cihazlara erisirken cihazin dokumaninda zamanlama tablolarinda belirtilen min-max surelere harfiyen uymak gerekiyor.

Bu degerlere sadik kalarak sinyaller uretiyor olsan da eger MCU ile harici cihaz arasindaki kablo uygun sekilde sonlandirilmamissa yansima olaylari sonucu harici cihaza ulasan sinyallerin dalga sekli MCUda uretildigi sekilden cok farkli sekle donusebilir ve kritik zamanlama degerlerinden farkli sinyaller olusabilir. Bu yuzden baglantilari olabildigince kisa tutmakta fayda var.

Ote yandan yaziliminizda for(i=0;i<.....) seklinde soft gecikme rutinleri optimizasyon nedeniyle hic isleme alinmayabilir ve bunu telefi etmek adina daha baska satirlarda  ekstra buyuk gecikmeler veriyor olabilirsiniz.

Eger iyi bir scopunuz varsa;

Sinyal isimlerini atiyorum

CS yi aktif edin
ardindan R/W i aktif edin.

Scop ile LCD pinlerinde CS ve R/W sinyallerini gozleyin. Ardindan katalogdaki zamanlama degerlerine sadik kalarak CS ve R/W arasinda gecikme saglayacak sayma degerini deneysel olarak tespit edin ve bu degere bir miktar daha pay ekleyin.

Ardindan ayni islemi CS ve data sinyalleri icin deneyerek datalarin ne kadar gecikme ile yola cikacagini tespit edin.

Bir de for tipi soft gecikme rutinlerinde for'a ait degisken tanimina volatile ekini getirin. Optimizasyonu da hiz acisindan en iyi degere ayarlayin.

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: pisayisi - 17 Eylül 2013, 10:45:45
FSMC modülünü kullanarak olabilcek en yüksek hızda LCD yi sürebilirsiniz. FSMC konfigürasyon ayarlarındaki aşağıdaki ilk üç değişkenle oynayarak em uygun hızı yakalayabilirsiniz. Çok düşük seçilen değerler LCD de genelde karlanma türü bozuk bir görüntü üretir. Z hocamın önerdiği bilgiler ise LCD nizin çalışabilceği minimum gecikme değerlerini koda eklemek için ideal olabilir. Ben fsmc ayarlarında birkaç deneme yanılma ile en uygun ayarın yakalanabilceğini düşünüyorum...

/* FSMC_Bank1_NORSRAM4 configuration */
  Timing_read.FSMC_AddressSetupTime = 0x9;
  Timing_read.FSMC_AddressHoldTime = 0; 
  Timing_read.FSMC_DataSetupTime = 0x8;
  Timing_read.FSMC_BusTurnAroundDuration = 0;
  Timing_read.FSMC_CLKDivision = 0;
  Timing_read.FSMC_DataLatency = 0;
  Timing_read.FSMC_AccessMode = FSMC_AccessMode_B;   
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 8051-ARM - 22 Eylül 2013, 23:16:55
Alıntı yapılan: z - 17 Eylül 2013, 08:28:24
R/W, CS, Enb gibi pinler barindiran harici cihazlara erisirken cihazin dokumaninda zamanlama tablolarinda belirtilen min-max surelere harfiyen uymak gerekiyor.

Bu degerlere sadik kalarak sinyaller uretiyor olsan da eger MCU ile harici cihaz arasindaki kablo uygun sekilde sonlandirilmamissa yansima olaylari sonucu harici cihaza ulasan sinyallerin dalga sekli MCUda uretildigi sekilden cok farkli sekle donusebilir ve kritik zamanlama degerlerinden farkli sinyaller olusabilir. Bu yuzden baglantilari olabildigince kisa tutmakta fayda var.

Ote yandan yaziliminizda for(i=0;i<.....) seklinde soft gecikme rutinleri optimizasyon nedeniyle hic isleme alinmayabilir ve bunu telefi etmek adina daha baska satirlarda  ekstra buyuk gecikmeler veriyor olabilirsiniz.

Eger iyi bir scopunuz varsa;

Sinyal isimlerini atiyorum

CS yi aktif edin
ardindan R/W i aktif edin.

Scop ile LCD pinlerinde CS ve R/W sinyallerini gozleyin. Ardindan katalogdaki zamanlama degerlerine sadik kalarak CS ve R/W arasinda gecikme saglayacak sayma degerini deneysel olarak tespit edin ve bu degere bir miktar daha pay ekleyin.

Ardindan ayni islemi CS ve data sinyalleri icin deneyerek datalarin ne kadar gecikme ile yola cikacagini tespit edin.

Bir de for tipi soft gecikme rutinlerinde for'a ait degisken tanimina volatile ekini getirin. Optimizasyonu da hiz acisindan en iyi degere ayarlayin.

Öncelikle cevabınız ve tavsiyeleriniz için teşekkürler zamanlamalara uyuyordum ama bir türlü olmuyordu hatamı da buldum şu kod yüzünden sorun çıkıyormuş  fsmc kullanmadan hızlı bir şekilde tft ekrarı sürüyorum artık .

hatalı kodum: GPIOE->OTYPER= 0x00005555;

Alıntı yapılan: pisayisi - 17 Eylül 2013, 10:45:45
FSMC modülünü kullanarak olabilcek en yüksek hızda LCD yi sürebilirsiniz. FSMC konfigürasyon ayarlarındaki aşağıdaki ilk üç değişkenle oynayarak em uygun hızı yakalayabilirsiniz. Çok düşük seçilen değerler LCD de genelde karlanma türü bozuk bir görüntü üretir. Z hocamın önerdiği bilgiler ise LCD nizin çalışabilceği minimum gecikme değerlerini koda eklemek için ideal olabilir. Ben fsmc ayarlarında birkaç deneme yanılma ile en uygun ayarın yakalanabilceğini düşünüyorum...

/* FSMC_Bank1_NORSRAM4 configuration */
  Timing_read.FSMC_AddressSetupTime = 0x9;
  Timing_read.FSMC_AddressHoldTime = 0; 
  Timing_read.FSMC_DataSetupTime = 0x8;
  Timing_read.FSMC_BusTurnAroundDuration = 0;
  Timing_read.FSMC_CLKDivision = 0;
  Timing_read.FSMC_DataLatency = 0;
  Timing_read.FSMC_AccessMode = FSMC_AccessMode_B;   


Fsmc yi denedim ama bazı hatalar aldım eksik kütüphane var herhalde vakit bulunca tekrar deneyeceyim fsmc için kullanılması gereken kütüphaneleri nelerdir belirtirseniz sevinirim.

Arm için çok geç kalmışım 8051 ve asm denden sonra hem c hemde Arm biraz zor geliyor ama yılmak yok  Allah'ın izni ve sizlerin yardımı ile inşallah başaraçağım .
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: 8051-ARM - 22 Eylül 2013, 23:17:25
Alıntı yapılan: z - 17 Eylül 2013, 08:28:24
R/W, CS, Enb gibi pinler barindiran harici cihazlara erisirken cihazin dokumaninda zamanlama tablolarinda belirtilen min-max surelere harfiyen uymak gerekiyor.

Bu degerlere sadik kalarak sinyaller uretiyor olsan da eger MCU ile harici cihaz arasindaki kablo uygun sekilde sonlandirilmamissa yansima olaylari sonucu harici cihaza ulasan sinyallerin dalga sekli MCUda uretildigi sekilden cok farkli sekle donusebilir ve kritik zamanlama degerlerinden farkli sinyaller olusabilir. Bu yuzden baglantilari olabildigince kisa tutmakta fayda var.

Ote yandan yaziliminizda for(i=0;i<.....) seklinde soft gecikme rutinleri optimizasyon nedeniyle hic isleme alinmayabilir ve bunu telefi etmek adina daha baska satirlarda  ekstra buyuk gecikmeler veriyor olabilirsiniz.

Eger iyi bir scopunuz varsa;

Sinyal isimlerini atiyorum

CS yi aktif edin
ardindan R/W i aktif edin.

Scop ile LCD pinlerinde CS ve R/W sinyallerini gozleyin. Ardindan katalogdaki zamanlama degerlerine sadik kalarak CS ve R/W arasinda gecikme saglayacak sayma degerini deneysel olarak tespit edin ve bu degere bir miktar daha pay ekleyin.

Ardindan ayni islemi CS ve data sinyalleri icin deneyerek datalarin ne kadar gecikme ile yola cikacagini tespit edin.

Bir de for tipi soft gecikme rutinlerinde for'a ait degisken tanimina volatile ekini getirin. Optimizasyonu da hiz acisindan en iyi degere ayarlayin.

Öncelikle cevabınız ve tavsiyeleriniz için teşekkürler zamanlamalara uyuyordum ama bir türlü olmuyordu hatamı da buldum şu kod yüzünden sorun çıkıyormuş  fsmc kullanmadan hızlı bir şekilde tft ekrarı sürüyorum artık .

hatalı kodum: GPIOE->OTYPER= 0x00005555;

Alıntı yapılan: pisayisi - 17 Eylül 2013, 10:45:45
FSMC modülünü kullanarak olabilcek en yüksek hızda LCD yi sürebilirsiniz. FSMC konfigürasyon ayarlarındaki aşağıdaki ilk üç değişkenle oynayarak em uygun hızı yakalayabilirsiniz. Çok düşük seçilen değerler LCD de genelde karlanma türü bozuk bir görüntü üretir. Z hocamın önerdiği bilgiler ise LCD nizin çalışabilceği minimum gecikme değerlerini koda eklemek için ideal olabilir. Ben fsmc ayarlarında birkaç deneme yanılma ile en uygun ayarın yakalanabilceğini düşünüyorum...

/* FSMC_Bank1_NORSRAM4 configuration */
  Timing_read.FSMC_AddressSetupTime = 0x9;
  Timing_read.FSMC_AddressHoldTime = 0; 
  Timing_read.FSMC_DataSetupTime = 0x8;
  Timing_read.FSMC_BusTurnAroundDuration = 0;
  Timing_read.FSMC_CLKDivision = 0;
  Timing_read.FSMC_DataLatency = 0;
  Timing_read.FSMC_AccessMode = FSMC_AccessMode_B;   


Fsmc yi denedim ama bazı hatalar aldım eksik kütüphane var herhalde vakit bulunca tekrar deneyeceyim fsmc için kullanılması gereken kütüphaneleri nelerdir belirtirseniz sevinirim.

Arm için çok geç kalmışım 8051 ve asm denden sonra hem c hemde Arm biraz zor geliyor ama yılmak yok  Allah'ın izni ve sizlerin yardımı inşallah başaraçağım .
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mnemonic - 03 Ekim 2013, 14:42:41
Alıntı yapılan: respected - 28 Mayıs 2013, 15:54:13
(SSD1963 XPT2046)
M_B hocam sizin kodlar üzerine touch eklemeye çalıştım. IRQ  pinin A15 ayarladığım da ekranın herhangi bir yerine dokunsam da tepki veriyor. Kaanx hocam epeyce fikir verdi ama bir türlü beceremedim. Acaba yanlış bir ayar mı yapıyorum? Proje dosyasını aşağıdaki linke koydum. Rica etsem bakabilir misiniz?

http://rapidshare.com/files/3631787352/ResimBasma.rar (http://rapidshare.com/files/3631787352/ResimBasma.rar)


respected hocam selamlar,
bu mesajınızda yazdığınız dosyaya erişemiyorum. sakıncası yoksa yeniden yükleyebilirmisiniz bende xpt ile çalışacağım bir incelemek düzeltmek isterim
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mnemonic - 04 Ekim 2013, 15:43:18
Arkadaşlar GCC için uygun(bulduğum hepsi keil uyumluydu sıkıntı yaşadım) stm32f4 için ssd1963 driveri varmı ?
günlerdir sorunsuz derlenen bir kod bulamadım
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: respected - 27 Ekim 2013, 23:07:36
@Mnemonic
Kusura bakmayın mesajınızı fark etmedim.  pm yazsaydınız keşke kodları yeniden upload ederdim. Sanırım silinmiş.
M_B hocamın kodları.. Ben bu kodlarla lcd yi çalıştırdım.

http://rapidshare.com/share/4D586F2339E197C4AEAA41A3968E2F68 (http://rapidshare.com/share/4D586F2339E197C4AEAA41A3968E2F68)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mnemonic - 28 Ekim 2013, 08:56:34
Cevabınız için çok teşekkür ederim.
ancak yazmış olduğum bir kaç mesaja cevap gelmeyince bir kaç gün uğraşarak çalıştırmayı başarmıştım
şu anda da xpt2046 ile uğraşıyorum
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mucit23 - 18 Kasım 2013, 13:31:23
@M_B

Hocam Merhaba

STM32F407 de Verdiğiniz ssd1963 kütüphanesini kullanarak 4.3" TFT süreceğim. Kütüphaneyi Keilde derlemeye çalıştığım zaman Birkaç Hata alıyorum.

Build target 'Target 1'
compiling fonts.c...
compiling ssd1963.c...
linking...
.\Output\Discovery.axf: Error: L6218E: Undefined symbol ASCII12x12_Table (referred from fonts.o).
.\Output\Discovery.axf: Error: L6218E: Undefined symbol ASCII16x24_Table (referred from fonts.o).
.\Output\Discovery.axf: Error: L6218E: Undefined symbol ASCII8x12_Table (referred from fonts.o).
.\Output\Discovery.axf: Error: L6218E: Undefined symbol ASCII8x8_Table (referred from fonts.o).
".\Output\Discovery.axf" - 4 Errors, 0 Warning(s).
Target not created


Sebebi hatada bahsedilen font dosyalarının bulunmaması. ssd1963.c içerisindede 12x12 font kullanılıyor sanırım. Bu yüzden hata alıyorum.

Ben fonts.h içerisinde aşağıdaki tanımlamaları yaptım.

extern const uint16_t ASCII8x8_Table[];
extern const uint16_t ASCII8x12_Table[];
extern const uint16_t ASCII16x8_Table[];
extern const uint16_t ASCII16x24_Table[];
extern const uint16_t ASCII12x12_Table[];


Bunların bazıları hiç yoktu ben ekledim.

fonts.c içerisinde ise sadece 16x8 in data tablosu var.

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...........


Diğerleri Yok. Bunlar sizde bulunuyormu? Siz verdiğiniz halde nasıl derliyordunuz?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 18 Kasım 2013, 22:10:00
@Mucit23 Hocam;
ssd1963.h dosyasında o fontların tanımı yoktur.
Kodu verdikten sonra da kodlarla ilgili hic bir çalışma yapmadım.
O yüzden son düzenlenmiş kod yok elimde. :(
Bir heves ve heyecanla ilgileniyordum sonra araya bir şeyler girince oyle kaldı. ( Herhangi bir proje falan olmadığı icinde uzerinde çalışma olmadı )
İlerleyen dönemde değişiklik olursa eklerim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mucit23 - 19 Kasım 2013, 12:16:45
Anladım. .

İnternete bakayım font dosyalarını bulursam ekleyeyim yoksa tek font ile çalışacak hale getireceğim.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mucit23 - 19 Kasım 2013, 14:09:40
Buldum :)

http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/fonts_8c_source.html (http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/fonts_8c_source.html)

Mehmet Hocam Burada var

Oradaki kodları alıp fonts.c içerisine ekledim. Şimdi derleyebiliyorum.

Fonts.c şimdi böyle oldu.

[code] 
/* 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,
};

const uint16_t ASCII16x24_Table [] = {
/**
   * @brief        Space ' ' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '!' 
   */
          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '"' 
   */
          0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '#' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,
          0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,
          0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,
/**
   * @brief        '$' 
   */
          0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,
          0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,
          0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '%' 
   */
          0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,
          0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,
          0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '&' 
   */
          0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,
          0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,
          0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ''' 
   */
          0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '(' 
   */
          0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,
          0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
          0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,
/**
   * @brief        ')' 
   */
          0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,
          0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
          0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,
/**
   * @brief        '*' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
          0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '+' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ',' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,
/**
   * @brief        '-' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '.' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '/' 
   */
          0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,
          0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,
          0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '0' 
   */
          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,
          0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,
          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '1' 
   */
          0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '2' 
   */
          0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,
          0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
          0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '3' 
   */
          0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,
          0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,
          0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '4' 
   */
          0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,
          0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,
          0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '5' 
   */
          0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,
          0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,
          0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '6' 
   */
          0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,
          0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,
          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '7' 
   */
          0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,
          0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,
          0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '8' 
   */
          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,
          0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,
          0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '9' 
   */
          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,
          0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,
          0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ':' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ';' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '<' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,
          0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '=' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '>' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,
          0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '?' 
   */
          0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,
          0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,
          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '@' 
   */
          0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,
          0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,
          0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'A' 
   */
          0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,
          0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,
          0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'B' 
   */
          0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,
          0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,
          0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'C' 
   */
          0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,
          0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,
          0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'D' 
   */
          0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,
          0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,
          0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'E' 
   */
          0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
          0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
          0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'F' 
   */
          0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
          0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
          0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'G' 
   */
          0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,
          0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,
          0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'H' 
   */
          0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
          0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
          0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'I' 
   */
          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'J' 
   */
          0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
          0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,
          0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'K' 
   */
          0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,
          0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,
          0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'L' 
   */
          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
          0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
          0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'M' 
   */
          0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,
          0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,
          0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'N' 
   */
          0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,
          0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,
          0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'O' 
   */
          0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,
          0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,
          0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'P' 
   */
          0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,
          0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
          0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'Q' 
   */
          0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,
          0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,
          0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'R' 
   */
          0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,
          0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,
          0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'S' 
   */
          0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,
          0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,
          0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'T' 
   */
          0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'U' 
   */
          0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
          0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,
          0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'V' 
   */
          0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,
          0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,
          0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'W' 
   */
          0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,
          0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,
          0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'X' 
   */
          0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,
          0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,
          0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'Y' 
   */
          0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,
          0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'Z' 
   */
          0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,
          0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,
          0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '[' 
   */
          0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
          0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
          0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,
/**
   * @brief        '\' 
   */
          0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,
          0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,
          0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ']' 
   */
          0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
          0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
          0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,
/**
   * @brief        '^' 
   */
          0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,
          0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '_' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        ''' 
   */
          0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'a' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,
          0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,
          0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'b' 
   */
          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,
          0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
          0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'c' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,
          0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,
          0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'd' 
   */
          0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,
          0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
          0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'e' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
          0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,
          0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'f' 
   */
          0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'g' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,
          0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,
          0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,
/**
   * @brief        'h' 
   */
          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,
          0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
          0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'i' 
   */
          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'j' 
   */
          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,
/**
   * @brief        'k' 
   */
          0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,
          0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,
          0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'l' 
   */
          0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'm' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,
          0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,
          0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'n' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,
          0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
          0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'o' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
          0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,
          0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'p' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,
          0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
          0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,
/**
   * @brief        'q' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,
          0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
          0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,
/**
   * @brief        'r' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,
          0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
          0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        's' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,
          0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,
          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        't' 
   */
          0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'u' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,
          0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,
          0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'v' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,
          0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,
          0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'w' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,
          0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,
          0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'x' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,
          0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30,
          0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        'y' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,
          0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,
          0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,
/**
   * @brief        'z' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,
          0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
          0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/**
   * @brief        '{' 
   */
          0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
          0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,
          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,
/**
   * @brief        '|' 
   */
          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,
/**
   * @brief        '}' 
   */
          0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,
          0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,
          0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,
/**
   * @brief        '~' 
   */
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};


const uint16_t ASCII12x12_Table [] = {
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x2000,0x0000,0x0000,
0x0000,0x5000,0x5000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0900,0x0900,0x1200,0x7f00,0x1200,0x7f00,0x1200,0x2400,0x2400,0x0000,0x0000,
0x1000,0x3800,0x5400,0x5000,0x5000,0x3800,0x1400,0x5400,0x5400,0x3800,0x1000,0x0000,
0x0000,0x3080,0x4900,0x4900,0x4a00,0x32c0,0x0520,0x0920,0x0920,0x10c0,0x0000,0x0000,
0x0000,0x0c00,0x1200,0x1200,0x1400,0x1800,0x2500,0x2300,0x2300,0x1d80,0x0000,0x0000,
0x0000,0x4000,0x4000,0x4000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0800,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000,
0x0000,0x4000,0x2000,0x2000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x2000,0x2000,
0x0000,0x2000,0x7000,0x2000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0800,0x0800,0x7f00,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,
0x0000,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x4000,0x0000,0x0000,
0x0000,0x1000,0x2800,0x4400,0x4400,0x4400,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000,
0x0000,0x1000,0x3000,0x5000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x0000,0x0000,
0x0000,0x3000,0x4800,0x4400,0x0400,0x0800,0x1000,0x2000,0x4000,0x7c00,0x0000,0x0000,
0x0000,0x3000,0x4800,0x0400,0x0800,0x1000,0x0800,0x4400,0x4800,0x3000,0x0000,0x0000,
0x0000,0x0800,0x1800,0x1800,0x2800,0x2800,0x4800,0x7c00,0x0800,0x0800,0x0000,0x0000,
0x0000,0x3c00,0x2000,0x4000,0x7000,0x4800,0x0400,0x4400,0x4800,0x3000,0x0000,0x0000,
0x0000,0x1800,0x2400,0x4000,0x5000,0x6800,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000,
0x0000,0x7c00,0x0400,0x0800,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x0000,0x0000,
0x0000,0x1000,0x2800,0x4400,0x2800,0x1000,0x2800,0x4400,0x2800,0x1000,0x0000,0x0000,
0x0000,0x1000,0x2800,0x4400,0x4400,0x2c00,0x1400,0x0400,0x4800,0x3000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000,
0x0000,0x0000,0x0400,0x0800,0x3000,0x4000,0x3000,0x0800,0x0400,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x7c00,0x0000,0x0000,0x7c00,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x4000,0x2000,0x1800,0x0400,0x1800,0x2000,0x4000,0x0000,0x0000,0x0000,
0x0000,0x3800,0x6400,0x4400,0x0400,0x0800,0x1000,0x1000,0x0000,0x1000,0x0000,0x0000,
0x0000,0x0f80,0x1040,0x2ea0,0x51a0,0x5120,0x5120,0x5120,0x5320,0x4dc0,0x2020,0x1040,
0x0000,0x0800,0x1400,0x1400,0x1400,0x2200,0x3e00,0x2200,0x4100,0x4100,0x0000,0x0000,
0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x0000,0x0000,
0x0000,0x0e00,0x1100,0x2100,0x2000,0x2000,0x2000,0x2100,0x1100,0x0e00,0x0000,0x0000,
0x0000,0x3c00,0x2200,0x2100,0x2100,0x2100,0x2100,0x2100,0x2200,0x3c00,0x0000,0x0000,
0x0000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000,
0x0000,0x3e00,0x2000,0x2000,0x2000,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
0x0000,0x0e00,0x1100,0x2100,0x2000,0x2700,0x2100,0x2100,0x1100,0x0e00,0x0000,0x0000,
0x0000,0x2100,0x2100,0x2100,0x2100,0x3f00,0x2100,0x2100,0x2100,0x2100,0x0000,0x0000,
0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
0x0000,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x4800,0x4800,0x3000,0x0000,0x0000,
0x0000,0x2200,0x2400,0x2800,0x2800,0x3800,0x2800,0x2400,0x2400,0x2200,0x0000,0x0000,
0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000,
0x0000,0x2080,0x3180,0x3180,0x3180,0x2a80,0x2a80,0x2a80,0x2a80,0x2480,0x0000,0x0000,
0x0000,0x2100,0x3100,0x3100,0x2900,0x2900,0x2500,0x2300,0x2300,0x2100,0x0000,0x0000,
0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000,
0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1600,0x0d00,0x0100,0x0000,
0x0000,0x3e00,0x2100,0x2100,0x2100,0x3e00,0x2400,0x2200,0x2100,0x2080,0x0000,0x0000,
0x0000,0x1c00,0x2200,0x2200,0x2000,0x1c00,0x0200,0x2200,0x2200,0x1c00,0x0000,0x0000,
0x0000,0x3e00,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000,
0x0000,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000,
0x0000,0x4100,0x4100,0x2200,0x2200,0x2200,0x1400,0x1400,0x1400,0x0800,0x0000,0x0000,
0x0000,0x4440,0x4a40,0x2a40,0x2a80,0x2a80,0x2a80,0x2a80,0x2a80,0x1100,0x0000,0x0000,
0x0000,0x4100,0x2200,0x1400,0x1400,0x0800,0x1400,0x1400,0x2200,0x4100,0x0000,0x0000,
0x0000,0x4100,0x2200,0x2200,0x1400,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000,
0x0000,0x7e00,0x0200,0x0400,0x0800,0x1000,0x1000,0x2000,0x4000,0x7e00,0x0000,0x0000,
0x0000,0x3000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x0000,0x4000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000,0x0000,0x0000,
0x0000,0x6000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x0000,0x1000,0x2800,0x2800,0x2800,0x4400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7e00,
0x4000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3800,0x4400,0x0400,0x3c00,0x4400,0x4400,0x3c00,0x0000,0x0000,
0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x4000,0x4000,0x4800,0x3000,0x0000,0x0000,
0x0000,0x0400,0x0400,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x7c00,0x4000,0x4400,0x3800,0x0000,0x0000,
0x0000,0x6000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x4400,
0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000,
0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
0x0000,0x4000,0x4000,0x4800,0x5000,0x6000,0x5000,0x5000,0x4800,0x4800,0x0000,0x0000,
0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x5200,0x6d00,0x4900,0x4900,0x4900,0x4900,0x4900,0x0000,0x0000,
0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x4400,0x4400,0x4400,0x3800,0x0000,0x0000,
0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x4000,0x4000,
0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x0400,
0x0000,0x0000,0x0000,0x5000,0x6000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x3000,0x0800,0x4800,0x3000,0x0000,0x0000,
0x0000,0x4000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x6000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x4400,0x4400,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000,
0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x2800,0x1000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x4900,0x4900,0x5500,0x5500,0x5500,0x5500,0x2200,0x0000,0x0000,
0x0000,0x0000,0x0000,0x4400,0x2800,0x2800,0x1000,0x2800,0x2800,0x4400,0x0000,0x0000,
0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x1000,0x1000,0x1000,0x1000,
0x0000,0x0000,0x0000,0x7800,0x0800,0x1000,0x2000,0x2000,0x4000,0x7800,0x0000,0x0000,
0x0000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x0000,0x4000,0x2000,0x2000,0x2000,0x2000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x0000,0x0000,0x0000,0x0000,0x7400,0x5800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x7000,0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x7000,0x0000,0x0000};

const uint16_t ASCII8x12_Table [] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,
0x00,0x00,0x00,0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x28,0x7c,0x28,0x28,0x00,
0x00,0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x14,0x54,0x38,0x10,
0x00,0x00,0x00,0x44,0xa8,0xa8,0x50,0x14,0x1a,0x2a,0x24,0x00,
0x00,0x00,0x00,0x20,0x50,0x50,0x20,0xe8,0x98,0x98,0x60,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x00,0x00,0x00,0x40,0xe0,0x40,0xa0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
0x00,0x00,0x00,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x80,0xf0,0x00,
0x00,0x00,0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00,
0x00,0x00,0x00,0x10,0x30,0x50,0x50,0x90,0xf8,0x10,0x10,0x00,
0x00,0x00,0x00,0x70,0x40,0x80,0xe0,0x10,0x10,0x90,0x60,0x00,
0x00,0x00,0x00,0x60,0x90,0x80,0xa0,0xd0,0x90,0x90,0x60,0x00,
0x00,0x00,0x00,0xf0,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,
0x00,0x00,0x00,0x60,0x90,0x90,0xb0,0x50,0x10,0x90,0x60,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x40,
0x00,0x00,0x00,0x00,0x00,0x10,0x60,0x80,0x60,0x10,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x60,0x80,0x00,0x00,
0x00,0x00,0x00,0x60,0x90,0x10,0x20,0x40,0x40,0x00,0x40,0x00,
0x00,0x00,0x00,0x1c,0x22,0x5b,0xa5,0xa5,0xa5,0xa5,0x9e,0x41,
0x00,0x00,0x00,0x20,0x50,0x50,0x50,0x50,0x70,0x88,0x88,0x00,
0x00,0x00,0x00,0xf0,0x88,0x88,0xf0,0x88,0x88,0x88,0xf0,0x00,
0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x80,0x84,0x44,0x38,0x00,
0x00,0x00,0x00,0xe0,0x90,0x88,0x88,0x88,0x88,0x90,0xe0,0x00,
0x00,0x00,0x00,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x00,
0x00,0x00,0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x9c,0x84,0x44,0x38,0x00,
0x00,0x00,0x00,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x90,0x90,0x60,0x00,
0x00,0x00,0x00,0x88,0x90,0xa0,0xe0,0xa0,0x90,0x90,0x88,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x00,
0x00,0x00,0x00,0x82,0xc6,0xc6,0xaa,0xaa,0xaa,0xaa,0x92,0x00,
0x00,0x00,0x00,0x84,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x84,0x00,
0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x48,0x30,0x00,
0x00,0x00,0x00,0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x58,0x34,0x04,
0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x42,0x00,
0x00,0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x88,0x70,0x00,
0x00,0x00,0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x48,0x30,0x00,
0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x50,0x50,0x20,0x00,
0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x44,0x00,
0x00,0x00,0x00,0x84,0x48,0x48,0x30,0x30,0x48,0x48,0x84,0x00,
0x00,0x00,0x00,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0xf8,0x08,0x10,0x20,0x20,0x40,0x80,0xf8,0x00,
0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,0x00,
0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x00,0x00,0x00,0x40,0xa0,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,
0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xe0,0x10,0x70,0x90,0x90,0x70,0x00,
0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,
0x00,0x00,0x00,0x10,0x10,0x50,0xb0,0x90,0x90,0xb0,0x50,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x90,0xf0,0x80,0x90,0x60,0x00,
0x00,0x00,0x00,0xc0,0x80,0xc0,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10,
0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00,
0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x80,0x90,0xa0,0xc0,0xa0,0x90,0x90,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0xa6,0xda,0x92,0x92,0x92,0x92,0x00,
0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,
0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x80,
0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10,
0x00,0x00,0x00,0x00,0x00,0xa0,0xc0,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0xe0,0x90,0x40,0x20,0x90,0x60,0x00,
0x00,0x00,0x00,0x80,0x80,0xc0,0x80,0x80,0x80,0x80,0xc0,0x00,
0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xb0,0x50,0x00,
0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x20,0x00,
0x00,0x00,0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0x44,0x00,
0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x20,0x50,0x88,0x00,
0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x50,0x50,0x20,0x20,0x20,
0x00,0x00,0x00,0x00,0x00,0xf0,0x10,0x20,0x40,0x80,0xf0,0x00,
0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0xb0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xe0,0xa0,0xa0,0xa0,0xa0,0xa0,0xe0,0x00};

  const uint16_t ASCII8x8_Table [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40,
0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x24, 0x24, 0xfe, 0x48, 0xfc, 0x48, 0x48,
0x38, 0x54, 0x50, 0x38, 0x14, 0x14, 0x54, 0x38,
0x44, 0xa8, 0xa8, 0x50, 0x14, 0x1a, 0x2a, 0x24,
0x10, 0x28, 0x28, 0x10, 0x74, 0x4c, 0x4c, 0x30,
0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08,
0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10,
0x00, 0x00, 0x24, 0x18, 0x3c, 0x18, 0x24, 0x00,
0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20,
0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18,
0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08,
0x38, 0x44, 0x00, 0x04, 0x08, 0x10, 0x20, 0x7c,
0x18, 0x24, 0x04, 0x18, 0x04, 0x04, 0x24, 0x18,
0x04, 0x0c, 0x14, 0x24, 0x44, 0x7e, 0x04, 0x04,
0x3c, 0x20, 0x20, 0x38, 0x04, 0x04, 0x24, 0x18,
0x18, 0x24, 0x20, 0x38, 0x24, 0x24, 0x24, 0x18,
0x3c, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10,
0x18, 0x24, 0x24, 0x18, 0x24, 0x24, 0x24, 0x18,
0x18, 0x24, 0x24, 0x24, 0x1c, 0x04, 0x24, 0x18,
0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00,
0x00, 0x00, 0x04, 0x18, 0x20, 0x18, 0x04, 0x00,
0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00,
0x00, 0x00, 0x20, 0x18, 0x04, 0x18, 0x20, 0x00,
0x18, 0x24, 0x04, 0x08, 0x10, 0x10, 0x00, 0x10,
0x3c, 0x42, 0x99, 0xa5, 0xa5, 0x9d, 0x42, 0x38,
0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44,
0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x44, 0x78,
0x1c, 0x22, 0x42, 0x40, 0x40, 0x42, 0x22, 0x1c,
0x70, 0x48, 0x44, 0x44, 0x44, 0x44, 0x48, 0x70,
0x7c, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x7c,
0x3c, 0x20, 0x20, 0x38, 0x20, 0x20, 0x20, 0x20,
0x1c, 0x22, 0x42, 0x40, 0x4e, 0x42, 0x22, 0x1c,
0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x04, 0x04, 0x04, 0x04, 0x04, 0x24, 0x24, 0x18,
0x44, 0x48, 0x50, 0x70, 0x50, 0x48, 0x48, 0x44,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x82, 0xc6, 0xc6, 0xaa, 0xaa, 0xaa, 0xaa, 0x92,
0x42
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 21 Kasım 2013, 17:19:26
Stm32f4 discovery ve 5" ssd1963 ikilisiyle çalışıyorum burada verilen kodları kullandım fakat görüntü bozuk çıkıyor.

(http://k1311.hizliresim.com/1h/p/urpkp.jpg)

Beslemeyi direk discovery üzerinden alıyorum lcd üzerinde 5V diye ayrı bir giriş yok sadece LED_A var. Beslemeyi bilgisayar güç kaynağından aldım bu sefer resmin yarısı çıkıp donup kaldı lcd.

Ekrana ayrıca yazı yazdırmak istediğimde de takılıp kalıyor. Mesela sırayla arkaplan renklerini değiştiriyorum bir noktada ekrana yazı yazıp tekrar başa dönecek bir program bloğu yazdım yazı yazma kısmına gelince takılıp kalıyor.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 24 Kasım 2013, 15:30:14
Görüntü bozukluğu için bir fikri olan yok mu?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Ramiz - 24 Kasım 2013, 17:44:04
Alıntı yapılan: matador - 24 Kasım 2013, 15:30:14
Görüntü bozukluğu için bir fikri olan yok mu?

Gerbayın dediği gibi renk paleti sorunu olması çok yüksek. Lcd paralelmi bilmiyorum ama(chip in datasheetine bakmadım) paralelse, mcu->lcd arasındaki data uçlarını doğru bağladığınıza emin olun. Eğer sorun burada değilse, ya mcu yazılımınızda, yada resmi convert ettiğiniz yazılımdadır.(mcu yazılımı ile convert programındaki renk paletleri örtüşmüyordur)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 27 Kasım 2013, 09:55:48
İşlemcinin dosyalarından fsmc pinlerine bakıpta bağlantı yaptım pinlerde yanlışlık olduğunu sanmıyorum. Beslemeyle ilgili bir problem olabilir mi?

Kabloyla ilgili bir sıkıntı varmış.

Bir sorun daha var çıkan görüntü tam aynalanmış şekliyle çıkıyor. Bunu nasıl ters çevirebilirim?

SSD1963.c içinde 156. satırdaki LCD_WriteData(0x80) yerine 0x81 yazınca düzeldi.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 28 Kasım 2013, 15:40:20
Alıntı yapılan: gerbay - 24 Kasım 2013, 17:12:24
Renk paleti problemi gibi duruyor. Renkler ile ilgili kisimlari kontrol etmenizde fayda var

Renkler ile ilgili kısımlar neresi?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 28 Kasım 2013, 16:25:31
Alıntı yapılan: matador - 28 Kasım 2013, 15:40:20
Renkler ile ilgili kısımlar neresi?

SSD1963 datasheeti kontrol etmek lazım.
Uzun zaman oldu tam adresini hatırlamıyorum
ama safya 37 yi inceleyin.
Birde sizin resim orjinaline göre ters  onu gene Lcd kurulum kısmından ayarlıyorsunuz.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 28 Kasım 2013, 16:39:49
Sizin paylaştığınız proje dosyasını kullanıyorum olduğu gibi bir sıkıntı daha var çözemedim herhangi bir bmp resim basarken lcd takılıp kalıyor.


https://www.youtube.com/watch?v=BpA83Meq9Qk (https://www.youtube.com/watch?v=BpA83Meq9Qk)

Herhangi bir renk üzerine yazı yazdırıyorum 2.5 saniye sonra bir resim basacakken renkler gidiyor.
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: M_B - 28 Kasım 2013, 17:17:14
void SSD1963_LCD_Init(void) fonksiyonun iceriğindeki Lcd ayarlarını
iyi kontrol etmek lazım. Benim kullandığım Lcd 7" sizin ki 5" fark olabilir.
Bence SSD1963 datasheetini adım adım okuyarak düzenleme yapmak.
Bu iş biraz zaman alıyor. Ben düzenlerken not almamışım. O yüzden şu şudur diyemiyorum.
ama bundan sonraki işlerimde not alıyorum.

Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: matador - 28 Kasım 2013, 17:28:44
Teşekkürler.

ssd1963'ün datasheetini bulamadım sizde varsa paylaşırsanız sevinirim.

Buldum.

http://www.allshore.com/pdf/solomon_systech_ssd1963.pdf (http://www.allshore.com/pdf/solomon_systech_ssd1963.pdf)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: Mucit23 - 30 Kasım 2013, 10:59:26
SSD1963 kütüphanesinde FSMC ile birlikte Datalar nasıl LCD ye gidiyor. Daha Doğrusu FSMC modülüne nasıl gönderiliyor

SSD1963.h dosyasında şöyle bir makro var.

/* 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)


Ne yapılıyor burada?
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: kimlenbu - 20 Ocak 2014, 17:50:57
M_B Hocam teşekkür ederim kütüphane için, kodlar çalışıyor.

(http://i44.tinypic.com/3483qe8.jpg)
Başlık: Ynt: STM32F407 ile 7" TFT 800x480 SSD1963 Sürme
Gönderen: suatcs - 05 Nisan 2014, 09:34:47
merhabalar
1 haftadır stm32f4 ve ssd1963 ikilisiyle ugraşıyorum. hocalarımızın paylaştıgı kodlarıda denedim ama lcd de çizgilerden başka bişey çıkmıyor. LCD beslemesini ayrı güç kaynagından veriyorum ayrıca lcd modülün üzerinde 5v ve 3v girişleri var ama bunlar kısa devre anlayamadım. Aradaki kablolar 20cm, fazla uzun degil sanırım. neden olabilir?