📄 test.c
字号:
/****************************************************************************************
* 文件名:TEST.C
* 功能:在图形液晶模块SMG240128A上显示均匀的黑白方格。
****************************************************************************************/
#include "config.h"
#define TCOLOR uint8
extern uint8 gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];
/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat 填充的数据(对于黑白色LCM,为0的点灭,为1的点显示)
* 出口参数:无
****************************************************************************/
void GUI_FillSCR(uint8 dat)
{ uint32 i, j;
for(i=0; i<GUI_LCM_YMAX; i++) // 历遍所有行
{ for(j=0; j<GUI_LCM_XMAX/8; j++) // 历遍所有行
{ gui_disp_buf[i][j] = dat; // 填充数据
}
}
/* 填充LCM */
LCD_FillAll(dat);
}
uint8 const DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数: x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
* 效范围)
****************************************************************************/
uint8 GUI_Point(uint32 x, uint32 y, TCOLOR color)
{ /* 参数过滤 */
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
/* 设置缓冲区相应的点 */
if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
else gui_disp_buf[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(uint32 x0, uint32 y0, uint32 x1, uint8 color)
{ uint32 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_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
else gui_disp_buf[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_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
else gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
LCD_UpdatePoint(x0, y0);
}
/****************************************************************************
* 名称:main()
* 功能:主函数,SMG240128A显示测试。
****************************************************************************/
int main(void)
{ uint8 x, y;
uint8 color;
uint8 i, j;
LCD_Initialize(); // 初始化LCM模块工作模式,纯图形模式
GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
x=0;
y=0;
color = 1;
// 在液晶屏上显示均匀的黑白方格
for(j=0; j<7; j++)
{ // 显示20行x_x_,从上至下,即形成黑白块
for(i=0; i<20; i++)
{ // 显示一行 x_x_ (x表示画线,_表示空白)
for(x=0; x<240; x+=24)
{ GUI_HLine(x, y, x+23, color);
if(0==color) color = 1;
else color = 0;
}
y++; // 指向下一行
}
// 下一个20行x_x_要切换起始色
if(0==color) color = 1;
else color = 0;
}
while(1);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -