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

📄 ltm024d130.c

📁 飞思卡尔带液晶驱动的MCU飞思卡尔带液晶驱动的MCU
💻 C
📖 第 1 页 / 共 4 页
字号:

/*********************************************************************************************************
** 函数名称: setCoordinate
** 功能描述: 写绘图坐标
** 输   入: x 起点所在列的位置
**           y 起点所在行的位置
** 输   出: 无
** 全局变量: 无
** 调用模块: __writeCommand()、windowset()、__writeData16()
** 返    回:无
** 作   者: 张展威
** 日   期: 2008年7月22日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void setCoordinate(unsigned short x, unsigned short y)
{
    //起始坐标
    __writeCommand(0, 0x02, (unsigned char)x);                          /* X (0~239)                 */
    __writeCommand(1, 0x03, y);                                         /* Y (0~319)                 */
    __writeRegAddr8(0x0E);                                              /* GRAM写接口寄存器地址         */
}

void __screenFill(unsigned short usPixValue)
{
    unsigned long i = 0;
    //扫描方向控制
    __writeCommand(0,0x00,0x04);                                        /* 扫描方向控制                 */
    __writeCommand(0,0x01,0x07);                                        /* 扫描方向控制                 */
    
    
    //面板大小设置
    __writeCommand(0,0x04,0xEF);                                        /* 结束列数(0~239)              */
    __writeCommand(1,0x05,0x013F);                                      /* 结束行数(0~319)              */
    
    //窗口设置
    windowset(0, 0, 239, 319);
    
    //起始坐标
    setCoordinate(0,0);
    for(i=0;i < (240 * 320);i++) {                                      /* 填充像素值                   */
        __writeData16(usPixValue);                                      /* 发送像素值                   */
    }
}




/*********************************************************************************************************
** 函数名称: __writeOneHzChar
** 功能描述: 在指定的起始坐标处写一个汉字
** 输   入: pucMsk 指向汉字字模存放的起始地址
**           x0 起始坐标所在列的位置
**           y0 起始坐标所在行的位置
**           color 字符显示的颜色
** 输   出: 无
** 全局变量: 无
** 调用模块: setCoordinate()、__writeData16()、__readData16()
** 返    回:所写字符的列宽16
** 作   者: 张展威
** 日   期: 2008年7月22日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned long __writeOneHzChar(unsigned char *pucMsk,
                               unsigned short x0,
                               unsigned short y0,
                               unsigned short color)
{
    unsigned long i,j;
    unsigned short mod[16];                                             /* 当前字模                     */
    unsigned short *pusMsk;                                             /* 当前字库地址                 */
    unsigned short y;
    
    pusMsk = (unsigned short *)pucMsk;
    for(i=0; i<16; i++)                                                 /* 保存当前汉字点阵式字模       */
    {
        mod[i] = *pusMsk++;                                             /* 取得当前字模,半字对齐访问   */
        mod[i] = ((mod[i] & 0xff00) >> 8) | ((mod[i] & 0x00ff) << 8);   /* 字模交换高低字节(为了显示   */
                                                                        /* 需要)                       */
    }
    y = y0;
    for(i=0; i<16; i++) {                                               /* 16行                         */
        #ifdef __DISPLAY_BUFFER                                         /* 使用显存显示                 */
        for(j=0; j<16; j++) {                                           /* 16列                         */
            if((mod[i] << j)& 0x8000) {                                 /* 显示字模                     */
                DispBuf[240*(y0+i) + x0+j] = color;
            }
        }
        #else                                                           /* 直接显示                     */
        
        setCoordinate(x0, y);                                           /* 设置写数据地址指针           */
        for(j=0; j<16; j++) {                                           /* 16列                         */
            if((mod[i] << j) & 0x8000) {                                /* 显示字模                     */
                __writeData16(color);
            } else {
                __readData16();                                         /* 用读方式跳过写空白点的像素   */
            }
        }
        y++;
        #endif
    }
    return (16);                                                        /* 返回16位列宽                 */
}



/*********************************************************************************************************
** 函数名称: __writeOneASCII
** 功能描述: 在指定的起始坐标处写一个ASCII码字符
** 输   入: pucMsk 指向ASCII码字符字模存放的起始地址
**           x0 起始坐标所在列的位置
**           y0 起始坐标所在行的位置
**           color 字符显示的颜色
** 输   出: 无
** 全局变量: 无
** 调用模块: setCoordinate()、__writeData16()、__readData16()
** 返    回:所写字符的列宽8
** 作   者: 张展威
** 日   期: 2008年7月22日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned long __writeOneASCII(unsigned char *pucMsk,
                              unsigned short x0,
                              unsigned short y0,
                              unsigned short color)
{
    unsigned long i,j;
    unsigned short y;
    unsigned char ucChar;
    
    y = y0;
    for(i=0; i<16; i++) {                                               /* 16行                         */
        ucChar = *pucMsk++;
        #ifdef __DISPLAY_BUFFER                                         /* 使用显存显示                 */
        for(j=0; j<8; j++) {                                            /* 8列                          */
            if((ucChar << j)& 0x80) {                                   /* 显示字模                     */
                DispBuf[240*(y0+i) + x0+j] = color;
            }
        }
        #else                                                           /* 直接显示                     */
        
        setCoordinate(x0, y);                                           /* 设置写数据地址指针           */
        for(j=0; j<8; j++) {                                            /* 8列                          */
            if((ucChar << j) & 0x80) {                                  /* 显示字模                     */
                __writeData16(color);
            } else {
                __readData16();
            }
        }
        y++;
        #endif
    }
    return (8);                                                         /* 返回16位列宽                 */
}



/*********************************************************************************************************
** 函数名称: writeString
** 功能描述: 在指定的坐标处开始显示字符串
** 输   入: pcStr 字符串存放首地址
**           x0 起始坐标所在列的位置
**           y0 起始坐标所在行的位置
**           color 字符串的显示颜色
** 输   出: 无
** 全局变量: GBHZ_16 自定义汉字库字模数表
**           ASCII   自定义的ASCII码字库字模数表
** 调用模块: findHzIndex()、__writeOneHzChar()、__writeOneASCII()
** 作   者: 张展威
** 日   期: 2008年7月22日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void writeString(unsigned char *pcStr, unsigned short x0, unsigned short y0, unsigned short color)
{
    unsigned short usIndex;
    unsigned short usWidth = 0;
    FNT_GB16 *ptGb16 = 0;
    
    ptGb16 = (FNT_GB16 *)GBHZ_16;                                       /*                              */
    while(1)
    {
        if(*pcStr == 0) {
            break;                                                      /* 字符串结束                   */
        }
        
        x0 = x0 + (usWidth);                                            /* 调节字符串显示松紧度         */
        if(*pcStr > 0x80) {                                             /* 判断为汉字                   */
            if((x0 + 16) >= Gus_LCM_XMAX) {                             /* 检查剩余空间是否足够         */
                x0 = 0;
                y0 = y0 + 16;                                           /* 改变显示坐标                 */
                if(y0 >= Gus_LCM_YMAX) {                                /* 纵坐标超出                   */
                    y0 = 0;
                }
            }
            usIndex = findHzIndex(pcStr);
            usWidth = __writeOneHzChar((unsigned char *)&(ptGb16[usIndex].Msk[0]), x0, y0, color);
                                                                        /* 显示字符                     */
            pcStr += 2;
        } else {                                                        /* 判断为非汉字                 */
            if (*pcStr == '\r') {                                       /* 换行                         */
                y0 = y0 + 16;                                           /* 改变显示坐标                 */
                if(y0 >= Gus_LCM_YMAX) {                                /* 纵坐标超出                   */
                    y0 = 0;
                }
                pcStr++;
                usWidth = 0;
                continue;
            } else if (*pcStr == '\n') {                                /* 对齐到起点                   */
                x0 = 0;
                pcStr++;
                usWidth = 0;
                continue;
            } else {
                if((x0 + 8) >= Gus_LCM_XMAX) {                          /* 检查剩余空间是否足够         */
                    x0 = 0;
                    y0 = y0 + 16;                                       /* 改变显示坐标                 */
                    if(y0 >= Gus_LCM_YMAX) {                            /* 纵坐标超出                   */
                        y0 = 0;
                    }
                }
                usWidth = __writeOneASCII((unsigned char *)&ASCII[(*pcStr - 0x20)][0], x0, y0, color);
                                                                        /* ASCII码表21H的值对应区位码3区*/
                pcStr += 1;
            }
        }
    }
}


/*********************************************************************************************************
** 函数名称: pixelDraw
** 功能描述: 在指定的坐标画一个点(像素)
** 输   入: x 列坐标
**           y 行坐标
**           usValue 像素的颜色值
** 输   出: 无
** 全局变量: 无
** 调用模块: setCoordinate()、__writeData16()
** 作   者: 张展威

⌨️ 快捷键说明

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