⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s60753.c

📁 关于ST60753显示芯片的源代码文件。
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************************************************
 *
 * Copyrigth(C), 2002-2005,Sanxing Tech,Co.,Ltd.
 * Filename: s60753.c
 * Version: V1.0
 * Description:  LCD module s60753 driver implement.
 *
modification history
---------------------
* $Log: s60753.c,v $
* Revision 1.1  2008/06/22 08:26:17  lmZou
* 增加F16R16的bsp
*
* Revision 1.9  2008/06/19 06:32:13  lmZou
* 增加获取bmp图片信息
*
* Revision 1.8  2008/04/19 11:43:31  zlm
* 整理对比度默认值
*
* Revision 1.7  2008/04/19 02:51:43  zlm
* 调整lcd对比度默认值
*
* Revision 1.6  2008/03/18 08:28:18  zlm
* lcd初始化在boot阶段需要适当延时!在应用阶段可不需要延时!
* 调整lcd对比度设置接口,默认对比度为15
* 终端启动后点亮背光!
*
* Revision 1.5  2008/03/16 12:06:03  zlm
* 调整lcd的对比度接口
*
* Revision 1.4  2008/03/15 07:34:45  zlm
* boot调试通过!boot启动阶段lcd显示错乱!待调
*
*
*******************************************************************************/
/*------------------------------------------------------------------------------
Section: Includes
------------------------------------------------------------------------------*/
#include "s60753.h"
#include "drv/multi/ppc860Siu.h"

void s60753_Cross(uchar a, uchar b);
void s60753_Logo(void);
static int s60753_refreshArea(int xstart,int ystart,int width,int height);

/*------------------------------------------------------------------------------
Section: Macro Definitions
------------------------------------------------------------------------------*/
#ifdef PRJ_BUILD
    #define CMD_DELAY_TIME  0
#else
    #define CMD_DELAY_TIME  5
#endif/* # PRJ_BUILD */

#define DLY_CPU_CYCLE(x)        \
{                               \
    int i;                      \
    for (i = 0; i < x; i++);    \
}

/*  EL/BACKLIGHT port = CS6--D7--LCD_AK  */
#define LCD_EL_ON()           outputcs6pn(8,1)
#define LCD_EL_OFF()          outputcs6pn(8,0)

/*  RST Port = CS6--D6--LCD_RST      */
#define LCD_RESET_ON()        outputcs6pn(9,1)
#define LCD_RESET_OFF()       outputcs6pn(9,0)

#define LCD_A0                24
#define A0_BASE_ADRS          (1 << (31 - LCD_A0))

/* boot启动阶段需要延时,否则显示错乱,应用启动后不需要延时可正常显示 */
#define LCD_DATA_OUT(data)                                                          \
            do {                                                                    \
                (*(volatile unsigned char *)(CS5_BASE_ADRS + A0_BASE_ADRS)) = data; \
                DLY_CPU_CYCLE(5);                                                   \
            }while(0)

#define LCD_CMD_OUT(data)                                                           \
            do {                                                                    \
                (*(volatile unsigned char *)CS5_BASE_ADRS) = data;                  \
                DLY_CPU_CYCLE(5);                                                   \
            }while(0)

/* S60753 cmd */
#define LCD_EXT_DISABLE            0x30    /*Extension instruction disable*/
#define LCD_EXT_ENABLE             0x31    /*Extension instruction enable*/
#define LCD_SLEEP_IN               0x95
#define LCD_SLEEP_OUT              0x94
#define LCD_INTERNAL_OSC_ON        0xD1
#define LCD_POWER_CTRL             0x20
#define LCD_EC_CTRL                0x81
#define LCD_VOL_UP                 0xD6
#define LCD_VOL_DOWN               0xD7
#define LCD_DISP_CTRL              0xCA
#define LCD_INVERSE_DISP           0xA7
#define LCD_COM_SCAN_DIR           0xBB
#define LCD_DATA_SCAN_DIR          0xBC
#define LCD_LINE_ADDR_SET          0x75
#define LCD_COLUMN_ADDR_SET        0x15
#define LCD_ANALOG_CIRCUIT_SET     0x32
#define LCD_SOFTWARE_INIT          0x34
#define LCD_DISP_ON                0xAF
#define LCD_DISP_OFF               0xAE
#define LCD_WRITE_DATA             0x5C

/*------------------------------------------------------------------------------
Section: Type Definitions
------------------------------------------------------------------------------*/
/* NONE */

/*------------------------------------------------------------------------------
Section: Globe Variable
------------------------------------------------------------------------------*/
static uchar layer0[MEM_SIZE];/* 虚拟显存0层 */
static uchar layer1[MEM_SIZE];/* 虚拟显存1层 */

static uchar* currentLayer = layer1;/* 当前层 */

static uchar currentLayerState = 0x11;/* 当前层状态
                                 0x11: two layers are open,
                                 0x01: only layer1 is open,
                                 0x10: only layer2 is open,*/

static uchar compMode = 1;/* 两层之间的组合方式0: OR,1: Exclusive OR, 2: AND*/

static uchar lcd_light_defaule = 30;/* 默认lcd对比度 */

static int s_iLcdContrast = 30;     /* LCD对比度镜像值 */

static uchar  LCDLogo1[96*12] = {
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, 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, 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,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF9, 0x9F, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xF9, 0xFB, 0xDF, 0x9F, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xE0, 0x7F, 0xFE, 0x07, 0xFF, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xE6, 0x7F, 0xFE, 0x67, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xEF, 0x7F, 0xFE, 0xF7, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFB, 0xFE, 0x7F, 0xDF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFB, 0xFE, 0x7F, 0xDF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xFB, 0xDE, 0x7B, 0xDF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF3, 0xDE, 0x7B, 0xCF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF3, 0xDE, 0x7B, 0xCF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xE3, 0xDE, 0x7B, 0xC7, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xE7, 0xDE, 0x7B, 0xC7, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xC7, 0xDE, 0x7B, 0xE3, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0x8F, 0x9E, 0x79, 0xE1, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0x0F, 0x9E, 0x79, 0xE0, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFE, 0x0F, 0x1E, 0x78, 0xF0, 0x7F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFE, 0x0F, 0x1E, 0x78, 0xF0, 0x7F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xF8, 0x1F, 0x1E, 0x78, 0xF8, 0x1F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xF0, 0x3E, 0x1E, 0x78, 0x78, 0x0F, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xC0, 0x3E, 0x1C, 0x38, 0x7C, 0x03, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0x80, 0x7E, 0x3C, 0x3C, 0x7E, 0x01, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x0E, 0x00, 0xFC, 0x3C, 0x3C, 0x3E, 0x00, 0x70, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x00, 0xFC, 0x3C, 0x3C, 0x3F, 0x00, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xF8, 0x3C, 0x3C, 0x1F, 0x80, 0x00, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x07, 0xF8, 0x7C, 0x3E, 0x1F, 0xC0, 0x00, 0x41, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF0, 0x00, 0xBC, 0x80,
0x00, 0x00, 0x00, 0x1F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF8, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x7F, 0xE0, 0xFC, 0x3F, 0x07, 0xFF, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0xFF, 0xC0, 0xFC, 0x3F, 0x07, 0xFF, 0x01, 0x3C, 0x40,
0x00, 0x00, 0x00, 0xFF, 0xC0, 0xFC, 0x3F, 0x03, 0xFE, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x7F, 0x81, 0xFC, 0x3F, 0x81, 0xFC, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x3F, 0x01, 0xFC, 0x3F, 0x81, 0xF8, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x1E, 0x03, 0xFC, 0x3F, 0xC0, 0xF0, 0x00, 0x80, 0x80,
0x00, 0x00, 0x00, 0x0C, 0x07, 0xFC, 0x3F, 0xE0, 0x60, 0x00, 0x41, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x7F, 0xC3, 0x0C, 0x36, 0x06, 0xD8, 0x67, 0xF8, 0x03, 0x80,
0x1F, 0xFC, 0xFF, 0xC7, 0x8E, 0x37, 0x0E, 0xDC, 0x6F, 0xFC, 0x63, 0x80,
0x1F, 0xFC, 0xC0, 0x4F, 0x8F, 0x33, 0x9C, 0xDE, 0x6C, 0x0C, 0xFF, 0xFC,
0x00, 0x00, 0xC0, 0x0C, 0xCF, 0xB1, 0xF8, 0xDF, 0x6C, 0x00, 0xFF, 0xFC,
0x00, 0x00, 0xFF, 0x8C, 0xCF, 0xF0, 0xF0, 0xDF, 0xEC, 0x7C, 0xC3, 0x80,
0x00, 0x00, 0x7F, 0xD8, 0x6D, 0xF0, 0xF0, 0xDB, 0xEC, 0x7C, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0xD8, 0x6C, 0xF1, 0xF8, 0xD9, 0xEC, 0x1C, 0x3F, 0xF8,
0x00, 0x00, 0x80, 0xDF, 0xEC, 0x73, 0x9C, 0xD8, 0xEC, 0x1C, 0x03, 0x80,
0x3F, 0xFE, 0xFF, 0xDF, 0xEC, 0x37, 0x0E, 0xD8, 0x6F, 0xFC, 0x7F, 0xFC,
0x3F, 0xFE, 0xFF, 0xD8, 0x6C, 0x36, 0x06, 0xD8, 0x67, 0xEC, 0x7F, 0xFC,
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, 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, 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,
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

/*------------------------------------------------------------------------------
Section: Local Function Prototypes
------------------------------------------------------------------------------*/
static void __LCDPowerOn(void);
static void __LCDInit(void);
static void __LCDReset(void);
static void __LCDCommand( uchar cmd);
static void __LCDParam( uchar data);

/*------------------------------------------------------------------------------
Section: Function Definitions
------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
Section: Local Function Definitions
------------------------------------------------------------------------------*/

static void __LCDPowerOn(void)
{
    LCD_RESET_ON();
    udelay(1000);

    LCD_RESET_OFF();
    udelay(1000);

    LCD_RESET_ON();
    udelay(1000);
}

static void __LCDInit(void)
{
    /* 清除显存内容,使之为空白 */
    memset(layer0, 0, MEM_SIZE);
    memset(layer1, 0, MEM_SIZE);

    __LCDCommand(LCD_EXT_DISABLE);
    __LCDCommand(LCD_SLEEP_OUT);
    __LCDCommand(LCD_INTERNAL_OSC_ON);

    __LCDCommand(LCD_POWER_CTRL);
    __LCDParam(0x08);            /* Booster must be on first */

    udelay(100);

    __LCDCommand(LCD_POWER_CTRL);
    __LCDParam(0x0B);            /* Booster regulator, Follower on */

    udelay(100);

    __LCDCommand(LCD_EC_CTRL);
    __LCDParam(0x36);            /* Vop = 16V 00xxxxxx*/
    __LCDParam(0x04);            /* Vop = 16V 00000xxx*/

    __LCDCommand(LCD_DISP_CTRL);
    __LCDParam(0);
    __LCDParam(0x27);            /* Numbers of display lines (N / 4 -1)*/
    __LCDParam(0);

    __LCDCommand(LCD_INVERSE_DISP);

    __LCDCommand(LCD_COM_SCAN_DIR);
    __LCDParam(0x02);

    __LCDCommand(LCD_DATA_SCAN_DIR);
    __LCDParam(0x02);
    __LCDParam(0x01);
    __LCDParam(0x02);

    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0x00);
    __LCDParam(0x9F);

    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(0x10);
    __LCDParam(0x45);

    __LCDCommand(LCD_EXT_ENABLE);

    __LCDCommand(LCD_ANALOG_CIRCUIT_SET);
    __LCDParam(0x00);
    __LCDParam(0x00);
    __LCDParam(0x01);

    __LCDCommand(LCD_EXT_ENABLE);

    __LCDCommand(LCD_SOFTWARE_INIT);

#if 0
    /* Read EEPROM */
    __LCDCommand(0x30);
    __LCDCommand(0x07);
    __LCDParam(0x19);

    __LCDCommand(0x31);

    __LCDCommand(0xCD);
    __LCDParam(0x00);

    taskDelay(240);

    __LCDCommand(0xFD);

    taskDelay(240);

    __LCDCommand(0xCC);
    __LCDCommand(0x30);
    /* Read complete */
#endif

    udelay(200);

    __LCDCommand(LCD_EXT_DISABLE);
    __LCDCommand(LCD_DISP_ON);
}

/*-----------复位LCD模块-------*/
static void __LCDReset(void)
{
    LCD_RESET_ON();
    udelay(1000);
    LCD_RESET_OFF();
    udelay(5000);
    LCD_RESET_ON();
}

/*----------- 写LCD控制命令 ----------*/
static void __LCDCommand( uchar cmd)
{
    LCD_CMD_OUT(cmd);
}

/*-----------  写LCD控制参数 ----------*/
static void __LCDParam( uchar data)
{
    LCD_DATA_OUT(data);
}

/*------------------------------------------------------------------------------
Section: Unit Test
------------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -