📄 display.c
字号:
return 0;
}
}
/***********************************************************************
* 名称:LCD_TestStaBit03()
* 功能:数据自动写状态是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
bit LCD_TestStaBit03(void)
{
uint8 i;
for(i=100; i>0; i--)
{
if( (LCD_ReadState() & 0x08) == 0x08 )
break;
}
if(i>0)
return 1;
else
// return 0;
{
LED_OnOff(ErrLED,1); // Error Indicating LED On.
DmS(200);
LED_OnOff(ErrLED,0); // Error Indicating LED Off.
D1S(1);
return 0;
}
}
/***********************************************************************
* 名称:LCD_WriteTCommand1()
* 功能:写无参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
bit LCD_WriteTCommand1(uint8 ucCMD)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTCommand2()
* 功能:写单参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* ucDATA1 (参数1)
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送参数据数据,再发送命令字
***********************************************************************/
bit LCD_WriteTCommand2(uint8 ucCMD, uint8 ucDATA1)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA1); // 发送数据1
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTCommand3()
* 功能:写双参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* ucDATA1 (参数1)
* ucDATA2 (参数2)
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送两字节参数据数据,再发送命令字
***********************************************************************/
bit LCD_WriteTCommand3(uint8 ucCMD, uint8 ucDATA1, uint8 ucDATA2)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA1); // 发送数据1
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA2); // 发送数据2
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTData1()
* 功能:写1字节数据子程序。先判断状态字。
* 入口参数:ucDATA 要写入LCM的数据
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
bit LCD_WriteTData1(uint8 ucDATA)
{
if( LCD_TestStaBit03()==0 )
return 0;
LCD_WriteData(ucDATA); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_Initialize()
* 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
* 入口参数:无
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
void LCD_Initialize(void)
{
LCD_Reset();
LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00); // 设置文本方式RAM起始地址
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_FillAll()
* 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
* 入口参数:ucDATA 要填充的数据
* 出口参数:无
***********************************************************************/
void LCD_FillAll(uint8 ucDATA)
{
uint16 i;
LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00); // 置地址指针
LCD_WriteTCommand1(LCD_AUT_WR); // 自动写
for(i=0;i<128*30;i++)
{
LCD_WriteTData1(ucDATA); // 写数据
}
LCD_WriteTCommand1(LCD_AUT_OVR); // 自动写结束
LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00); // 重置地址指针
}
/****************************************************************************
* 名称:LCD_UpdatePoint()
* 功能:在指定位置上画点,刷新某一点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void LCD_UpdatePoint(uint16 x,uint16 y)
{
uint16 addr;
addr = y*(GUI_LCM_XMAX>>3) + (x>>3); /* 找出目标地址 */
LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8); /* 置地址指针 */
LCD_WriteTCommand2(LCD_INC_WR, GUI_disp_buff[y][x>>3]); /* 输出数据 */
}
/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:ucDATA 填充的数据(对于黑白色LCM,为0的点灭,为1的点显示)
* 出口参数:无
****************************************************************************/
void GUI_FillSCR(uint8 ucDATA)
{
uint8 i, j;
for(i=0; i<GUI_LCM_YMAX; i++) // 历遍所有行
{
for(j=0; j<GUI_LCM_XMAX/8; j++) // 历遍所有行
{
GUI_disp_buff[i][j] = ucDATA; // 填充数据
}
}
LCD_FillAll(ucDATA); /* 填充LCM */
}
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
* 效范围)
****************************************************************************/
bit GUI_Point(uint16 x, uint16 y, uint8 color)
{
/* 参数过滤,超出显示区域不显示 */
if(x>=GUI_LCM_XMAX)
return 0;
if(y>=GUI_LCM_YMAX)
return 0;
/* 设置缓冲区相应的点 */
if( (color&0x01) != 0 )
GUI_disp_buff[y][x>>3] |= DCB_HEX_TAB[x&0x07];
else
GUI_disp_buff[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);
/* 刷新显示 */
LCD_UpdatePoint(x,y);
return 1;
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0 水平线起点所在列的位置
* y0 水平线起点所在行的位置
* x1 水平线终点所在列的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_HLine(uint16 x0, uint16 y0, uint16 x1, uint8 color)
{
uint16 bak;
if(x0>x1) // 对x0、x1大小进行排列,以便画图
{
bak = x1;
x1 = x0;
x0 = bak;
}
if(x0==x1)
{
GUI_Point(x0,y0,color);
return;
}
do
{ /* 设置相应的点为1 */
if(0!=color)
GUI_disp_buff[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
else
GUI_disp_buff[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
/* 刷新显示(一次刷新一字节) */
if( (x0&0x07)==0x07 )
LCD_UpdatePoint(x0, y0);
x0++;
} while(x1>x0);
/* 对最后一点显示操作 */
if(0!=color)
GUI_disp_buff[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
else
GUI_disp_buff[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
LCD_UpdatePoint(x0, y0);
}
/****************************************************************************
* 名称:LCD_SelfTest()
* 功能:RT240128A显示测试
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void LCD_SelfTest(void)
{
uint8 x, y;
uint8 i, j;
uint8 color;
LCD_Initialize(); // 初始化LCM模块工作模式,纯图形模式
GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
x=0;
y=0;
color = 1;
// 在液晶屏上显示均匀的黑白方格
for(j=0; j<7; j++)
{
for(i=0; i<20; i++) // 显示20行x_x_,从上至下,即形成黑白块
{
for(x=0; x<240; x = x + 24) // 显示一行 x_x_ (x表示画线,_表示空白)
{
GUI_HLine(x,y,x+23,color);
if(0==color)
color = 1;
else
color = 0;
}
y++; // 指向下一行
}
if(0==color)
color = 1; // 下一个20行x_x_要切换起始色
else
color = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -