⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_api.h

📁 采用T6963显示的12864液晶C语言程序
💻 H
📖 第 1 页 / 共 2 页
字号:
}
/***********************************************/
/* 画点                                        */
/***********************************************/
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 + -