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

📄 s60753.c

📁 关于ST60753显示芯片的源代码文件。
💻 C
📖 第 1 页 / 共 4 页
字号:
                    /* 1层原关闭,则打开0层时两层均打开,并刷新显示 */
                    currentLayerState = 0x11;
                    s60753_setLayerCompMtd(compMode);
                    return;
                }
            }else{/* 关闭 */
                s60753_setCurrentLayer(0);
                if((currentLayerState & 0x10) == 0){
                    /* 原来状态是关闭则直接返回 */
                    return;
                }else{
                    currentLayerState = 0x01;/* 不允许两层同时关闭 */
                    s60753_displayLayer(0);
                    return;
                }
            }
        }
    }
}

/******************************************************************************
*
* s60753_drawBmp - 在指定的坐标位置绘制位图数据
*
* INPUTS:
*    int layer:  图层号
*   int xstart: 起点的横坐标 pixels
*   int ystart: 起点的纵坐标 pixels
*   int width:  位图的宽度
*   int height:  位图的高度
*   uchar* pbmp:  位图数据头指针
*
* RETURNS:
*   0:成功  -1:输入的位图数据为空 -2:位图范围超出屏幕范围
*
******************************************************************************/
extern int s60753_drawBmp(int layer, int xstart,int ystart,int width,int height,uchar* pbmp )
{
    uchar i,j,k;
    unsigned int bmpPointer=0;

    /* 判断绘图条件是否合法 */
    if((xstart >= 160)||(xstart < 0)||(ystart >= 160)||(ystart < 0))
        return ERROR;
    if((xstart + width > SCREEN_HIGHT) || (ystart + height > SCREEN_HIGHT))
        return ERROR;

    s60753_setCurrentLayer(layer);

    /* 显示图层 */
    if((layer < 0)||(layer > 1))
        return ERROR;

    for(i = 0; i < height; i++){

        for(j = 0; j < width / 8; j++){
            for(k = 0; k < 8; k++){
                if(BITS(pbmp[bmpPointer], 7 - k))
                    currentLayer[(ystart + i) * 162 + xstart + 2 + (j * 8) + ( k & 0x07)] = 0xFF;
                else
                    currentLayer[(ystart + i) * 162 + xstart + 2 + (j * 8) + ( k & 0x07)] = 0x00;
            }
            bmpPointer ++;
        }
        /* 以上为整8个像素字节 */

        /* 以下为不足8个像素的剩余位 */
        if(width & 7){
            for(k = 0; k < (width & 7); k++){
                if(BITS(pbmp[bmpPointer], 7 - k))
                    currentLayer[(ystart + i) * 162 + xstart + 2 + (j * 8) + ( k & 0x07)] = 0xFF;
                else
                    currentLayer[(ystart + i) * 162 + xstart + 2 + (j * 8) + ( k & 0x07)] = 0x00;
            }
        bmpPointer ++;
        }

    }

    return s60753_refreshArea(xstart, ystart, width, height);
}

#if 0
/******************************************************************************
*
* s60753_drawGrayBmp - 在指定的坐标位置绘制位图数据(灰度)
*
* INPUTS:
*    int layer:  图层号
*   int xstart: 起点的横坐标 pixels
*   int ystart: 起点的纵坐标 pixels
*   int width:  位图的宽度
*   int height:  位图的高度
*   uchar* pbmp:  位图数据头指针
*
* RETURNS:
*   0:成功  -1:输入的位图数据为空 -2:位图范围超出屏幕范围
*
******************************************************************************/
extern int s60753_drawGrayBmp(int layer, int xstart,int ystart,int width,int height,uchar* pbmp )
{
    uchar i,j;
    unsigned int bmpPointer=0;

    /* 判断绘图条件是否合法 */
    if((xstart >= 160)||(xstart < 0)||(ystart >= 160)||(ystart < 0))
        return ERROR;
    if((xstart + width > SCREEN_HIGHT) || (ystart + height > SCREEN_HIGHT))
        return ERROR;

    s60753_setCurrentLayer(layer);

    /* 设定显示图层 */
    if(layer == 0){
        currentLayerState |= 0x01;
    }else if(layer == 1){
        currentLayerState |= 0x10;
    }else
        return ERROR;



    for(i = 0; i < height; i++)
      for(j = 0; j < width; j++){
              currentLayer[(ystart + i) * 162 + xstart + 2 + j] = pbmp[bmpPointer++];
      }

    s60753_refreshArea(xstart, ystart, width, height);
}
#endif

/******************************************************************************
*
* s60753_readBlock - 读取指定的坐标位置位图数据
*
* INPUTS:
*    int layer:  图层号
*   int xstart: 起点的横坐标 pixels
*   int ystart: 起点的纵坐标 pixels
*   int width:  位图的宽度
*   int height:  位图的高度
*   uchar* pblock:  数据头指针
*
* RETURNS:
*   0:成功  -1:输入的位图数据为空 -2:位图范围超出屏幕范围
*
******************************************************************************/
extern int s60753_readBlock(int layer, int xstart,int ystart,int width,int height,uchar * pblock)
{
    uchar i,j,y;
    uchar w, left, bittemp;
    unsigned int blockPointer = 0;

    /* 判断绘图条件是否合法 */
    if((xstart >= 160)||(xstart < 0)||(ystart >= 160)||(ystart < 0))
        return ERROR;
    if((xstart + width > SCREEN_HIGHT) || (ystart + height > SCREEN_HIGHT))
        return ERROR;

    /* 显示图层 */
    if((layer < 0)||(layer > 1))
        return ERROR;

    s60753_setCurrentLayer(layer);

    left = width & 0x07;/* 剩余位数 */
    if(left == 0)
        w = width >> 3;  /* 整数个字节 */
    else
        w = (width >> 3) + 1;  /* 整数个字节 */




    for (y = ystart; y < ystart + height; y++){
        for(i = 0; i < (width + 7)/8; i++){
            bittemp = 0;
            for(j = 0; j < 8; j++){
                if(currentLayer[162 * y + xstart + 2 + (i << 3) + j] != 0){
                    bittemp |= 1 << (7 - j);
                }
            }
            pblock[blockPointer ++] = bittemp;
        }

    }

    return OK;

}

#if 0
/******************************************************************************
*
* s60753_readGrayBlock - 读取指定的坐标位置位图数据
*
* INPUTS:
*    int layer:  图层号
*   int xstart: 起点的横坐标 pixels
*   int ystart: 起点的纵坐标 pixels
*   int width:  位图的宽度
*   int height:  位图的高度
*   uchar* pblock:  数据头指针
*
* RETURNS:
*   0:成功  -1:输入的位图数据为空 -2:位图范围超出屏幕范围
*
******************************************************************************/
extern int s60753_readGrayBlock(int layer, int xstart,int ystart,int width,int height,uchar * pblock)
{
    uchar i,j;
    unsigned int blockPointer = 0;

    /* 判断绘图条件是否合法 */
    if((xstart >= 160)||(xstart < 0)||(ystart >= 160)||(ystart < 0))
        return ERROR;
    if((xstart + width >= SCREEN_HIGHT) || (ystart + height >= SCREEN_HIGHT))
        return ERROR;

    /* 显示图层 */
    if((layer < 0)||(layer > 1))
        return ERROR;

    if(layer == 0){
        for(i = 0; i < height; i++)
            for(j = 0; j < width; j++)
                pblock[blockPointer ++] = layer0[162 * (i + ystart) + xstart + j + 2];
    }else if(layer == 1){
        for(i = 0; i < height; i++)
            for(j = 0; j < width; j++)
                pblock[blockPointer ++] = layer1[162 * (i + ystart) + xstart + j + 2];
    }
    return OK;
}
#endif
/******************************************************************************
*
* s60753_dispCode - 通用字模显示函数(字符宽度只能为8的倍数
*                     在固定的坐标位置绘制字符位图数据,该方法的调用必须满足
*                     xstart%8==0并且width%8==0两个条件,与s60753_drawBmp相比,该
*                     方法会有比较快的显示速度
*
* INPUTS:
*    int layer:  图层号
*   int xstart: 起点的横坐标 pixels
*   int ystart: 起点的纵坐标 pixels
*   int width:  字符位图的宽度
*   int height:  字符位图的高度
*   uchar* pCode:  字符位图数据头指针
*
* RETURNS:
*   0:成功  -1:输入的位图数据为空 -2:位图范围超出屏幕范围
*
******************************************************************************/
extern int s60753_dispCode(int layer, int xstart,int ystart,int width,int height,uchar* pCode)
{

    return s60753_drawBmp( layer, xstart, ystart, width, height, pCode );

}

/******************************************************************************
*
* s60753_drawPoint - 画点函数,首先将光标移至画点处,读出当前该点处的信息,
*                     将该信息和画点所需要的颜色通过逻辑加工后,重新
*                     写入目标区域。这种方法效率低,不适合大片绘图。
*
* INPUTS:
*    int layer:  图层号
*   int x:  横轴坐标 pixels
*   int y:  纵轴坐标 pixels
*   int color:  颜色 1 黑色 0 白色

*
* RETURNS:
*  画点成功与否标志 0:成功  -1:点坐标超出屏幕范围
*
******************************************************************************/
extern int s60753_drawPoint(int layer, int x,int y,int color)
{
    uchar col;

    if((x >= 160)||(x < 0)||(y >= 160)||(y < 0))
        return ERROR;

    if((color < 0x80) && (color > 0))
        color = 0xFF;/* 颜色问题 */

    if(layer == 0){
        layer0[162 * y + x + 2] = color;
    }else if(layer == 1){
        layer1[162 * y + x + 2] = color;
    }else
        return ERROR;

    s60753_setCurrentLayer(layer);

    col = (47 + x)/3;

    /*EXT 0*/
    __LCDCommand(LCD_EXT_DISABLE);

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

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

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

    col = 3 * col;

    /* 刷新到显示屏上 */
    /* two layers are both open. */
    if(currentLayerState == 0x11){
        switch(compMode){
            case 0:
                __LCDParam(layer0[162 * y + col - 45] | layer1[162 * y + col - 45]);
                __LCDParam(layer0[162 * y + col - 44] | layer1[162 * y + col - 44]);
                __LCDParam(layer0[162 * y + col - 43] | layer1[162 * y + col - 43]);
                break;
            case 1:
                __LCDParam(layer0[162 * y + col - 45] | layer1[162 * y + col - 45]);
                __LCDParam(layer0[162 * y + col - 44] | layer1[162 * y + col - 44]);
                __LCDParam(layer0[162 * y + col - 43] | layer1[162 * y + col - 43]);
                break;
            case 2:
                __LCDParam(layer0[162 * y + col - 45] | layer1[162 * y + col - 45]);
                __LCDParam(layer0[162 * y + col - 44] | layer1[162 * y + col - 44]);
                __LCDParam(layer0[162 * y + col - 43] | layer1[162 * y + col - 43]);
                break;
            default:break;
        }
    }else { /* only one  layer is open */
        __LCDParam(currentLayer[162 * y + col - 45]);
        __LCDParam(currentLayer[162 * y + col - 44]);
        __LCDParam(currentLayer[162 * y + col - 43]);
    }
        return OK;

}

/******************************************************************************
*
* s60753_drawLine -画线函数,根据直线的起点和终点坐标,计算线上每一点的坐标,
*                        然后调用画点函数。
*
* INPUTS:
*    int layer:  图层号
*   int x0:      起点横轴坐标 pixels
*   int y0:      起点纵轴坐标 pixels
*   int x1:      终点横轴坐标 pixels
*   int y1:      起点纵轴坐标 pixels
*   int color:  颜色 0xF1~0xFF 黑色 0 白色
*
*
* RETURNS:
*   画线成功与否标志 0:成功  -1:点坐标超出屏幕范围
*
******************************************************************************/
extern int s60753_drawLine(int layer, int x0,int y0,int x1, int y1,int color)
{
    int i;
    uchar drawDirection;/* 0:horizontal; 1:vertical */

⌨️ 快捷键说明

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