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

📄 s60753.c

📁 关于ST60753显示芯片的源代码文件。
💻 C
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************
*
* s60753_init - 初始化s60753 LCD显示驱动模块
*
* INPUTS:
*   NONE
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_init(void)
{
    __LCDPowerOn();

    __LCDInit();

    LCD_EL_ON();

#ifdef PRJ_BUILD
    s60753_Logo();
#else
    s60753_Cross(0,255);
#endif

    return;
}

void s60753_Logo(void)
{
    unsigned char i,j,k;

    for(i = 0; i < 96; i++){
        for(j = 0; j < 12; j++){
            for (k = 0; k < 8; k++){
                if(BITS(LCDLogo1[12 * i + j], 7 - k) == 0x01)
                    layer1[162 * (i + 32) + (j << 3) + k + 34] = 0xFF;
                else
                    layer1[162 * (i + 32) + (j << 3) + k + 34] = 0;
            }
        }
    }

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

    /*Column Address Set*/
    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(15);        /* start column */
    __LCDParam(68);        /* end column */

    /* Line Address Set */
    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0);        /* start line */
    __LCDParam(159);        /* end line */

    /* Writing to memory */
    __LCDCommand(LCD_WRITE_DATA);

    for(i = 0; i < 160; i++){
        for(j = 0; j < 162; j++){
            LCD_DATA_OUT(layer1[162 * i + j]);
        }
    }
}
/*------------------棋盘-----------------------------*/
void s60753_Cross(uchar a, uchar b)
{
    unsigned char i,j,k,l;

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

    /*Column Address Set*/
    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(15);        /* start column */
    __LCDParam(68);        /* end column */

    /* Line Address Set */
    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0);        /* start line */
    __LCDParam(159);        /* end line */

    /* Writing to memory */
    __LCDCommand(LCD_WRITE_DATA);

    for (i = 0; i < 5; i++){
        for(l = 0; l < 16;l++){
            LCD_DATA_OUT(a);
            LCD_DATA_OUT(a);
            for(j = 0; j < 5;j++){
                for(k = 0; k < 16; k++){
                       LCD_DATA_OUT(a);
                }
                for(k = 0; k < 16; k++){
                       LCD_DATA_OUT(b);
                }
            }
        }
        for(l = 0; l < 16;l++){
               LCD_DATA_OUT(b);
            LCD_DATA_OUT(b);
            for(j = 0; j < 5;j++){
                for(k = 0; k < 16; k++){
                       LCD_DATA_OUT(b);
                }
                for(k = 0; k < 16; k++){
                       LCD_DATA_OUT(a);
                }
            }
        }
    }
}

void s60753_command(uchar cmd)
{
    __LCDCommand(cmd);
}

void s60753_param(uchar data)
{
    __LCDParam(data);
}

/******************************************************************************
*
* s60753_displayLayer - 只显示某一层,刷新到LCD上
*
* INPUTS:
*  uchar layer :
*             0: layer0
*             1: layer1
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_displayLayer(uchar layer)
{
  unsigned int i;
  uchar *displayLayer;

    /* 显示图层 */
    if(layer == 0)
        displayLayer = layer0;
    else if(layer == 1)
        displayLayer = layer1;
    else
        return;

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

    /*Column Address Set*/
    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(15);      /* start column */
    __LCDParam(68);      /* end column */

    /* Line Address Set */
    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0);      /* start line */
    __LCDParam(159);     /* end line */

    /* Writing to memory */
    __LCDCommand(LCD_WRITE_DATA);

    for(i = 0; i < MEM_SIZE; i++)
        LCD_DATA_OUT(displayLayer[i]);
}

/******************************************************************************
*
* s60753_clearScreen - 清屏
*
* INPUTS:
*   NONE
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_clearScreen(void)
{
    unsigned char i,j;

    memset(currentLayer, 0, MEM_SIZE);

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

    /*Column Address Set*/
    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(15);      /* start column */
    __LCDParam(68);      /* end column */

    /* Line Address Set */
    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0);       /* start line */
    __LCDParam(159);      /* end line */

    /* Writing to memory */
    __LCDCommand(LCD_WRITE_DATA);

    for (i = 0; i < 160; i++){
        for(j = 0; j < 54*3; j++){
            LCD_DATA_OUT(0x00);
        }
    }
}

/******************************************************************************
*
* s60753_setCurrentLayer - 设置当前操作的图层
*
* INPUTS:
*  int layer :  所选择的图层 0:第一层   1:第二层
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_setCurrentLayer(int layer)
{
    if(layer == 1){
        currentLayer = layer1;
        /*currentLayerState |= 0x10;*/
    }else if(layer == 0){
        currentLayer = layer0;
        /*currentLayerState |= 0x01;*/
    }
}

/******************************************************************************
*
* s60753_getCurrentLayer - 获取当前操作的图层
*
* INPUTS:
*      NONE:
*
* RETURNS:
*   int :  所选择的图层 0:第一层   1:第二层
*
******************************************************************************/
extern int s60753_getCurrentLayer(void)
{
    if(currentLayer == layer0)
        return 0;
    if(currentLayer == layer1)
        return 1;
    return -1;
}
/******************************************************************************
*
* setd1335_setLayerCompMtd - 设置图层之间的组合方法
*
* INPUTS:
*  uchar mx :
*             0: OR
*             1: Exclusive OR
*             2: AND
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_setLayerCompMtd(uchar mx)
{
  uchar i,j;
  int position;

    /* 组合模式参数应为0,1,2 ,而且两层应都打开 */
    if(mx > 2)
        return;

    /* save current component mode */
    compMode = mx;
    currentLayerState = 0x11;

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

    /*Column Address Set*/
    __LCDCommand(LCD_COLUMN_ADDR_SET);
    __LCDParam(15);      /* start column */
    __LCDParam(68);      /* end column */

    /* Line Address Set */
    __LCDCommand(LCD_LINE_ADDR_SET);
    __LCDParam(0);      /* start line */
    __LCDParam(159);     /* end line */

    /* Writing to memory */
    __LCDCommand(LCD_WRITE_DATA);

    switch(mx){
        case 0:
            for(i = 0; i < 160; i++)
                for(j = 0; j < 162; j++){
                    position = 162 * i + j;
                    LCD_DATA_OUT(layer0[position] | layer1[position]);
                }
            break;
        case 1:
            for(i = 0; i < 160; i++)
                for(j = 0; j < 162; j++){
                    position = 162 * i + j;
                    LCD_DATA_OUT(layer0[position] ^ layer1[position]);
                }
            break;
        case 2:
            for(i = 0; i < 160; i++)
                for(j = 0; j < 162; j++){
                    position = 162 * i + j;
                    LCD_DATA_OUT(layer0[position] & layer1[position]);
                }
            break;
        default:break;
    }
}

/******************************************************************************
*
* s60753_setLayerDisplay - 设置图层的显示特征
*
* INPUTS:
*  int layer :  所选择的图层 0:第一层   1:第二层
*  uchar ltype:
                        0:关闭图层显示
                        1:显示图层

*
*
* RETURNS:
*   NONE
*
******************************************************************************/
extern void s60753_setLayerDisplay(int layer,uchar ltype)
{
    if(layer == 0){/* 0层  */
        if(ltype == 1){/* 打开 */
            s60753_setCurrentLayer(0);
            if(currentLayerState & 0x01){
                /* 原来状态是打开则直接返回 */
                return;
            }else{
                /* 0层原关闭,则打开0层时两层均打开,并刷新显示 */
                currentLayerState = 0x11;
                s60753_setLayerCompMtd(compMode);
                return;
            }
        }else{/* 关闭 */
            s60753_setCurrentLayer(1);
            if((currentLayerState & 0x01) == 0){
                /* 原来状态是关闭则直接返回 */
                return;
            }else{
                currentLayerState = 0x10;/* 不允许两层同时关闭 */
                s60753_displayLayer(1);
                return;
            }
        }
    }else{
        if(layer == 1){
            if(ltype == 1){/* 打开 */
                s60753_setCurrentLayer(1);
                if(currentLayerState & 0x10){
                    /* 原来状态是打开则直接返回 */
                    return;
                }else{

⌨️ 快捷键说明

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