📄 12864lcd.h
字号:
Set_Y(tmpCol-64);
Clr_CS1;
Set_CS2;
write_char(chr[i+16]);
}
tmpCol++;
}
}
void display_char( BYTE *chr, BYTE nRow, BYTE nCol )
{
BYTE i,tmpCol;
Set_X(nRow);
tmpCol=nCol;
for(i=0;i<5;i++)
{
if(tmpCol<=63)
{
Set_Y(tmpCol);
Set_CS1;
Clr_CS2;
write_char(chr[i]);
}
else
{
Set_Y(tmpCol-64);
Clr_CS1;
Set_CS2;
write_char(chr[i]);
}
tmpCol++;
}
}
//绘图函数
/*************************************/
/* 绘点函数 */
/*************************************/
/* XX--(0-128) YY--(0-63) FLAG=2反色 FLAG=1绘点 FLAG=0 清点 */
void Pixel(BYTE xx,BYTE yy,BYTE PixelModel)
{
BYTE y,ch;
ch=yy%8; //余数
y=1;
for(;ch!=0;)
{
y=y*2;
ch--;
}
if(xx<64)
{
Set_X(yy/8);
Set_Y(xx);
Set_CS1;
Clr_CS2;
ch=read_char();
Set_Y(xx);
Set_CS1;
Clr_CS2;
switch(PixelModel)
{
case PixelModel_Clear:
{
y=~y;
ch&=y;
write_char(ch);
break;
}
case PixelModel_Draw:
write_char(ch|y);
break;
case PixelModel_Not:
{
ch^=y;
write_char(ch);
break;
}
}
}
else
{
Set_X(yy/8);
Set_Y(xx-64);
Clr_CS1;
Set_CS2;
ch=read_char();
Set_Y(xx-64);
Clr_CS1;
Set_CS2;
switch(PixelModel)
{
case PixelModel_Clear:
{
y=~y;
ch&=y;
write_char(ch);
break;
}
case PixelModel_Draw:
write_char(ch|y);
break;
case PixelModel_Not:
{
ch^=y;
write_char(ch);
break;
}
}
}
}
//画线 LineMode 为直线的类型:水平,垂直,普通
void Line(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE LineModel )
{
BYTE k,x,y;
if (Xbegin == Xend)
{ for( y = Ybegin ;y <= Yend; y++ ) //在x,Ybegin处画线
Pixel(Xbegin,y,LineModel); //垂直线
}
else if (Ybegin == Yend )
{ for( x = Xbegin ;x <= Xend ; x++ ) //在Xbegin,y处画线
Pixel(x,Ybegin,LineModel); //水平线
}
else
{
k = (Yend - Ybegin)/(Xend - Xbegin) ;
for( x = Xbegin ;x <= Xend ; x++ )
{
y = k*x;
Pixel(x,y,LineModel);
//在x,y处画线
}
}
}
void Line1(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE LineModel)
{
BYTE x,y;
BYTE col=Xbegin;
BYTE row=Ybegin;
if (Xbegin == Xend)
{ for( y = Ybegin ;y <= Yend; y++ ) //在x,Ybegin处画线
{
Pixel(Xbegin,y,LineModel); //垂直线
}
}
else if (Ybegin == Yend )
{ for( x = Xbegin ;x <= Xend ; x++ ) //在Xbegin,y处画线
Pixel(x,Ybegin,LineModel); //水平线
}
else
{
register BYTE t;
BYTE xerr=0,yerr=0,delta_x,delta_y,distance;
signed char incx,incy;
/* compute the distance in both directions*/
delta_x=Xend-col;
delta_y=Yend-row;
/* compute the direction of the increment ,
an increment of "0" means either a vertical or horizontal lines */
if(delta_x>0) incx=1;
else if( delta_x==0 ) incx=0;
else incx=-1;
if(delta_y>0) incy=1;
else if( delta_y==0 ) incy=0;
else incy=-1;
/* determine which distance is greater */
delta_x = abs( delta_x );
delta_y = abs( delta_y );
if( delta_x > delta_y ) distance=delta_x;
else distance=delta_y;
/* draw the line*/
for( t=0;t <= distance+1; t++ )
{
Pixel(col,row,LineModel);
xerr += delta_x ;
yerr += delta_y ;
if( xerr > distance )
{
xerr-=distance;
col+=incx;
}
if( yerr > distance )
{
yerr-=distance;
row+=incy;
}
}
}
}
void Box(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE BoxModel,BYTE FillType)
{
BYTE x;
switch(BoxModel)
{
case BoxModel_NoBox :
{
switch(FillType)
{
case FillType_Clear:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
break;
}
case FillType_Fill:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
break;
}
case FillType_Not:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
break;
}
case FillType_NoFill:
break;
}
break;
}
case BoxModel_Draw :
{
switch(FillType)
{
case FillType_Clear:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
break;
}
case FillType_Fill:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
break;
}
case FillType_Not:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
break;
}
case FillType_NoFill:
break;
}
break;
}
case BoxModel_Not :
{
switch(FillType)
{
case FillType_Clear:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
break;
}
case FillType_Fill:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
break;
}
case FillType_Not:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
break;
}
case FillType_NoFill:
break;
}
break;
}
case BoxModel_Clear :
{
switch(FillType)
{
case FillType_Clear:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
break;
}
case FillType_Fill:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
break;
}
case FillType_Not:
{
for(x=Xbegin+1 ; x<Xend ; x++)
Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
break;
}
case FillType_NoFill:
break;
}
break;
}
}
Line1(Xbegin,Ybegin,Xend,Ybegin,BoxModel);
Line1(Xbegin,Ybegin,Xbegin,Yend,BoxModel);
Line1(Xbegin,Yend,Xend,Yend,BoxModel);
Line1(Xend,Ybegin,Xend,Yend,BoxModel);
}
void Window(char X,char Y,char Width,char Height)
{
Box(X+6,Y+6,X+Width+6,Y+Height+6,BoxModel_NoBox,FillType_Fill); //黑色阴影
Box(X,Y,Width+X,Height+Y,BoxModel_Draw,FillType_Clear); //画框框
}
void ELS_dot(BYTE x, BYTE y, BYTE mode)/* 构造俄罗斯方块的画点函数 */
{
BYTE dx, dy;
dx = x*4 + 4; /* 抽象方块显示区域(6, 34, 57, 110) */
dy = y*4 + 32;
Box(dx, dy, dx+3, dy+3, mode,FillType_Fill); /* 以 mode 方式画方块点 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -