📄 ltm024d130.c
字号:
/*********************************************************************************************************
** 函数名称: 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 + -