更多操作
第1行: | 第1行: | ||
== 底层支撑函数 == | == 底层支撑函数 == | ||
LCD_SetWindows | *LCD_SetWindows | ||
该函数实现因驱动IC而异(不同的驱动IC设置坐标值命令和原理有差异),但是原理基本一样,都是设置起始坐标和结束坐标,设置一块显示区域 | 该函数实现因驱动IC而异(不同的驱动IC设置坐标值命令和原理有差异),但是原理基本一样,都是设置起始坐标和结束坐标,设置一块显示区域 | ||
{{code|1= | |||
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd) | |||
{ | |||
LCD_WR_REG(lcddev.setxcmd); | |||
LCD_WR_DATA(xStar>>8); | |||
LCD_WR_DATA(0x00FF&xStar); | |||
LCD_WR_DATA(xEnd>>8); | |||
LCD_WR_DATA(0x00FF&xEnd); | |||
LCD_WR_REG(lcddev.setycmd); | |||
LCD_WR_DATA(yStar>>8); | |||
LCD_WR_DATA(0x00FF&yStar); | |||
LCD_WR_DATA(yEnd>>8); | |||
LCD_WR_DATA(0x00FF&yEnd); | |||
LCD_WriteRAM_Prepare(); //¿ªÊ¼Ð´ÈëGRAM | |||
} | |||
}} | |||
LCD_DrawPoint(x,y); | LCD_DrawPoint(x,y); |
2018年9月11日 (二) 18:59的版本
底层支撑函数
- LCD_SetWindows
该函数实现因驱动IC而异(不同的驱动IC设置坐标值命令和原理有差异),但是原理基本一样,都是设置起始坐标和结束坐标,设置一块显示区域
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(xStar>>8); LCD_WR_DATA(0x00FF&xStar); LCD_WR_DATA(xEnd>>8); LCD_WR_DATA(0x00FF&xEnd); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(yStar>>8); LCD_WR_DATA(0x00FF&yStar); LCD_WR_DATA(yEnd>>8); LCD_WR_DATA(0x00FF&yEnd); LCD_WriteRAM_Prepare(); //¿ªÊ¼Ð´ÈëGRAM }
LCD_DrawPoint(x,y);
LCD_DrawPoint
英文取模
12X6
16X8英文取模设置
16X8汉字取模对应显示函数:
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
}
64X32英文取模设置
64X32英文取模对应显示函数:
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
}
中文取模
16X16汉字取模设置
16X16汉字取模对应显示函数:
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode) { u8 i,j; u16 k; u16 HZnum; u16 x0=x; HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //自动统计汉字数目 for (k=0;k<HZnum;k++) { if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1))) { LCD_SetWindows(x,y,x+16-1,y+16-1); for(i=0;i<16*2;i++) { for(j=0;j<8;j++) { if(!mode) //非叠加方式 { if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint_16Bit(fc); else LCD_DrawPoint_16Bit(bc); } else { POINT_COLOR=fc; if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//画一个点 x++; if((x-x0)==16) { x=x0; y++; break; } } } } } continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响 } LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏 }
24X24汉字取模设置
24X24汉字取模对应显示函数:
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
}
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
u8 i,j;
u16 k;
u16 HZnum;
u16 x0=x;
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //自动统计汉字数目
for (k=0;k<HZnum;k++)
{
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
{ LCD_SetWindows(x,y,x+16-1,y+16-1);
for(i=0;i<16*2;i++)
{
for(j=0;j<8;j++)
{
if(!mode) //非叠加方式
{
if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint_16Bit(fc);
else LCD_DrawPoint_16Bit(bc);
}
else
{
POINT_COLOR=fc;
if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//画一个点
x++;
if((x-x0)==16)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
}
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏
}