[屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 添加字库,显示文字

      之前已开箱拆解了开发板,需要看内部的请跳转到【SWM166-SPI-Y1.28C1测评】+开箱及拆解,https://bbs.21ic.com/icview-3343100-1-1.html这次先把内部的图片更新几张看看,打开
 


红色圈圈内的一定都要选中,不然不会更新,之前弄了好久点击更新并没开始,后来发现最上面的图片路径也要选中,还有就是一定要好一点的串口工具,不然也更新不了。更新后看看效果
 


这样就能显示自已上传的图片了,可光有图片并不爽,还得要它显示几个文字看看,于是网上逛了一圈,下到了GC9A01的驱动源码,并把里面的几个函数移植了过来,看代码

复制


/******************************************************************************

      函数说明:显示单个字符

      入口数据:x,y显示坐标

                num 要显示的字符

                fc 字的颜色

                bc 字的背景色

                sizey 字号

                mode:  0非叠加模式  1叠加模式

      返回值:  无

******************************************************************************/

void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)

{

        uint8_t temp,sizex,t,m=0;

        uint16_t i,TypefaceNum;//一个字符所占字节大小

        uint16_t x0=x;

        sizex=sizey/2;

        TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;

        num=num-' ';    //得到偏移后的值

        

        adderset(x,x+sizex-1,y,y+sizey-1);  //设置光标位置 



        for(i=0;i<TypefaceNum;i++)

        { 

                if(sizey==12)temp=ascii_1206[num][i];                       //调用6x12字体

                else if(sizey==16)temp=ascii_1608[num][i];                 //调用8x16字体

                else if(sizey==24)temp=ascii_2412[num][i];                 //调用12x24字体

                else if(sizey==32)temp=ascii_3216[num][i];                 //调用16x32字体

                else return;

                for(t=0;t<8;t++)

                {



                        if(!mode)//非叠加模式

                        {

                                if(temp&(0x01<<t))SPI_Write_Data(fc);

                                else SPI_Write_Data(bc);

                                m++;

                                if(m%sizex==0)

                                {

                                        m=0;

                                        break;

                                }

                        }

                        else//叠加模式

                        {

                                if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点

                                x++;

                                if((x-x0)==sizex)

                                {

                                        x=x0;

                                        y++;

                                        break;

                                }

                        }





                }

        }   



}





/******************************************************************************

      函数说明:显示字符串

      入口数据:x,y显示坐标

                *p 要显示的字符串

                fc 字的颜色

                bc 字的背景色

                sizey 字号

                mode:  0非叠加模式  1叠加模式

      返回值:  无

******************************************************************************/

void LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)

{         

        while(*p!='\0')

        {       

                LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);

                x+=sizey/2;

                p++;

        }  

}

/******************************************************************************

      函数说明:显示数字

      入口数据:m底数,n指数

      返回值:  无

******************************************************************************/

uint32_t mypow(uint8_t m,uint8_t n)

{

        uint32_t result=1;         

        while(n--)result*=m;

        return result;

}

/******************************************************************************

      函数说明:显示两位小数变量

      入口数据:x,y显示坐标

                num 要显示小数变量

                len 要显示的位数

                fc 字的颜色

                bc 字的背景色

                sizey 字号

      返回值:  无

******************************************************************************/

void LCD_ShowFloatNum1(uint16_t x,uint16_t y,float num,uint8_t len,uint16_t fc,uint16_t bc,uint8_t sizey)

{                 

        uint8_t t,temp,sizex;

        uint16_t num1;

        sizex=sizey/2;

        num1=num*100;

        for(t=0;t<len;t++)

        {

                temp=(num1/mypow(10,len-t-1))%10;

                if(t==(len-2))

                {

                        LCD_ShowChar(x+(len-2)*sizex,y,'.',fc,bc,sizey,0);

                        t++;

                        len+=1;

                }

                 LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);

        }

}



然后在主函数中调用

复制

LCD_ShowString(20,80,"LCD_Diameter:",RED,WHITE,32,0);

文字是显示出来了,但颜色对不上啊,给大家看看图片
 


 


我要是显示的是红字白底,结果是黑字蓝底,这是怎么回事?知道的朋友说说原因?
颜色定义在这里

//画笔颜色

#define WHITE                  0xFFFF

#define BLACK                  0x0000          

#define BLUE                    0x001F  

#define BRED             0XF81F

#define GRED                                0XFFE0

#define GBLUE                               0X07FF

#define RED                    0xF800

#define MAGENTA                0xF81F

#define GREEN                  0x07E0

#define CYAN                   0x7FFF

#define YELLOW                 0xFFE0

#define BROWN                              0XBC40 //棕色

#define BRRED                              0XFC07 //棕红色

#define GRAY                               0X8430 //灰色

#define DARKBLUE               0X01CF        //深蓝色

#define LIGHTBLUE               0X7D7C        //浅蓝色  

#define GRAYBLUE                0X5458 //灰蓝色

#define LIGHTGREEN              0X841F //浅绿色

#define LGRAY                              0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)

#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)



为什么颜色不对呢?是什么地方搞错了呢?哪位大神指点一下!
---------------------
作者:stb988
链接:https://bbs.21ic.com/icview-3344732-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值