找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2327|回复: 3
打印 上一主题 下一主题
收起左侧

求教怎样在1.8寸tftlcd上显示变量的数值

[复制链接]
跳转到指定楼层
楼主
ID:562680 发表于 2020-2-25 21:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
官方提供的数据

以下为guan'fang
u16 LCD_BGR2RGB(u16 c)
{
  u16  r,g,b,rgb;   
  b=(c>>0)&0x1f;
  g=(c>>5)&0x3f;
  r=(c>>11)&0x1f;         
  rgb=(b<<11)+(g<<5)+(r<<0);                 
  return(rgb);

}




void Gui_Circle(u16 X,u16 Y,u16 R,u16 fc)
{//BresenhamËã·¨
    unsigned short  a,b;
    int c;
    a=0;
    b=R;
    c=3-2*R;
    while (a<b)
    {
        Gui_DrawPoint(X+a,Y+b,fc);     //        7
        Gui_DrawPoint(X-a,Y+b,fc);     //        6
        Gui_DrawPoint(X+a,Y-b,fc);     //        2
        Gui_DrawPoint(X-a,Y-b,fc);     //        3
        Gui_DrawPoint(X+b,Y+a,fc);     //        8
        Gui_DrawPoint(X-b,Y+a,fc);     //        5
        Gui_DrawPoint(X+b,Y-a,fc);     //        1
        Gui_DrawPoint(X-b,Y-a,fc);     //        4

        if(c<0) c=c+4*a+6;
        else
        {
            c=c+4*(a-b)+10;
            b-=1;
        }
       a+=1;
    }
    if (a==b)
    {
        Gui_DrawPoint(X+a,Y+b,fc);
        Gui_DrawPoint(X+a,Y+b,fc);
        Gui_DrawPoint(X+a,Y-b,fc);
        Gui_DrawPoint(X-a,Y-b,fc);
        Gui_DrawPoint(X+b,Y+a,fc);
        Gui_DrawPoint(X-b,Y+a,fc);
        Gui_DrawPoint(X+b,Y-a,fc);
        Gui_DrawPoint(X-b,Y-a,fc);
    }
       
}
//»-Ïßoˉêy£¬ê1óÃBresenham »-ÏßËã·¨
void Gui_DrawLine(u16 x0, u16 y0,u16 x1, u16 y1,u16 Color)   
{
int dx,             // difference in x's
    dy,             // difference in y's
    dx2,            // dx,dy * 2
    dy2,
    x_inc,          // amount in pixel space to move during drawing
    y_inc,          // amount in pixel space to move during drawing
    error,          // the discriminant i.e. error i.e. decision variable
    index;          // used for looping       


        Lcd_SetXY(x0,y0);
        dx = x1-x0;//¼ÆËãx¾ààë
        dy = y1-y0;//¼ÆËãy¾ààë

        if (dx>=0)
        {
                x_inc = 1;
        }
        else
        {
                x_inc = -1;
                dx    = -dx;  
        }
       
        if (dy>=0)
        {
                y_inc = 1;
        }
        else
        {
                y_inc = -1;
                dy    = -dy;
        }

        dx2 = dx << 1;
        dy2 = dy << 1;

        if (dx > dy)//x¾ààë′óóúy¾àà룬ÄÇÃ′ÿ¸öxÖáéÏÖ»óDò»¸öμ㣬ÿ¸öyÖáéÏóDèô¸é¸öμã
        {//ÇòÏßμÄμãêyμèóúx¾àà룬òÔxÖáμYÔö»-μã
                // initialize error term
                error = dy2 - dx;

                // draw the line
                for (index=0; index <= dx; index++)//òa»-μÄμãêy2»»á3¬1yx¾ààë
                {
                        //»-μã
                        Gui_DrawPoint(x0,y0,Color);
                       
                        // test if error has overflowed
                        if (error >= 0) //êÇ·ñDèòaÔö¼óy×ø±êÖμ
                        {
                                error-=dx2;

                                // move to next line
                                y0+=y_inc;//Ôö¼óy×ø±êÖμ
                        } // end if error overflowed

                        // adjust the error term
                        error+=dy2;

                        // move to the next pixel
                        x0+=x_inc;//x×ø±êÖμÿ′λ-μãoó¶¼μYÔö1
                } // end for
        } // end if |slope| <= 1
        else//yÖá′óóúxÖᣬÔòÿ¸öyÖáéÏÖ»óDò»¸öμ㣬xÖáèô¸é¸öμã
        {//òÔyÖáÎaμYÔö»-μã
                // initialize error term
                error = dx2 - dy;

                // draw the line
                for (index=0; index <= dy; index++)
                {
                        // set the pixel
                        Gui_DrawPoint(x0,y0,Color);

                        // test if error overflowed
                        if (error >= 0)
                        {
                                error-=dy2;

                                // move to next line
                                x0+=x_inc;
                        } // end if error overflowed

                        // adjust the error term
                        error+=dx2;

                        // move to the next pixel
                        y0+=y_inc;
                } // end for
        } // end else |slope| > 1
}



void Gui_box(u16 x, u16 y, u16 w, u16 h,u16 bc)
{
        Gui_DrawLine(x,y,x+w,y,0xEF7D);
        Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0x2965);
        Gui_DrawLine(x,y+h,x+w,y+h,0x2965);
        Gui_DrawLine(x,y,x,y+h,0xEF7D);
    Gui_DrawLine(x+1,y+1,x+1+w-2,y+1+h-2,bc);
}
void Gui_box2(u16 x,u16 y,u16 w,u16 h, u8 mode)
{
        if (mode==0)        {
                Gui_DrawLine(x,y,x+w,y,0xEF7D);
                Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0x2965);
                Gui_DrawLine(x,y+h,x+w,y+h,0x2965);
                Gui_DrawLine(x,y,x,y+h,0xEF7D);
                }
        if (mode==1)        {
                Gui_DrawLine(x,y,x+w,y,0x2965);
                Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0xEF7D);
                Gui_DrawLine(x,y+h,x+w,y+h,0xEF7D);
                Gui_DrawLine(x,y,x,y+h,0x2965);
        }
        if (mode==2)        {
                Gui_DrawLine(x,y,x+w,y,0xffff);
                Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0xffff);
                Gui_DrawLine(x,y+h,x+w,y+h,0xffff);
                Gui_DrawLine(x,y,x,y+h,0xffff);
        }
}


/**************************************************************************************
1|ÄüÃèêö: ÔúÆáÄ»ÏÔê¾ò»í1ÆeμÄ°′Å¥¿ò
êä    èë: u16 x1,y1,x2,y2 °′Å¥¿ò×óéϽÇoíóòϽÇ×ø±ê
êä    3ö: ÎT
**************************************************************************************/
void DisplayButtonDown(u16 x1,u16 y1,u16 x2,u16 y2)
{
        Gui_DrawLine(x1,  y1,  x2,y1, GRAY2);  //H
        Gui_DrawLine(x1+1,y1+1,x2,y1+1, GRAY1);  //H
        Gui_DrawLine(x1,  y1,  x1,y2, GRAY2);  //V
        Gui_DrawLine(x1+1,y1+1,x1+1,y2, GRAY1);  //V
        Gui_DrawLine(x1,  y2,  x2,y2, WHITE);  //H
        Gui_DrawLine(x2,  y1,  x2,y2, WHITE);  //V
}

/**************************************************************************************
1|ÄüÃèêö: ÔúÆáÄ»ÏÔê¾ò»°¼ÏÂμÄ°′Å¥¿ò
êä    èë: u16 x1,y1,x2,y2 °′Å¥¿ò×óéϽÇoíóòϽÇ×ø±ê
êä    3ö: ÎT
**************************************************************************************/
void DisplayButtonUp(u16 x1,u16 y1,u16 x2,u16 y2)
{
        Gui_DrawLine(x1,  y1,  x2,y1, WHITE); //H
        Gui_DrawLine(x1,  y1,  x1,y2, WHITE); //V
       
        Gui_DrawLine(x1+1,y2-1,x2,y2-1, GRAY1);  //H
        Gui_DrawLine(x1,  y2,  x2,y2, GRAY2);  //H
        Gui_DrawLine(x2-1,y1+1,x2-1,y2, GRAY1);  //V
    Gui_DrawLine(x2  ,y1  ,x2,y2, GRAY2); //V
}


void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s)
{
        unsigned char i,j;
        unsigned short k,x0;
        x0=x;

        while(*s)
        {       
                if((*s) < 128)
                {
                        k=*s;
                        if (k==13)
                        {
                                x=x0;
                                y+=16;
                        }
                        else
                        {
                                if (k>32) k-=32; else k=0;
       
                            for(i=0;i<16;i++)
                                for(j=0;j<8;j++)
                                        {
                                            if(asc16[k*16+i]&(0x80>>j))        Gui_DrawPoint(x+j,y+i,fc);
                                                else
                                                {
                                                        if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc);
                                                }
                                        }
                                x+=8;
                        }
                        s++;
                }
                       
                else
                {
               

                        for (k=0;k<hz16_num;k++)
                        {
                          if ((hz16[k].Index[0]==*(s))&&(hz16[k].Index[1]==*(s+1)))
                          {
                                    for(i=0;i<16;i++)
                                    {
                                                for(j=0;j<8;j++)
                                                        {
                                                            if(hz16[k].Msk[i*2]&(0x80>>j))        Gui_DrawPoint(x+j,y+i,fc);
                                                                else {
                                                                        if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc);
                                                                }
                                                        }
                                                for(j=0;j<8;j++)
                                                        {
                                                            if(hz16[k].Msk[i*2+1]&(0x80>>j))        Gui_DrawPoint(x+j+8,y+i,fc);
                                                                else
                                                                {
                                                                        if (fc!=bc) Gui_DrawPoint(x+j+8,y+i,bc);
                                                                }
                                                        }
                                    }
                                }
                          }
                        s+=2;x+=16;
                }
               
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-2-26 07:56 | 只看该作者
你贴的程序里用Gui_DrawFont_GBK16()函数。
回复

使用道具 举报

板凳
ID:462827 发表于 2020-2-26 09:01 | 只看该作者
void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s)

这个应该就是显示函数,是在x,y坐标开始,以fc为前景色、bc为背景色,显示字符串s。
你可以根据你的屏幕最长能显示多少字符来设置一个字符串,然后用sprintf生成其内容,并用上面这个函数来显示,可以中英文混合并试验,比如:
u8 str[80];
u16 num=666;
sprintf(str,"这是一个数字:%d",num);
Gui_DrawFont_GBK16(0,0,0x00, 0xff, str);
回复

使用道具 举报

地板
ID:229016 发表于 2020-2-26 09:39 | 只看该作者
建议你参考原子的液晶屏例程,他的库函数有函数接口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表