📄 mst-g240128-052w.#2
字号:
LCD_WriteTCommand3(LCD_TXT_WID, 30, 0x00); // 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00); // 设置图形方式RAM起始地址
LCD_WriteTCommand3(LCD_GRH_WID, 30, 0x00); // 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
LCD_WriteTCommand1(LCD_MOD_OR); // 设置显示方式为"或"
LCD_WriteTCommand1(LCD_DIS_SW|0x08); // 设置纯图形显示模式
}
/****************************************************************************
* 名称:LCD_UpdateDate()
* 功能:在指定位置上更新8个点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* 出口参数:
* 说明:
****************************************************************************/
void LCD_UpdateByte(uint8 x, uint8 y, uint8 ucDATA)
{
uint16 addr;
addr = (GUI_LCM_XMAX>>3) * y + (x>>3); /* 找出目标地址 */
LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8 ); /* 置地址指针 */
LCD_WriteTCommand2(LCD_INC_WR, ucDATA); /* 输出数据 */
}
/****************************************************************************
* 名称:LCD_UpdatePoint()
* 功能:在指定位置上画点,刷新某一点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* bCOLOR 0/1 显示/不显示
* 出口参数:
* 说明:
****************************************************************************/
void LCD_UpdatePoint(uint8 x, uint8 y, bit bCOLOR)
{
uint16 addr;
uint8 ucTMP;
ucTMP = x % 8;
ucTMP = 7 - ucTMP;
if( bCOLOR == 1 )
ucTMP = 0x01 << ucTMP;
else
ucTMP = 0x00;
addr = (GUI_LCM_XMAX>>3) * y + (x>>3); /* 找出目标地址 */
LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8); /* 置地址指针 */
LCD_WriteTCommand2(LCD_INC_WR, ucTMP); /* 输出数据 */
}
/****************************************************************************
* 名称:LCD_DispAsciiCh16x8()
* 功能:显示ASCII 16×8字符。
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* ch 要显示的ASCII字符对应的数组的地址。
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
bit LCD_DispAsciiCh16x8(uint8 xx, uint8 yy, uint8 ucASCII)
{
uint8 x, y;
uint8 i;
uint16 AddrOffSet;
x = xx;
y = yy;
if( x >= (GUI_LCM_XMAX-8) ) /* 参数过滤 */
return(0);
if( y >= (GUI_LCM_YMAX-8) ) /* 参数过滤 */
return(0);
AddrOffSet = ( ucASCII - 32) * 16; //
for(i=0; i<16; i++) // 显示共16行
{
LCD_UpdateByte(x, y, FONT16x8ASII[AddrOffSet + i]);
y++; // 指向下一行
}
return(1);
}
/****************************************************************************
* 名称:LCD_DispAsciiStr16x8()
* 功能:输出显示字符串,16*8字体
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* str 要显示的ASCII码字符串
* 出口参数:无
* 说明:
****************************************************************************/
void LCD_DispAsciiStr16x8(uint8 xx, uint8 yy, const char *str)
{
uint8 x, y;
x = xx;
y = yy;
while(*str != '\0')
{
LCD_DispAsciiCh16x8(x, y, *str);
str++;
x = x + 8;
}
}
/****************************************************************************
* 名称:LCD_DispChChar16x16()
* 功能:显示汉字(16*16字体)。
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* ch 要显示的汉字对应的数组的首地址。
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
bit LCD_DispChChar16x16(uint8 xx, uint8 yy, char *ucCHAR, uint8 FontNo)
{
uint8 xdata x, y;
uint8 xdata i, j, k;
char xdata *OffSetCH;
uint16 xdata AddrOffSet;
x = xx;
y = yy;
if( x >= (GUI_LCM_XMAX-8) ) /* 参数过滤 */
return(0);
if( y >= (GUI_LCM_YMAX-8) ) /* 参数过滤 */
return(0);
OffSetCH = strstr(HzIndex, ucCHAR);
if( OffSetCH == 0 )
return (0);
AddrOffSet = ( OffSetCH - HzIndex ) << 4; // = / 2 * 32;
k = 0;
for(i=0; i<16; i++) // 显示共16行
{
for(j=0; j<2; j++) // 每行共16点
{
if( FontNo == 0 ) // 宋体
LCD_UpdateByte(x, y, FONT16x16ChCH1[AddrOffSet + k]);
if( FontNo == 1 ) // 宋体加粗
LCD_UpdateByte(x, y, FONT16x16ChCH2[AddrOffSet + k]);
x = x + 8;
k++;
}
y++; // 指向下一行
x = x - 16; // 恢复x值
}
return(1);
}
/****************************************************************************
* 名称:LCD_DispChStr16x16()
* 功能:输出显示字符串(16*16字体)。
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* str 要显示的字符串
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void LCD_DispChStr16x16(uint8 xx, uint8 yy, const char *str, uint8 FontNo)
{
uint8 idata x, y;
char idata SubStr[3] = {0, 0, 0};
x = xx;
y = yy;
while( *str != 0 )
{
strncpy(SubStr, str, 2);
SubStr[2] = 0;
LCD_DispChChar16x16(x, y, SubStr, FontNo);
str = str + 2;
x = x + 16;
}
}
/****************************************************************************
* 名称:LCD_DispAsciiChStr()
* 功能:显示ASCII码和汉字混编字符串.
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* str 要显示的字符串
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void LCD_DispAsciiChStr(uint8 xx, uint8 yy, const char *str, uint8 FontNo)
{
uint8 idata x, y;
char idata SubStr[3] = {0, 0, 0};
x = xx;
y = yy;
while( *str != 0 )
{
if( (uint8)*str < 0xA0 )
{
LCD_DispAsciiCh16x8(x, y, *str);
str++;
x = x + 8;
}
if( (uint8)*str >= 0xA0 )
{
strncpy(SubStr, str, 2);
SubStr[2] = 0;
LCD_DispChChar16x16(x, y, SubStr, FontNo);
str = str + 2;
x = x + 16;
}
}
}
/****************************************************************************
* 名称:LCD_DispAsciiChCURS()
* 功能:显示光标
* 入口参数:x 指定显示位置,x坐标
* y 指定显示位置,y坐标
* bCOLOR 0/1, 不显示/显示.
* bCHAR 0/1, ASCII码字符/汉字字符型光标.
* 出口参数:
* 说明:
****************************************************************************/
void LCD_DispAsciiChCURS(uint8 xx, uint8 yy, bit bCOLOR, bit bCHAR)
{
uint8 idata x, y;
x = xx;
y = yy;
if( bCHAR == 1 ) // 显示汉字
{
if( bCOLOR == 1 ) // 显示光标
{
LCD_UpdateByte(x, y+15, 0xff);
LCD_UpdateByte(x+8, y+15, 0xff);
}
else // 不显示光标
{
LCD_UpdateByte(x, y+15, 0x00);
LCD_UpdateByte(x+8, y+15, 0x00);
}
}
else // 显示ASCII码
{
if( bCOLOR == 1 ) // 显示光标
{
LCD_UpdateByte(x, y+15, 0xff);
}
else // 不显示光标
{
LCD_UpdateByte(x, y+15, 0x00);
}
}
}
/****************************************************************************
** 函数名称: LCD_SelfTest()
** 功能描述: LCD测试程序
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void LCD_SelfTest(void)
{
LCD_DispAsciiChStr (16, 96, "苏州LZK-X型电动机", 1);
LCD_DispAsciiCh16x8 (16, 16, '4' );
LCD_DispAsciiStr16x8( 0, 32, ">0123456789LZK-xABCDEFG");
LCD_DispChChar16x16 (16, 48, "科", 1);
LCD_DispChStr16x16 (32, 48, "科树", 1);
LCD_DispChStr16x16 (64, 48, "通信", 1);
LCD_DispChStr16x16 (64+2*16+8, 48, "公科有技限司", 1);
LCD_DispChStr16x16 (16, 72, "友明科技有限公司", 1);
LCD_DispAsciiChStr (16,112, "常滑全", 0);
LCD_DispAsciiChStr (64,112, "科树", 1);
}
/****************************************************************************
** 函数名称: LCD_GoToXY()
** 功能描述: 光标定位
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void LCD_GoToXY(uint8 x, uint8 y)
{
CURS_X = x;
CURS_Y = y;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -