📄 lcm128645zk.c
字号:
for (x=0;x<8;x++)
{ gui_disp_buf[y][x]=0x00;
gui_disp_buf[y][x+8]=0x00;
//此处连续写数据,由于y为行号,在本循环内不变,
//而连续写16个数据时,x位址自动增加,
//因此实际上可以写入16个汉字的位置。
LCM128645ZK_data(0x00); //高字节数据
LCM128645ZK_data(0x00); //低字节数据
}
}
}
}
uint8 const DEC_HEX_TAB[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
/***********************************************************************
* 名称:GUI_Point(int x,int y,Tcolor color)
* 功能:读取指定点上的数据。
* 入口参数:x x坐标值(0-127)
* y y坐标值(0-63)
* 出口参数:返回该点上的字节数据。
***********************************************************************/
void GUI_Point(uint8 x,uint8 y,Tcolor color)
{
uint8 k,dx,bak,bx,flaglow,m;
uint8 bak0;
uint8 bak1;
uint8 hbyte,lbyte;
hbyte=(x>>4)*2;
lbyte=(x>>4)*2+1;
bak0=gui_disp_buf[y][hbyte]; //bak0是高字节
bak1=gui_disp_buf[y][lbyte]; // bak1是低字节
bak=0x00;
flaglow=1;
y=y&0x3f; //过滤数据
if(y<32) //分屏显示 上半屏
{
dx=x>>4; //dx=0
//x=1
bx=x-(dx<<4); //bx=1
if(bx>7) //低字节
{ flaglow=0;
bx-=8;
bak=bak1;
}
else bak=bak0;
if(color)
bak |= DEC_HEX_TAB[bx&0x07];
else //写零清除
bak &=~DEC_HEX_TAB[bx&0x07];
k=bak;
LCM128645ZK_cmd(0x36); //扩充指令 绘图显打开
LCM128645ZK_cmd(y+0x80); //行地址
LCM128645ZK_cmd(dx+0x80); //列地址
if(flaglow==1)
{
LCM128645ZK_data(k);
gui_disp_buf[y][hbyte]=k;
LCM128645ZK_data(bak1);
}
else
{
LCM128645ZK_data(bak0);
LCM128645ZK_data(k);
gui_disp_buf[y][lbyte]=k;
}
LCM128645ZK_cmd(0x30);
}
else
{
dx=x>>4; //dx=0
bx=x-(dx<<4);
if(bx>7) //低字节
{
flaglow=0;
bx-=8;
bak=bak1;
}
else bak=bak0;
if(color)
bak |= DEC_HEX_TAB[bx&0x07];
else//写零清除
bak &=~DEC_HEX_TAB[bx&0x07];
k=bak;
m=y;
y=y-32;
LCM128645ZK_cmd(0x36); //扩充指令 绘图显示
LCM128645ZK_cmd(y+0x80); //行地址
LCM128645ZK_cmd(dx+0x88); //列地址
if(flaglow==1)
{
LCM128645ZK_data(k);
LCM128645ZK_data(bak1);
gui_disp_buf[m][hbyte]=k;
}
else
{
LCM128645ZK_data(bak0);
LCM128645ZK_data(k);
gui_disp_buf[m][lbyte]=k;
}
LCM128645ZK_cmd(0x30);
}
}
/****************************************************************************
* 名称: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) // 对x0、x1大小进行排列,以便画图
{ bak = y1;
y1 = y0;
y0 = bak;
}
do
{ GUI_Point(x0, y0,color); // 逐点显示,描出垂直线
y0++;
}while(y1>=y0);
}
/****************************************************************************
* 名称:GUI_Rectangle()
* 功能:画矩形。
* 入口参数: x0 矩形左上角的x坐标值
* y0 矩形左上角的y坐标值
* x1 矩形右下角的x坐标值
* y1 矩形右下角的y坐标值
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_Rectangle(uint8 x0, uint8 y0, uint8 x1, uint8 y1,Tcolor color)
{ GUI_HLine(x0, y0, x1,color);
GUI_HLine(x0, y1, x1,color);
GUI_RLine(x0, y0, y1,color);
GUI_RLine(x1, y0, y1,color);
}
/****************************************************************************
* 名称:GUI_RectangleFill()
* 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
* 入口参数: x0 矩形左上角的x坐标值
* y0 矩形左上角的y坐标值
* x1 矩形右下角的x坐标值
* y1 矩形右下角的y坐标值
* color 填充颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_RectangleFill(uint8 x0, uint8 y0, uint8 x1, uint8 y1, Tcolor color)
{ uint8 i;
/* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
if(x0>x1) // 若x0>x1,则x0与x1交换
{ i = x0;
x0 = x1;
x1 = i;
}
if(y0>y1) // 若y0>y1,则y0与y1交换
{ i = y0;
y0 = y1;
y1 = i;
}
/* 判断是否只是直线 */
if(y0==y1)
{ GUI_HLine(x0, y0, x1, color);
return;
}
if(x0==x1)
{ GUI_RLine(x0, y0, y1, color);
return;
}
while(y0<=y1)
{ GUI_HLine(x0, y0, x1, color); // 当前画水平线
y0++; // 下一行
}
}
void Disp_Numbers (void)
{
while(1)
{
Num1
LCM128645ZK_Shortdelay(5000000);
GUI_RectangleFill(110,20,120,50,1);
Num8
}
}
/****************************************************************************
* 名称: Game_HTest(void)
*
****************************************************************************/
void Game_HTest(void)
{
uint8 i,j;
for(j=0;j<60;j++)
{
for(i=0;i<96;i++)
{
GUI_RectangleFill(2+i, 2+j, 5+i, 3+j,1);
LCM128645ZK_Shortdelay(100000);
GUI_RectangleFill(2+i-1, 2+j-1, 5+i-1, 3+j,0);
}
}
}
/****************************************************************************
* 名称: Game_STest(void)
*
****************************************************************************/
void Game_STest(void)
{
uint8 i,j;
for(j=0;j<96;j++)
{
for(i=0;i<63;i++)
{
GUI_RectangleFill(2, 2+i, 3, 5+i,1);
LCM128645ZK_Shortdelay(100000);
GUI_RectangleFill(2, 2+i-1, 3, 5+i-1,0);
}
}
}
/****************************************************************************
* 名称: Game_face(void)
****************************************************************************/
void Game_face(void)
{
GUI_RLine(1, 0, 62,1);
GUI_RLine(126, 0, 62,1);
GUI_Rectangle(0, 0, 127, 63,1);
GUI_HLine(0, 62, 126,1);
GUI_HLine(0, 61, 126,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -