您的位置:首页 > 其它

十分钟搞定SSD1963液晶屏驱动

2016-07-05 11:28 495 查看

SSD1963简介

• Display feature

− Built-in 1215K bytes frame buffer. Support up to 864 x 480 at 24bpp display

− Support TFT 18/24-bit generic RGB interface panel

− Support 8-bit serial RGB interface

− Hardware rotation of 0, 90, 180, 270 degree

− Hardware display mirroring

− Hardware windowing

− Programmable brightness, contrast and saturation control

− Dynamic Backlight Control (DBC) via PWM signal

• MCU connectivity

− 8/9/16/18/24-bit MCU interface

− Tearing effect signal

• I/O Connectivity

− 4 GPIO pins

• Built-in clock generator

• Deep sleep mode for power saving

• Core supply power (VDDPLL and VDDD): 1.2V±0.1V

• I/O supply power(VDDIO): 1.65V to 3.6V

• LCD interface supply power (VDDLCD): 1.65V to 3.6V

规格书:链接: http://pan.baidu.com/s/1eR8dHUM 密码: 7jih

硬件

此程序所对应的硬件信息如下:

1. MCU :LPC1768

2. 液晶屏:4.3寸TFT液晶

3. 驱动方式:8线驱动

SSD1963驱动代码

SSD1963.h

#ifndef _SSD1963_H_
#define _SSD1963_H_

#include "lpc17xx.h"
#include "Common.h"

#define LCD_XSIZE          (480)                //设置液晶屏的分辨率 长
#define LCD_YSIZE          (272)                //设置液晶屏的分辨率 宽
#define LCD_CONTROLLER     (1963)               //设置液晶屏的驱动芯片型号

#define SSD1963_RESET_LOW()                 LPC_GPIO0->FIOCLR = _BV(6)
#define SSD1963_RESET_HIGH()                LPC_GPIO0->FIOSET = _BV(6)

#define SSD1963_WR_LOW()                    LPC_GPIO1->FIOCLR = _BV(27)
#define SSD1963_WR_HIGH()                   LPC_GPIO1->FIOSET = _BV(27)

#define SSD1963_RD_LOW()                    LPC_GPIO1->FIOCLR = _BV(28)
#define SSD1963_RD_HIGH()                   LPC_GPIO1->FIOSET = _BV(28)

#define SSD1963_CS_LOW()                    LPC_GPIO0->FIOCLR = _BV(5)
#define SSD1963_CS_HIGH()                   LPC_GPIO0->FIOSET = _BV(5)

#define SSD1963_DC_LOW()                    LPC_GPIO0->FIOCLR = _BV(4)
#define SSD1963_DC_HIGH()                   LPC_GPIO0->FIOSET = _BV(4)

#define SSD1963_DATA_IN()                   LPC_GPIO2->FIODIR0 = 0x00
#define SSD1963_DATA_OUT()                  LPC_GPIO2->FIODIR0 = 0xff

#define SSD1963_Write8BitData(d)            SSD1963_CS_LOW(); SSD1963_DC_HIGH(); SSD1963_WR_LOW(); LPC_GPIO2->FIOPIN0 = (d); NOP(); SSD1963_WR_HIGH(); SSD1963_CS_HIGH()
#define SSD1963_Read8BitData(d)             SSD1963_DATA_IN(); SSD1963_CS_LOW(); SSD1963_DC_HIGH(); SSD1963_RD_LOW(); NOP(); (d) = LPC_GPIO2->FIOPIN0; SSD1963_RD_HIGH(); SSD1963_CS_HIGH(); SSD1963_DATA_OUT()
#define SSD1963_WriteCMD(d)                 SSD1963_CS_LOW(); SSD1963_DC_LOW(); SSD1963_WR_LOW(); LPC_GPIO2->FIOPIN0 = (d); NOP(); SSD1963_WR_HIGH(); SSD1963_CS_HIGH()

#define SSD1963_CMD_Nop                     0x00
#define SSD1963_CMD_Reset                   0x01
#define SSD1963_CMD_GPM                     0x0A
#define SSD1963_CMD_GAM                     0x0B
#define SSD1963_CMD_GDM                     0x0D
#define SSD1963_CMD_EnSM                    0x10
#define SSD1963_CMD_ExSM                    0x11
#define SSD1963_CMD_EnPM                    0x12
#define SSD1963_CMD_EnNM                    0x13
#define SSD1963_CMD_ExIM                    0x20
#define SSD1963_CMD_EnIM                    0x21
#define SSD1963_CMD_SGaC                    0x26
#define SSD1963_CMD_SDOff                   0x28
#define SSD1963_CMD_SDOn                    0x29
#define SSD1963_CMD_SCAdd                   0x2A
#define SSD1963_CMD_SPAdd                   0x2B
#define SSD1963_CMD_WMS                     0x2C
#define SSD1963_CMD_RMS                     0x2E
#define SSD1963_CMD_SPArea                  0x30
#define SSD1963_CMD_SSArea                  0x33
#define SSD1963_CMD_STOff                   0x34
#define SSD1963_CMD_STOn                    0x35
#define SSD1963_CMD_SAM                     0x36
#define SSD1963_CMD_SSS                     0x37
#define SSD1963_CMD_ExIdM                   0x38
#define SSD1963_CMD_EnIdM                   0x39
#define SSD1963_CMD_WMC                     0x3C
#define SSD1963_CMD_RMC                     0x3E
#define SSD1963_CMD_STS                     0x44
#define SSD1963_CMD_GS                      0x45
#define SSD1963_CMD_RDDB                    0xA1
#define SSD1963_CMD_SLM                     0xB0
#define SSD1963_CMD_GLM                     0xB1
#define SSD1963_CMD_SHP                     0xB4
#define SSD1963_CMD_GHP                     0xB5
#define SSD1963_CMD_SVP                     0xB6
#define SSD1963_CMD_GVP                     0xB7
#define SSD1963_CMD_SGC                     0xB8
#define SSD1963_CMD_GGC                     0xB9
#define SSD1963_CMD_SGV                     0xBA
#define SSD1963_CMD_GGS                     0xBB
#define SSD1963_CMD_SPP                     0xBC
#define SSD1963_CMD_GPP                     0xBD
#define SSD1963_CMD_SPC                     0xBE
#define SSD1963_CMD_GPC                     0xBF
#define SSD1963_CMD_SLG0                    0xC0
#define SSD1963_CMD_GLG0                    0xC1
#define SSD1963_CMD_SLG1                    0xC2
#define SSD1963_CMD_GLG1                    0xC3
#define SSD1963_CMD_SLG2                    0xC4
#define SSD1963_CMD_GLG2                    0xC5
#define SSD1963_CMD_SLG3                    0xC6
#define SSD1963_CMD_GLG3                    0xC7
#define SSD1963_CMD_SG0R                    0xC8
#define SSD1963_CMD_GG0R                    0xC9
#define SSD1963_CMD_SG1R                    0xCA
#define SSD1963_CMD_GG1R                    0xCB
#define SSD1963_CMD_SG2R                    0xCC
#define SSD1963_CMD_GG2R                    0xCD
#define SSD1963_CMD_SG3R                    0xCE
#define SSD1963_CMD_GG3R                    0xCF
#define SSD1963_CMD_SDC                     0xD0
#define SSD1963_CMD_GDC                     0xD1
#define SSD1963_CMD_SDT                     0xD4
#define SSD1963_CMD_GDT                     0xD5
#define SSD1963_CMD_StPll                   0xE0
#define SSD1963_CMD_SPll                    0xE2
#define SSD1963_CMD_GPll                    0xE3
#define SSD1963_CMD_GPllS                   0xE4
#define SSD1963_CMD_SDS                     0xE5
#define SSD1963_CMD_SLF                     0xE6
#define SSD1963_CMD_GLF                     0xE7
#define SSD1963_CMD_SPDI                    0xF0
#define SSD1963_CMD_GPDI                    0xF1

void SSD1963_GPIO_Init(void);
void SSD1963_Init(void);
void SSD1963_SetCursor(uint16_t x, uint16_t y);
void SSD1963_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t EndX, uint16_t EndY);
uint16_t SSD1963_GetPoint(uint16_t x, uint16_t y);
void SSD1963_SetPoint(uint16_t x, uint16_t y, uint32_t color);
void SSD1963_WriteColor(uint32 data);
void SSD1963_ON(void);
void SSD1963_OFF(void);

#endif


SSD1963.c

#include "Delay.h"
#include "SSD1963.h"

#define LCD_HDP                                     (LCD_XSIZE - 1)
#define LCD_HT                                      531
#define LCD_HPS                                     43
#define LCD_LPS                                     8
#define LCD_HPW                                     1

#define LCD_VDP                                     (LCD_YSIZE - 1)
#define LCD_VT                                      288
#define LCD_VPS                                     12
#define LCD_FPS                                     4
#define LCD_VPW                                     10

#define BKCOLOR LCD_BKCOLORINDEX
#define   COLOR LCD_COLORINDEX

#define SdCmd(d)                                    SSD1963_WriteCMD(d)
#define SdData(d)                                   SSD1963_Write8BitData(d)

uint16 SSD1963_ReadColor(void)
{
uint8 d;
uint16 temp;

SSD1963_Read8BitData(d);
temp = d >> 3;
temp <<= 6;
SSD1963_Read8BitData(d);
temp |= (d & 0x3f) >> 2;
temp <<= 5;
SSD1963_Read8BitData(d);
temp |= (d & 0x1f) >> 3;

return temp;
}

void SSD1963_WriteColor(uint32 data)
{
SSD1963_Write8BitData((uint8)(data ));
SSD1963_Write8BitData((uint8)(data >> 8));
SSD1963_Write8BitData((uint8)(data >> 16));
}

void SSD1963_ON(void)
{
SSD1963_WriteCMD(SSD1963_CMD_SPC);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0x60);
SSD1963_Write8BitData(0x01);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0x00);

SSD1963_WriteCMD(SSD1963_CMD_SDOn);
}

void SSD1963_OFF(void)
{
SSD1963_WriteCMD(SSD1963_CMD_SPC);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0xff);
SSD1963_Write8BitData(0x01);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(0x00);

SSD1963_WriteCMD(SSD1963_CMD_SDOff);
}

void SSD1963_GPIO_Init(void)
{
LPC_GPIO0->FIODIR |= _BV(4) | _BV(5) | _BV(6) ;
LPC_GPIO1->FIODIR |= _BV(27) | _BV(28) ;
LPC_GPIO2->FIODIR0 = 0xff;
}

void SSD1963_Init(void)
{
SSD1963_GPIO_Init();
SSD1963_RESET_LOW();
SSD1963_DATA_OUT();
SSD1963_CS_HIGH();
SSD1963_WR_HIGH();
SSD1963_RD_HIGH();
DelayUS(500);
SSD1963_RESET_HIGH();
DelayMS(5);

SdCmd(0xe2); SdData(0x3B); SdData(0x02); SdData(0x04); DelayUS(500);
SdCmd(0xe0); SdData(0x01); DelayUS(500);
SdCmd(0xe0); SdData(0x03); DelayUS(500);

SSD1963_WriteCMD(SSD1963_CMD_Reset);
DelayUS(500);

SdCmd(0xe6); SdData(0x00); SdData(0xb8); SdData(0x50);

SSD1963_WriteCMD(SSD1963_CMD_SLM);
SSD1963_Write8BitData(0x20);
SSD1963_Write8BitData(0x00);
SSD1963_Write8BitData(LCD_HDP >> 8);
SSD1963_Write8BitData(LCD_HDP & 0xFF);
SSD1963_Write8BitData(LCD_VDP >> 8);
SSD1963_Write8BitData(LCD_VDP & 0xFF);
SSD1963_Write8BitData(0x00);

SSD1963_WriteCMD(SSD1963_CMD_SHP);
SSD1963_Write8BitData(LCD_HT >> 8);
SSD1963_Write8BitData(LCD_HT & 0xFF);
SSD1963_Write8BitData(LCD_HPS >> 8);
SSD1963_Write8BitData(LCD_HPS & 0xFF);
SSD1963_Write8BitData(LCD_HPW);
SSD1963_Write8BitData(LCD_LPS >> 8);
SSD1963_Write8BitData(LCD_LPS & 0xFF);
SSD1963_Write8BitData(0x00);

SSD1963_WriteCMD(SSD1963_CMD_SVP);
SSD1963_Write8BitData(LCD_VT >> 8);
SSD1963_Write8BitData(LCD_VT & 0xFF);
SSD1963_Write8BitData(LCD_VPS >> 8);
SSD1963_Write8BitData(LCD_VPS & 0xFF);
SSD1963_Write8BitData(LCD_VPW);
SSD1963_Write8BitData(LCD_FPS >> 8);
SSD1963_Write8BitData(LCD_FPS & 0xFF);

SdCmd(0xf0); SdData(0x00);

SdCmd(0x11);
SdCmd(0x13);
SdCmd(0x20);
SdCmd(0x38);

SdCmd(0xB8); SdData(0x0f); SdData(0x01);
SdCmd(0xba); SdData(0x01); DelayUS(500);
SdCmd(0xba); SdData(0x03); DelayUS(500);

SdCmd(0x36); SdData(0x00);

DelayUS(500);

SSD1963_ON();
}

void SSD1963_SetCursor(uint16_t x, uint16_t y)
{
SSD1963_WriteCMD(SSD1963_CMD_SCAdd);

89bb
SSD1963_Write8BitData(x >> 8);
SSD1963_Write8BitData(x & 0xFF);
SSD1963_Write8BitData(LCD_HDP >> 8);
SSD1963_Write8BitData(LCD_HDP & 0xFF);

SSD1963_WriteCMD(SSD1963_CMD_SPAdd);
SSD1963_Write8BitData(y >> 8);
SSD1963_Write8BitData(y & 0xFF);
SSD1963_Write8BitData(LCD_VDP >> 8);
SSD1963_Write8BitData(LCD_VDP & 0xFF);
}

void SSD1963_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t EndX, uint16_t EndY)
{
SSD1963_WriteCMD(SSD1963_CMD_SCAdd);
SSD1963_Write8BitData(StartX >> 8);
SSD1963_Write8BitData(StartX & 0xFF);
SSD1963_Write8BitData(EndX >> 8);
SSD1963_Write8BitData(EndX & 0xFF);

SSD1963_WriteCMD(SSD1963_CMD_SPAdd);
SSD1963_Write8BitData(StartY >> 8);
SSD1963_Write8BitData(StartY & 0xFF);
SSD1963_Write8BitData(EndY >> 8);
SSD1963_Write8BitData(EndY & 0xFF);
}

void SSD1963_SetPoint(uint16_t x, uint16_t y, uint32_t color)
{
SSD1963_SetCursor(x, y);

SSD1963_WriteCMD(SSD1963_CMD_WMS);
SSD1963_WriteColor(color);
}

uint16_t SSD1963_GetPoint(uint16_t x, uint16_t y)
{
SSD1963_SetCursor(x, y);
SSD1963_WriteCMD(SSD1963_CMD_RMS);
return (SSD1963_ReadColor());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: