资讯中心
公司新闻
行业动态
技术文章
产品资讯
MORE推荐产品
首页 > 资讯中心 > 技术文章

TFT系列总线型液晶显示器画线函数的编写方法!

作者:瑞祥微电子    点击:832    时间:2010/5/27

 各种波形及部分表格都是通过线段来实现的,本文介绍了一种速度较快的画线程序,适合各种TFT系列总线型液晶显示器。
    对于VTK系列智能型显示器的用户无需掌握本文内容。
/***********************************************
****硬件连接: P00--P07  <===>  D0--D7***
****          /WR     <===>  /WR       **
****          /RD     <===>  /RD      ****
****          P27     <===>  /CS      ****
****          P21     <===>  A1       ****
****           P20     <===>  A0      ****          
************************************************/

#include <reg51.h>
#include <absacc.h>
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]

//声明程序
draw_pixel(unsigned int x,unsigned int y, unsigned char color); //画点
draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2, unsigned char color); //画线

//*************************draw line start**********************
//画线开始
draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2, unsigned char color)
{ unsigned int i1,j1,k1,l1;
int n1=0;
unsigned char temp=0;
if(y2<y1)
    {i1=x1;
    l1=y1;
    x1=x2;
    y1=y2;
    x2=i1;
    y2=l1;}
k1=y2-y1;
if (k1==0)
    {if (x1>x2)
        {i1=x1;
        x1=x2;
        x2=i1;}
     for ( i1=x1;i1<=x2;i1++ )
        draw_pixel(i1,y1,color);
     }
else
     {if(x2>=x1)
         {temp=1;
         j1=x2-x1;}
      else
         j1=x1-x2;
      i1=x1;
      l1=y1;
      draw_pixel(i1,l1,color);
      if(temp&&(k1<=j1))
          while(i1!=x2)
              {if(n1<0)
                  {i1=i1+1;
                  n1=n1+(y2-l1);}
               else
                  {i1=i1+1;
                  l1=l1+1;
                  n1=n1+(y2-l1)-(x2-i1);}
               draw_pixel(i1,l1,color);}
      else if(temp&&(k1>j1))
          while(l1!=y2)
              {j1=x2-i1;
              k1=y2-l1;
              if(n1<0)
                  {i1=i1+1;
                  l1=l1+1;
                  n1=n1+k1-j1;}
              else
                  {l1=l1+1;
                  n1=n1-j1;}
              draw_pixel(i1,l1,color);}
      else if(!temp&&(k1<=j1))
          while(i1!=x2)
              {j1=i1-x2;
              k1=y2-l1;
              if(n1<0)
                  {i1=i1-1;
                  n1=n1+k1;}
              else
                  {i1=i1-1;
                  l1=l1+1;
                  n1=n1+k1-j1;}
              draw_pixel(i1,l1,color);}
      else if(!temp &&(k1>j1))
          while(l1!=y2)
              {j1=i1-x2;
              k1=y2-l1;
              if(n1<0)
                  {i1=i1-1;
                  l1=l1+1;
                  n1=n1+k1-j1;}
              else
                  {l1=l1+1;
                  n1=n1-j1;}
                  draw_pixel(i1,l1,color);}
               }
      }
draw_pixel(unsigned int x,unsigned int y, unsigned char color)
{ unsigned char temp,i;
Y_ADDR = y%256;//行低位地址
Y_ADDR = y/256;//行高位地址
X_ADDR = x%256;//列低位地址
X_ADDR = x/256;//列高位地址
DAT=color;}
//画线结束
//************draw line end********************


//调用举例
main()
{
draw_line(0,0,150,150,0xe0);//红色(0,0)->(150,150)
}

以上资讯由深圳LCM厂家——瑞祥微电子搜集整理。


本文由深圳LCDLCM液晶模块液晶显示屏液晶模组点阵模块笔段模块液晶面板厂家瑞祥微电子搜集整理,转载请注明出处,如有侵权请联系删除,Q:381867214!
收缩
  • 电话咨询

  • 075527212675
网页聊天
live chat