#include <stm32f4xx.h>
static unsigned short DeviceCode;
/* LCD RGB color definitions */
#define Black 0x0000 /* 0, 0, 0 */
#define Navy 0x000F /* 0, 0, 128 */
#define DarkGreen 0x03E0 /* 0, 128, 0 */
#define DarkCyan 0x03EF /* 0, 128, 128 */
#define Maroon 0x7800 /* 128, 0, 0 */
#define Purple 0x780F /* 128, 0, 128 */
#define Olive 0x7BE0 /* 128, 128, 0 */
#define LightGrey 0xC618 /* 192, 192, 192 */
#define DarkGrey 0x7BEF /* 128, 128, 128 */
#define Blue 0x001F /* 0, 0, 255 */
#define Green 0x07E0 /* 0, 255, 0 */
#define Cyan 0x07FF /* 0, 255, 255 */
#define Red 0xF800 /* 255, 0, 0 */
#define Magenta 0xF81F /* 255, 0, 255 */
#define Yellow 0xFFE0 /* 255, 255, 0 */
#define White 0xFFFF /* 255, 255, 255 */
#define WHITE 0XFFFF /* 255, 255, 255 */
#define RED 0xF800 /* 255, 0, 0 */
#define BLUE 0x001F /* 0, 0, 255 */
#define WIDTH 320 /* Screen Width (in pixels) */
#define HEIGHT 240 /* Screen Hight (in pixels) */
#define LCD_RAM *(__IO uint16_t *) ((uint32_t)0x60020000) //disp Data ADDR
#define LCD_REG *(__IO uint16_t *) ((uint32_t)0x60000000) //disp Reg ADDR
/************************************************** ***************************/
void LCD_WriteCOM(uint16_t RGB_Code)
{
/* Write 16-bit GRAM Reg */
LCD_REG = RGB_Code;
}
/************************************************** ***************************/
void LCD_WriteRAM(uint16_t RGB_Code)
{
/* Write 16-bit GRAM Reg */
LCD_REG = 0x22;
LCD_RAM = RGB_Code;
}
/************************************************** ***************************/
uint16_t LCD_ReadRAM(void)
{
LCD_REG = 0x22; /* Select GRAM Reg */
return LCD_RAM;
}
/************************************************** ***************************/
void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_RegValue)
{
LCD_REG= LCD_Reg;
LCD_RAM= LCD_RegValue;
}
/************************************************** ***************************/
uint16_t LCD_ReadReg(uint8_t LCD_Reg)
{
uint16_t temp;
LCD_REG= LCD_Reg;
temp= LCD_RAM;
return temp;
}
/************************************************** ***************************/
void LCD_WriteRAM_Prepare(void)
{
LCD_REG= 0X22;
}
/************************************************** **************************/
void LCD_Init (void)
{
DeviceCode = LCD_ReadReg(0x00);
if(DeviceCode==0x8989)
{
LCD_WriteReg(0x0007,0x0021);
LCD_WriteReg(0x0000,0x0001);
LCD_WriteReg(0x0007,0x0023);
LCD_WriteReg(0x0010,0x0000);
//delay(5);
LCD_WriteReg(0x0007,0x0033);
LCD_WriteReg(0x0011,0x6070);
LCD_WriteReg(0x0002,0x0600);
LCD_WriteReg(0x0003,0x0804);
LCD_WriteReg(0x000C,0x0000);
LCD_WriteReg(0x000D,0x0808);
LCD_WriteReg(0x000E,0x2900);
LCD_WriteReg(0x001E,0x00B8);
LCD_WriteReg(0x0001,0x2B3F);
LCD_WriteReg(0x0010,0x0000);
LCD_WriteReg(0x0005,0x0000);
LCD_WriteReg(0x0006,0x0000);
LCD_WriteReg(0x0016,0xEF1C);
LCD_WriteReg(0x0017,0x0003);
LCD_WriteReg(0x0007,0x0233);
LCD_WriteReg(0x000B,0x01C0);
LCD_WriteReg(0x000F,0x0000);
LCD_WriteReg(0x0041,0x0000);
LCD_WriteReg(0x0042,0x0000);
LCD_WriteReg(0x0048,0x0000);
LCD_WriteReg(0x0049,0x013F);
LCD_WriteReg(0x004A,0x0000);
LCD_WriteReg(0x004B,0x0000);
LCD_WriteReg(0x0044,0xEF00);
LCD_WriteReg(0x0045,0x0000);
LCD_WriteReg(0x0046,0x013F);
LCD_WriteReg(0x0030,0x0707);
LCD_WriteReg(0x0031,0x0204);
LCD_WriteReg(0x0032,0x0204);
LCD_WriteReg(0x0033,0x0502);
LCD_WriteReg(0x0034,0x0507);
LCD_WriteReg(0x0035,0x0204);
LCD_WriteReg(0x0036,0x0204);
LCD_WriteReg(0x0037,0x0502);
LCD_WriteReg(0x003A,0x0302);
LCD_WriteReg(0x003B,0x0302);
LCD_WriteReg(0x0023,0x0000);
LCD_WriteReg(0x0024,0x0000);
LCD_WriteReg(0x0025,0x8000);
LCD_WriteReg(0x004f,0x0000);
LCD_WriteReg(0x004e,0x0000);
}
}
/************************************************** *****************************/
void LCD_WindowMax (void)
{
LCD_WriteReg(0x48, 0); /* Horizontal GRAM Start Address */
LCD_WriteReg(0x49, 239); /* Horizontal GRAM End Address (-1) */
LCD_WriteReg(0x4A, 0); /* Vertical GRAM Start Address */
LCD_WriteReg(0x4B, 319); /* Vertical GRAM End Address (-1) */
}
/************************************************** ********************************/
void LCD_SetCursor(unsigned char Xpos, unsigned short Ypos)
{
LCD_WriteReg(0x004E, Xpos);
LCD_WriteReg(0X004F, Ypos);
}
/************************************************** *****************************
* Clear display *
* Parameter: color: display clearing color *
* Return: *
************************************************** *****************************/
void LCD_Clear (unsigned short color)
{
register unsigned int i;
//LCD_WindowMax();
//LCD_SetCursor(0,0);
//LCD_WriteCOM(0x22);
for(i = 0; i < (WIDTH*HEIGHT); i++){
LCD_WriteRAM(color);}
}
- - - Updated - - -
این برنامه ای هست که نوشتم
البته باید بگم که fsmc در main برنامه پیکربندی میشه و بعد از اون LCD_Init فراخوانی میشه
من می خواستم رنگ قرمز رو نمایش بدم که نشد