📄 lcmdrv.c
字号:
{
x = x&0xff; // 参数过滤
y = y&0x3f;
return(gui_disp_buf[x][y/8]);
}
/***********************************************************************
* 名称:LCM_DispFill()
* 功能:向显示缓冲区填充数据
* 入口参数:filldata 要写入LCM的填充数据
* 注:此函数会设置显示起始行为0,且会自动选中CS1有效
***********************************************************************/
static void LCM_DispFill(uint8 filldata)
{
unsigned char * pdisbuf=&gui_disp_buf[0][0]; /*指向显示缓冲的指针*/
for(;pdisbuf<=&gui_disp_buf[191][7];pdisbuf++) /*指针调整,指向下一个*/
{ /*判断指针是否指向缓冲区尾*/
*pdisbuf=filldata; /*填充显示缓冲*/
}
}
/************************************************\
* * LCMUpScr
* * 说明: 根据显示缓存内容更新显示
* *入口参数:无
* *出口参数:无
\************************************************/
void LCMUpScr(void)
{
unsigned char cntx, cnty;
LCM_SELECT_LEFT(); /*选择左半部分*/
for(cntx=0;cntx<8;cntx ++)
{
setX(cntx); /*选择第几行*/
setY(0); /*选择第0列开始*/
for(cnty=0;cnty<64;cnty ++)
{
LCM_WrData(gui_disp_buf[cnty][cntx]); /*刷新显示缓冲*/
}
}
LCM_SELECT_MIDDLE(); /*中间部分,同左半部分*/
for(cntx=0;cntx<8;cntx ++)
{
setX(cntx);
setY(0);
for(cnty=64;cnty<128;cnty ++)
{
LCM_WrData(gui_disp_buf[cnty][cntx]);
}
}
LCM_SELECT_RIGHT(); /*右半部分,同左半部分*/
for(cntx=0;cntx<8;cntx ++)
{
setX(cntx);
setY(0);
for(cnty=128;cnty<192;cnty ++)
{
LCM_WrData(gui_disp_buf[cnty][cntx]);
}
}
}
/***********************************************************************
* 名称:LCM_DispIni()
* 功能:LCM显示初始化
* 入口参数:无
* 出口参数:无
* 注:初化显示后,清屏并设置显示起始行为0
* 会复位LCM_DISPCX,LCM_DISPCY.(并会只选中CS1)
***********************************************************************/
static void LCM_DispIni(void)
{
LCM_RESET();
LCM_SELECT_LEFT(); /*选择左半部分*/
setStartLine(0); /*起始行从第一行开始显示*/
setOnOff(1);
LCM_SELECT_MIDDLE(); /*选择左半部分*/
setStartLine(0); /*起始行从第一行开始显示*/
setOnOff(1);
LCM_SELECT_RIGHT(); /*选择右半部分*/
setStartLine(0); /*起始行从第一行开始显示*/
setOnOff(1); /*开显示*/
}
/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat 填充的数据
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_FillSCR(TCOLOR dat)
{
LCM_DispFill(dat);
}
/****************************************************************************
* 名称:GUI_Initialize()
* 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_Initialize(void)
{
LCM_DispIni(); // 初始化LCM模块工作模式,纯图形模式
GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
LCMUpScr(); // 更新屏的显示存储区,把数据从显示缓冲区给显示存储区
}
/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_ClearSCR(void)
{
GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
LCMUpScr(); // 更新屏的显示存储区,把数据从显示缓冲区给显示存储区
}
uint8 const DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
uint8 GUI_Point(uint8 x, uint8 y, TCOLOR color)
{
unsigned char temp;
temp=gui_disp_buf[x][y/8]; /*读取时对应的显存*/
if(color==1) /*如果是写入该点*/
{
temp|=gu8LCMPtSet[y%8]; /*将缓存对应的位置1*/
}
else
{
temp&=gu8LCMPtClr[y%8]; /*否则清楚该位*/
}
gui_disp_buf[x][y/8]=temp; /*保存入缓存*/
LCM_WriteByte(x,y,temp); /*更新显示存储区*/
return 1;
}
/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定点的颜色。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* ret 保存颜色值的指针
* 出口参数:返回0表示指定地址超出缓冲区范围
* 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效,
* RGB结构则R、G、B变量有效。
* *说明:读指定的点的数据
* *入口参数:X、Y指定点的坐标
* *出口参数:该点的数据,0——白屏;1——有色
****************************************************************************/
uint8 GUI_ReadPoint(uint8 x, uint8 y, TCOLOR *ret)
{
unsigned char temp;
temp=gui_disp_buf[x][y/8]; /*读取该位所在的字节*/
if(temp&gu8LCMPtSet[y%8]) /*判断该位是否为1*/
{
return(1); /*为1则返回1*/
}
else
{
return(0); /*否则返回0*/
}
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0 水平线起点所在列的位置
* y0 水平线起点所在行的位置
* x1 水平线终点所在列的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color)
{ uint8 bak;
if(x0>x1) // 对x0、x1大小进行排列,以便画图
{
bak = x1;
x1 = x0;
x0 = bak;
}
do
{
GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
x0++;
}while(x1>=x0);
}
/***********************************************************************
* 名称:GUI_RLine()
* 功能:画竖直线。根据硬件特点,实现加速。
* 入口参数:x0 垂直线起点所在列的位置
* y0 垂直线起点所在行的位置
* y1 垂直线终点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数: 无
* 说明:操作失败原因是指定地址超出缓冲区范围。
***********************************************************************/
void GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color)
{
uint8 bak;
if(y0>y1) // 对y0、y1大小进行排列,以便画图
{
bak = y1;
y1 = y0;
y0 = bak;
}
do
{
GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
y0++;
}while(y1>=y0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -