📄 lcd_api.h
字号:
}
/***********************************************/
/* 画点 */
/***********************************************/
void point(uchar x,uchar y,uchar s)
{ uchar x1;
x1=x>>3; //取Y方向分页地址
fnSetPos(y,x1); //起点定位
//x1=turnf[x & 0x07];
x1=0xf0 | (7-(x&0x07)) | s; //字节内位置计算
fnPR12(x1); //画上屏幕,S显示属性8画点,0擦除点
}
/***********************************************/
/*画线,任意方向的斜线,直线数学方程aX+bY=1 */
/***********************************************/
void Linexy(uchar x0,uchar y0,uchar xt,uchar yt,uchar s)
{ register uchar t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x=xt-x0;
delta_y=yt-y0;
uRow=x0;
uCol=y0;
if(delta_x>0) incx=1;
else if(delta_x==0) incx=0;
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0) incy=1;
else if(delta_y==0) incy=0;
else {incy=-1;delta_y=-delta_y;}
if(delta_x>delta_y) distance=delta_x;
else distance=delta_y;
for(t=0;t<=distance+1;t++)
{
point(uRow,uCol,s);
xerr+=delta_x;
yerr+=delta_y;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}
/***********************************************/
/* 画圆 */
/***********************************************/
void circle(uchar ox,uchar oy,uchar rx,uchar s)
{
unsigned int xx,rr,xt,yt,rs,row,col;
yt=rx;
rr=rx*rx+1;
rs=(yt+(yt>>1))>>1;
for(xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while((yt*yt)>(rr-xx)) yt--;
row=ox+xt;
col=oy-yt;
point(row,col,s);
row=ox-xt;
point(row,col,s);
col=oy+yt;
point(row,col,s);
row=ox+xt;
point(row,col,s);
row=ox+yt;
col=oy-xt;
point(row,col,s);
row=ox-yt;
point(row,col,s);
col=oy+xt;
point(row,col,s);
row=ox+yt;
point(row,col,s);
}
}
/***********************************************/
/* ASCII(8*16)及汉字(16*16)显示函数 */
/***********************************************/
uchar dprintf(uchar x,uchar y,char *ptr)
{
char c1,c2,cdata;
uchar i,j,ulen,urow,ucol;
uint k;
ulen=0;
i=0;
urow=y;
ucol=x;
fnSetPos(urow*16,ucol); //起点定位
while(ptr[ulen]!=0) //探测字串长度
{ ulen++; };
while(i<ulen)
{
c1=ptr[i];
c2=ptr[i+1];
urow=fnGetRow();
ucol=fnGetCol();
if(c1>=0) // ASCII
{
for(j=0;j<16;j++) //写16行
{
fnPR12(LC_AUT_WR); // 写数据(命令)
if (c1 >= 0x20)
{
if( j < (16-ASC_CHR_HEIGHT) )
fnPR13(0x00); // 写数据0输出空
else
fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
fnPR13(cdata);
fnPR12(LC_AUT_OVR); //写数据结束
fnSetPos(urow+j+1,ucol);
}
if(c1 != BS) // 非退格
ucol++; // 列数加1
}
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<sizeof(GB_16[0].Msk)/2;k++)
{
fnSetPos(urow+k,ucol);
fnPR12(LC_AUT_WR); //写数据
if(j<sizeof(GB_16)/sizeof(GB_16[0]))
{
fnPR13(GB_16[j].Msk[k*2]);
fnPR13(GB_16[j].Msk[k*2+1]);
}
else //未找到该字
{
if(k<sizeof(GB_16[0].Msk)/4)
{
fnPR13(0x00);
fnPR13(0x00);
}
else
{
fnPR13(0xff);
fnPR13(0xff);
}
}
fnPR12(LC_AUT_OVR);
}
ucol+=2;
i++;
};
if(ucol>=16) //光标后移
{
urow+=16;
if(urow<0x80)
urow-=16;
else
{
urow=0;
ucol=0;
}
}
fnSetPos(urow,ucol);
i++;
}
return ulen;
}
bit writestring(uint add_pos,char *ptr,uint n)
{
uint i;
fnPR1(LC_ADD_POS,add_pos&0xff,add_pos>>8);
fnPR12(LC_AUT_WR); // 自动写命令
for(i=0;i<n;i++)
fnPR13(ptr[i]); // 写数据
fnPR12(LC_AUT_OVR); //写数据结束
return 1;
}
bit textdisplay(uchar x,uchar y,char *ptr,uint n) //只能是字母,数字
{
uint i=TEXT_ADDR+x+16*y;
fnPR1(LC_ADD_POS,i&0xff,(i>>8)&0xff);
fnPR12(LC_AUT_WR); // 自动写命令
for(i=0;i<n;i++)
{
if((ptr[i]>='0'&&ptr[i]<='9')||(ptr[i]>='a'&&ptr[i]<='z')||(ptr[i]>='A'&&ptr[i]<='Z'))
fnPR13(ptr[i]-0x20);
else if(ptr[i]=='.') fnPR13(0x0e);
else if(ptr[i]==',') fnPR13(0x0c);
else if(ptr[i]=='!') fnPR13(0x01);
else if(ptr[i]==0x20) fnPR13(0x00);
else return 0;
}
fnPR12(LC_AUT_OVR); //写数据结束
return 1;
}
/*显示数字*/
void display_num(uchar x,uchar y,uchar i)
{ if(i==0)
textdisplay(x,2*y+1,"0",1);
else if(i==1)
textdisplay(x,2*y+1,"1",1);
else if(i==2)
textdisplay(x,2*y+1,"2",1);
else if(i==3)
textdisplay(x,2*y+1,"3",1);
else if(i==4)
textdisplay(x,2*y+1,"4",1);
else if(i==5)
textdisplay(x,2*y+1,"5",1);
else if(i==6)
textdisplay(x,2*y+1,"6",1);
else if(i==7)
textdisplay(x,2*y+1,"7",1);
else if(i==8)
textdisplay(x,2*y+1,"8",1);
else if(i==9)
textdisplay(x,2*y+1,"9",1);
else if(i==10)
textdisplay(x,2*y+1,"A",1);
else if(i==11)
textdisplay(x,2*y+1,"B",1);
else if(i==12)
textdisplay(x,2*y+1,"C",1);
else if(i==13)
textdisplay(x,2*y+1,"D",1);
else if(i==14)
textdisplay(x,2*y+1,"E",1);
else if(i==15)
textdisplay(x,2*y+1,"F",1);
}
bit hexdisplay(uchar x,uchar y,char *ptr,uint n)
{
uint i;
for(i=0;i<n;i++)
{
display_num(x+2*i,y,ptr[i]>>4&0x0f);
display_num(x+2*i+1,y,ptr[i]&0x0f);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -