十分钟搞定SSD1963液晶屏驱动

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);
    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());
}


  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值