📄 show.fun
字号:
return 0; // 返回0成功
}
uchar fnPR2(void) // 读数据
{
if(fnST01() == 0)
return 1;
return LCMDW;
}
void fnSetPos(uchar urow, uchar ucol) //设置当前地址
{
uint iPos;
iPos = urow * 20 + ucol;
fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
gCurRow = urow;
gCurCol = ucol;
}
void cursor(uchar uRow, uchar uCol) //设置当前显示行、列
{
fnSetPos(uRow * 16, uCol);
}
void at(unsigned char x,unsigned char y)/*设定文本x,y值*/
{
uint iPos; //地址
iPos = x + y* 20;
fnPR1(LC_ADD_POS,iPos&0xff,iPos/256);
tCurRow = x;
tCurCol = y;
}
// 清屏
void cls(void)
{
uint i;
fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针
fnPR12(LC_AUT_WR); // 自动写
for(i=0;i<0x2000;i++)
{
fnST3();
fnPR13(0x00); // 写数据
}
fnPR12(LC_AUT_OVR); // 自动写结束
fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
gCurRow = 0; // 置地址指针存储变量
gCurCol = 0;
}
// LCM 初始化
char fnLCMInit(void)
{
reset=0;
reset=1;
fnPR1(LC_TXT_STP,0x00,0x00); // 文本显示区首地址
fnPR1(LC_TXT_WID,0x14,0x00); // 文本显示区宽度
fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
fnPR1(LC_GRH_WID,0x14,0x00); // 图形显示区宽度
fnPR11(LC_CGR_POS,CGRAMSTART >> 11);
fnPR12(LC_CUR_SHP | 0x01); // 光标形状
fnPR12(LC_MOD_OR); // 显示方式设置
fnPR12(LC_DIS_SW |0x08);
grhome = GRSTART;
txthome = TXTSTART;
return 0;
}
void charout(uchar *str)
{
uchar ch,len,i,uRow,uCol ;
len=strlen(str);
i=0;
uRow = tCurRow;
uCol = tCurRow;
at(uCol,uRow);
while(i<len)
{
ch=str[i]-0x20;
fnPR11(LC_INC_WR,ch);
i++;
}
}
// ASCII及汉字显示函数
uchar dprintf(uchar x,uchar y,char *fmt)
{
char c1,c2,cData;
uchar i=0,j,uLen;
uchar k;
uLen=strlen(fmt);
while(i<uLen)
{
c1 = fmt[i];
c2 = fmt[i+1];
fnSetPos(y,x/8);
if(c1 >= 0)
{
// ASCII
if(c1 < 0x20)
{
switch(c1)
{
case CR:
case LF: // 回车或换行
i++;
x=0;
if(y < 112)y+=HZ_CHR_HEIGHT;
continue;
case BS: // 退格
i++;
if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
cData = 0x00;
break;
}
}
for(j=0;j<ASC_CHR_HEIGHT;j++)
{
if(c1 >= 0x1f)
{
cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
fnSetPos(y+j,x/8);
if((x%8)==0)
{
fnPR12(LC_AUT_WR); // 写数据
fnPR13(cData);
fnPR12(LC_AUT_OVR);
}
else
OutToLCD(cData,x,y+j);
}
fnSetPos(y+j,x/8);
}
if(c1 != BS) // 非退格
x+=ASC_CHR_WIDTH;
}
else
{ // 中文
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
{
if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
break;
}
for(k=0;k<HZ_CHR_HEIGHT;k++)
{
fnSetPos(y+k,x/8);
if(j < sizeof(GB_16)/sizeof(GB_16[0]))
{
c1=GB_16[j].Msk[k*2];
c2=GB_16[j].Msk[k*2+1];
}
else
c1=c2=0;
if((x%8)==0)
{
fnPR12(LC_AUT_WR);
fnPR13(c1);
fnPR12(LC_AUT_OVR);
}
else
OutToLCD(c1,x,y+k);
if(((x+2+HZ_CHR_WIDTH/2)%8)==0)
{
fnPR12(LC_AUT_WR);
fnPR13(c2);
fnPR12(LC_AUT_OVR);
}
else
OutToLCD(c2,x+2+HZ_CHR_WIDTH/2,y+k);
}
x+=HZ_CHR_WIDTH;
i++;
}
i++;
}
return uLen;
}
void OutToLCD(uchar Dat,uchar x,uchar y)
{
uchar uData1,uData2,ux,a,b;
a=8-(x%8);b=x%8;
fnSetPos(y,x/8);
fnPR12(LC_AUT_RD); // 读数据
uData1=fnPR2();
uData2=fnPR2();
fnPR12(LC_AUT_OVR);
fnSetPos(y,x/8);
uData1&=~MSK1[a];
ux=Dat&MSK2[a];
ux>>=b;
uData1=uData1|ux;
ux=~MSK2[b];
uData2&=ux;
ux=MSK1[b];
ux=Dat&ux;
ux<<=a;
uData2=uData2|ux;
fnPR12(LC_AUT_WR); // 写数据
fnPR13(uData1);
fnPR13(uData2);
fnPR12(LC_AUT_OVR);
}
void SetShowMode(uchar newShowModeSW) //设置为显示模式
{
ShowModeSW=newShowModeSW;
fnPR12(LC_DIS_SW | newShowModeSW);
}
/**********************************
//= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
//= 功 能: 在指定坐标位置显示一个点
//= 参 数: 坐标,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
//= Mode 1:显示 0:清除该点
**********************************/
void Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
{
unsigned char StartAddr;
unsigned char dat;
StartAddr=7-(PointX%8);
dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
if(Mode) dat=dat|0x08;
fnSetPos(PointY,PointX/8);
fnPR12(LC_BIT_OP|dat); // 写数据
}
/**********************************
//= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
//= 功 能: 划线函数
//= 参 数: 坐标1,坐标2,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 其它:显示点阵不超过255*255
/**********************************/
void line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2, bit Mode)
{
unsigned char x,y;
float k,b;
if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
{
k=((float)y2-y1) / ((float)x2-x1) ;
b=y1-k*x1;
if( x1 <= x2 )
{
for(x=x1;x<=x2;x++)
{
y=(uchar)(k*x+b);
Pixel(x, y, Mode);
}
}
else
{
for(x=x2;x<=x1;x++)
{
y=(uchar)(k*x+b);
Pixel(x, y, Mode);
}
}
}
else // abs(y1-y2) > abs(x1-x2) |K|>1
{
k=((float)x2-x1) / ((float)y2-y1) ;
b=x1-k*y1;
if( y1 <= y2 )
{
for(y=y1;y<=y2;y++)
{
x=(uchar)(k*y+b);
Pixel( x , y,Mode );
}
}
else
{
for(y=y2;y<=y1;y++)
{
x=(uchar)(k*y+b);
Pixel( x , y,Mode );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -