打印
[屏驱相关]

【SWM166-SPI-Y1.28C1测评】+ 添加字库,显示文字

[复制链接]
542|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stb988|  楼主 | 2023-11-29 21:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 stb988 于 2023-11-29 21:37 编辑

       之前已开箱拆解了开发板,需要看内部的请跳转到【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 //浅棕蓝色(选择条目的反色)


为什么颜色不对呢?是什么地方搞错了呢?哪位大神指点一下!

使用特权

评论回复

相关帖子

沙发
lulugl| | 2023-11-30 09:43 | 只看该作者
看看一下写进去字节的顺序。或者是用逻辑分析仪抓一下正常的时序。对比一下就知道了。

使用特权

评论回复
板凳
小小蚂蚁举千斤| | 2023-11-30 21:18 | 只看该作者
应该是顺序问题

使用特权

评论回复
地板
stb988|  楼主 | 2023-12-1 09:21 | 只看该作者
已经找到原因了,少写了一个字节进去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

255

帖子

1

粉丝