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]
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
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ı.
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.
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.
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ı?
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);
}
}
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.
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]
Hocam img sığdımı ? nereden yüklüyorsunuz ?
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.
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.
sd karta yüklemeyi neden denemiyorsunuz hocam?
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 ?
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
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.
ADS7843 benim board dada mevcut. bende çözmeliyim.
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.
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..
PEN_IRQ yu alabiliyorum ama bir türlü veriyi okuyamadım.
Yeni bir konu açalım.
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.
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.
Anlaşılan artık kimse bu LCD ile uğraşmıyor.
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.
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.
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.
Aynen Bende Yeni Aldığım Motosiklet yüzünden pek ilgilenemedim. Touch da kaldım.
Havalar Isındı :) Zaman motorcuların zamanı ;D
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.
[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?
pin baglantıların FSMC ye mi baglı ?
Şemanda D0-15 demissin ?
Evet hocam FSMC . St nin BB genişleme bourdunda olduğu gibi.
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.
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.
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.
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?
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;
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.
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)
http://rapidshare.com/files/2112603697/tft1.zip (http://rapidshare.com/files/2112603697/tft1.zip)
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 ?
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?
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.
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..
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 ;)
Evet hocam çok teşekkür ederim. Burada verdiğiniz kod ile en son gönderdiğiniz hex dosya aynı programa mı ait?
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 )
Çünkü buradaki kod ile kırmızı bir ekran geliyor sadece.
Tamam hocam teşekkür ederim.
M_B Hocam rica etsem çalışan kodları proje olarak verebilir misiniz?
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)
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.
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.
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)
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)
(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.
Ekrandaki P harfi ne ?
:) Hocam daha jelatini çıkarmadım da jelatinde yazıyor o
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ş.
@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..
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
(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)
Merhaba bu aralar yogunum kitle ilgilenemiyorum.
Onumuzdeki günlerde calısan kod koyacam.
Türkiyede bu lcd'yi alabileceğim bir yer var mı?
Karaköyde epeyce gezdim bulamadım. Çin'den getirttim.
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...
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);
}
}
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.
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;
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 .
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 .
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
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
@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)
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
@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?
@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.
Anladım. .
İnternete bakayım font dosyalarını bulursam ekleyeyim yoksa tek font ile çalışacak hale getireceğim.
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
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.
Görüntü bozukluğu için bir fikri olan yok mu?
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)
İş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.
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?
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.
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.
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.
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)
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?
M_B Hocam teşekkür ederim kütüphane için, kodlar çalışıyor.
(http://i44.tinypic.com/3483qe8.jpg)
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?