OpenEdv-开源电子网

 找回密码
 立即注册
查看: 35095|回复: 304
打印 上一主题 下一主题

最新 LVGL_V7.0及以上版本添加内、外部中文字体方法

  [复制链接]

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
跳转到指定楼层
楼主
发表于 2020-8-1 15:22:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xcc521 于 2020-8-3 08:39 编辑

1.内部字体添加方法,限制于FLASH的大小,所以只能放少许的字体,当然对于H7外扩SPI FLASH运行程序例外
LVGL FontTool V0.3,选择适当的字体




另存为.c复制到LVGL工程文件夹,必要时添加路径



lvgl.h处添加用户字体声明



除非你重新设置主题的字体选项,不然就在这里改变默认的字体
使用方法如下:

  1. static void slider_event_cb(lv_obj_t * obj, lv_event_t event)
  2. {
  3.     char buf[32];
  4.     if(obj == slider_speed_set)
  5.     {
  6.         if(event == LV_EVENT_VALUE_CHANGED)
  7.         {
  8.             Speed_Set = lv_slider_get_value(obj);
  9.             sprintf(buf,"设定速度:%4d",Speed_Set);
  10.             lv_label_set_text(label_speed_set,buf);
  11.         }
  12.     }
  13. }
复制代码

必须保证程序是UTF-8编码

2.外部字体设置方法,例如SPI FLASH

同样的方法,添加所有文字或者常用,生成外部bin文件和.c文件





bin文件拷贝到外置SD卡的SYSTEM/LVGLFONT文件夹
fontupd.c文件增加字体路径声明

  1. /* 字库存放在磁盘中的路径 */
  2. const char * GBK24_PATH="/SYSTEM/FONT/GBK24.FON";           /* GBK24的存放位置 */
  3. const char * GBK16_PATH="/SYSTEM/FONT/GBK16.FON";           /* GBK16的存放位置 */
  4. const char * GBK12_PATH="/SYSTEM/FONT/GBK12.FON";           /* GBK12的存放位置 */

  5. const char * UNIGBK_PATH="/SYSTEM/FONT/UNIGBK.BIN";         /* UNIGBK.BIN的存放位置 */
  6. const char * LVGL_12_PATH="/SYSTEM/LVGLFONT/myFont12.bin";  /* UNIGBK.BIN的存放位置 1,014,611 字节 */
  7. const char * LVGL_18_PATH="/SYSTEM/LVGLFONT/myFont18.bin";  /* UNIGBK.BIN的存放位置 1,732,774 字节 */
  8. const char * LVGL_24_PATH="/SYSTEM/LVGLFONT/myFont24.bin";  /* UNIGBK.BIN的存放位置 2,814,026 字节 */
复制代码
字体信息结构体增加位置和大小成员变量
  1. __packed typedef struct
  2. {
  3.     uint8_t fontok; /* 字库存在标志,0XAA,字库正常;其他,字库不存在 */
  4.     uint32_t ugbkaddr; /* unigbk的地址 */
  5.     uint32_t ugbksize; /* unigbk的大小 */
  6.     uint32_t f12addr; /* gbk12地址 */
  7.     uint32_t gbk12size; /* gbk12的大小 */
  8.     uint32_t f16addr; /* gbk16地址 */
  9.     uint32_t gbk16size; /* gbk16的大小 */
  10.     uint32_t f24addr; /* gbk24地址 */
  11.     uint32_t gkb24size; /* gbk24的大小 */

  12.     uint32_t lvgl_12addr; /* gbk24地址 */
  13.     uint32_t lvgl_12size; /* gbk24的大小 */
  14.     uint32_t lvgl_18addr; /* gbk24地址 */

  15.     uint32_t lvgl_18size; /* gbk24的大小 */
  16.     uint32_t lvgl_24addr; /* gbk24地址 */
  17.     uint32_t lvgl_24size; /* gbk24的大小 */
  18. } _font_info;
复制代码
然后是更新的过程,添加相应的步骤即可
完整程序如下
  1. /* 字库区域占用的总扇区数大小
  2. #define FONTSECSIZE     2560
  3. /* 字库存放起始地址 */
  4. #define FONTINFOADDR    1024*1024*6

  5. /* 用来保存字库基本信息,地址,大小等 */
  6. _font_info ftinfo;

  7. /* 字库存放在磁盘中的路径 */
  8. const char * GBK24_PATH="/SYSTEM/FONT/GBK24.FON";           /* GBK24的存放位置 */
  9. const char * GBK16_PATH="/SYSTEM/FONT/GBK16.FON";           /* GBK16的存放位置 */
  10. const char * GBK12_PATH="/SYSTEM/FONT/GBK12.FON";           /* GBK12的存放位置 */
  11. const char * UNIGBK_PATH="/SYSTEM/FONT/UNIGBK.BIN";         /* UNIGBK.BIN的存放位置 */
  12. const char * LVGL_12_PATH="/SYSTEM/LVGLFONT/myFont12.bin";  /* UNIGBK.BIN的存放位置 1,014,611 字节 */
  13. const char * LVGL_18_PATH="/SYSTEM/LVGLFONT/myFont18.bin";  /* UNIGBK.BIN的存放位置 1,732,774 字节 */
  14. const char * LVGL_24_PATH="/SYSTEM/LVGLFONT/myFont24.bin";  /* UNIGBK.BIN的存放位置 2,814,026 字节 */

  15. /**
  16. * @brief       显示当前字体更新进度
  17. * @param       x, y    : 坐标
  18. * @param       size    : 字体大小
  19. * @param       totsize : 整个文件大小
  20. * @param       pos     : 当前文件指针位置
  21. * @param       color   : 字体颜色
  22. * @retval      无
  23. */
  24. uint32_t fupd_prog(uint16_t x,uint16_t y,uint8_t size,uint32_t fsize,uint32_t pos)
  25. {
  26.     float prog;
  27.     uint8_t t=0XFF;
  28.     prog=(float)pos/fsize;
  29.     prog*=100;
  30.     if(t!=prog)
  31.     {
  32.         lcd_show_string(x+3*size/2,y,240,320,size,"%",g_point_color);
  33.         t=prog;
  34.         if(t>100)t=100;
  35.         lcd_show_num(x,y,t,3,size,g_point_color);/* 显示数值 */
  36.     }
  37.     return 0;
  38. }

  39. /**
  40. * @brief       更新某一个字库
  41. * @param       x, y    : 提示信息的显示地址
  42. * @param       size    : 提示信息字体大小
  43. * @param       fpath   : 字体路径
  44. * @param       fx      : 更新的内容
  45. *   @arg                 0, ungbk;
  46. *   @Arg                 1, gbk12;
  47. *   @arg                 2, gbk16;
  48. *   @arg                 3, gbk24;
  49. *   @arg                 4, gbk32;
  50. * @param       color   : 字体颜色
  51. * @retval      0, 成功; 其他, 错误代码;
  52. */
  53. uint8_t updata_fontx(uint16_t x,uint16_t y,uint8_t size,char *fxpath,uint8_t fx)
  54. {
  55.     uint32_t flashaddr=0;
  56.     FIL * fftemp;
  57.     uint8_t *tempbuf;
  58.     uint8_t res;
  59.     uint16_t bread;
  60.     uint32_t offx=0;
  61.     uint8_t rval=0;
  62.     fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));    /* 分配内存 */
  63.     if(fftemp==NULL)rval=1;
  64.     tempbuf=mymalloc(SRAMIN,4096);                /* 分配4096个字节空间 */
  65.     if(tempbuf==NULL)rval=1;
  66.     res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ);
  67.     if(res)rval=2;/* 打开文件失败 */
  68.     if(rval==0)
  69.     {
  70.         switch(fx)
  71.         {
  72.         case 0:                                                /* 更新UNIGBK.BIN */
  73.             ftinfo.ugbkaddr=FONTINFOADDR+sizeof(ftinfo);    /* 信息头之后,紧跟UNIGBK转换码表 */
  74.             ftinfo.ugbksize=fftemp->fsize;            /* UNIGBK大小 */
  75.             flashaddr=ftinfo.ugbkaddr;
  76.             break;
  77.         case 1:
  78.             ftinfo.f12addr=ftinfo.ugbkaddr+ftinfo.ugbksize;    /* UNIGBK之后,紧跟GBK12字库 */
  79.             ftinfo.gbk12size=fftemp->fsize;            /* GBK12字库大小 */
  80.             flashaddr=ftinfo.f12addr;                        /* GBK12的起始地址 */
  81.             break;
  82.         case 2:
  83.             ftinfo.f16addr=ftinfo.f12addr+ftinfo.gbk12size;    /* GBK12之后,紧跟GBK16字库 */
  84.             ftinfo.gbk16size=fftemp->fsize;            /* GBK16字库大小 */
  85.             flashaddr=ftinfo.f16addr;                        /* GBK16的起始地址 */
  86.             break;
  87.         case 3:
  88.             ftinfo.f24addr=ftinfo.f16addr+ftinfo.gbk16size;    /* GBK16之后,紧跟GBK24字库 */
  89.             ftinfo.gkb24size=fftemp->fsize;                    /* GBK24字库大小 */
  90.             flashaddr=ftinfo.f24addr;                        /* GBK24的起始地址 */
  91.             break;
  92.         case 4:
  93.             ftinfo.lvgl_12addr=ftinfo.f24addr+ftinfo.gkb24size;
  94.             ftinfo.lvgl_12size=fftemp->fsize;
  95.             flashaddr=ftinfo.lvgl_12addr;
  96.             break;
  97.         case 5:
  98.             ftinfo.lvgl_18addr=ftinfo.lvgl_12addr+ftinfo.lvgl_12size;
  99.             ftinfo.lvgl_18size=fftemp->fsize;
  100.             flashaddr=ftinfo.lvgl_18addr;
  101.             break;
  102.         case 6:
  103.             ftinfo.lvgl_24addr=ftinfo.lvgl_18addr+ftinfo.lvgl_18size;
  104.             ftinfo.lvgl_24size=fftemp->fsize;
  105.             flashaddr=ftinfo.lvgl_24addr;
  106.             break;
  107.         }

  108.         while(res==FR_OK)/* 循环执行 */
  109.         {
  110.             res=f_read(fftemp,tempbuf,4096,(UINT *)&bread);     /* 读取数据 */
  111.             if(res!=FR_OK)break;                                /* 执行错误 */
  112.             w25qxx_write(tempbuf,offx+flashaddr,4096);          /* 从0开始写入4096个数据 */
  113.             offx+=bread;
  114.             fupd_prog(x,y,size,fftemp->fsize,offx);             /* 进度显示 */
  115.             if(bread!=4096)break;                               /* 读完了 */
  116.         }
  117.         f_close(fftemp);
  118.     }
  119.     myfree(SRAMIN,fftemp);    /* 释放内存 */
  120.     myfree(SRAMIN,tempbuf);    /* 释放内存 */
  121.     return res;
  122. }

  123. /**
  124. * @brief       更新字体文件
  125. *   @note      所有字库一起更新(UNIGBK,GBK12,GBK16,GBK24,GBK32)
  126. * @param       x, y    : 提示信息的显示地址
  127. * @param       size    : 提示信息字体大小
  128. * @param       src     : 字库来源磁盘
  129. *   @arg                 "0:", SD卡;
  130. *   @Arg                 "1:", FLASH盘
  131. *   @arg                 "2:", U盘
  132. * @param       color   : 字体颜色
  133. * @retval      0, 成功; 其他, 错误代码;
  134. */
  135. uint8_t update_font(uint16_t x,uint16_t y,uint8_t size,char *src)
  136. {
  137.     char *pname;
  138.     uint32_t *buf;
  139.     uint8_t res=0;
  140.     uint16_t i,j;
  141.     FIL *fftemp;
  142.     uint8_t rval=0;
  143.     res=0XFF;
  144.     ftinfo.fontok=0XFF;
  145.     pname=mymalloc(SRAMIN,100);    /* 申请100字节内存 */
  146.     buf=mymalloc(SRAMIN,4096);    /* 申请4K字节内存 */
  147.     fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));    /* 分配内存 */
  148.     if(buf==NULL||pname==NULL||fftemp==NULL)
  149.     {
  150.         myfree(SRAMIN,fftemp);
  151.         myfree(SRAMIN,pname);
  152.         myfree(SRAMIN,buf);
  153.         return 5;    /* 内存申请失败 */
  154.     }
  155.     /* 先查找文件是否正常 */
  156.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  157.     strcat((char*)pname,(char*)UNIGBK_PATH);
  158.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  159.     if(res)rval|=1<<4;/* 打开文件失败 */
  160.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  161.     strcat((char*)pname,(char*)GBK12_PATH);
  162.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  163.     if(res)rval|=1<<5;/* 打开文件失败 */
  164.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  165.     strcat((char*)pname,(char*)GBK16_PATH);
  166.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  167.     if(res)rval|=1<<6;/* 打开文件失败 */
  168.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  169.     strcat((char*)pname,(char*)GBK24_PATH);
  170.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  171.     if(res)rval|=1<<7;/* 打开文件失败 */
  172.    
  173.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  174.     strcat((char*)pname,(char*)LVGL_12_PATH);
  175.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  176.     if(res)rval|=1<<1;/* 打开文件失败 */
  177.    
  178.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  179.     strcat((char*)pname,(char*)LVGL_18_PATH);
  180.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  181.     if(res)rval|=1<<2;/* 打开文件失败 */
  182.    
  183.     strcpy((char*)pname,(char*)src);    /* copy src内容到pname */
  184.     strcat((char*)pname,(char*)LVGL_24_PATH);
  185.     res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
  186.     if(res)rval|=1<<3;/* 打开文件失败 */
  187.    
  188.     myfree(SRAMIN,fftemp);/* 释放内存 */
  189.     if(rval==0)/* 字库文件都存在 */
  190.     {
  191.         lcd_show_string(x,y,240,320,size,"Erasing sectors... ",g_point_color);/* 提示正在擦除扇区 */
  192.         for(i=0; i<FONTSECSIZE; i++)    /* 先擦除字库区域,提高写入速度 */
  193.         {
  194.             fupd_prog(x+20*size/2,y,size,FONTSECSIZE,i);/* 进度显示 */
  195.             w25qxx_read((uint8_t*)buf,((FONTINFOADDR/4096)+i)*4096,4096);/* 读出整个扇区的内容 */
  196.             for(j=0; j<1024; j++) /* 校验数据 */
  197.             {
  198.                 if(buf[j]!=0XFFFFFFFF)break;/* 需要擦除 */
  199.             }
  200.             if(j!=1024)w25qxx_eraser_sector((FONTINFOADDR/4096)+i);    /* 需要擦除的扇区 */
  201.         }
  202.         myfree(SRAMIN,buf);
  203.         lcd_show_string(x,y,240,320,size,"Updating UNIGBK.BIN",g_point_color);
  204.         strcpy((char*)pname,(char*)src);                /* copy src内容到pname */
  205.         strcat((char*)pname,(char*)UNIGBK_PATH);
  206.         res=updata_fontx(x+20*size/2,y,size,pname,0);    /* 更新UNIGBK.BIN */
  207.         if(res) {
  208.             myfree(SRAMIN,pname);
  209.             return 1;
  210.         }
  211.         lcd_show_string(x,y,240,320,size,"Updating GBK12.BIN  ",g_point_color);
  212.         strcpy((char*)pname,(char*)src);                /* copy src内容到pname */
  213.         strcat((char*)pname,(char*)GBK12_PATH);
  214.         res=updata_fontx(x+20*size/2,y,size,pname,1);    /* 更新GBK12.FON */
  215.         if(res) {
  216.             myfree(SRAMIN,pname);
  217.             return 2;
  218.         }
  219.         lcd_show_string(x,y,240,320,size,"Updating GBK16.BIN  ",g_point_color);
  220.         strcpy((char*)pname,(char*)src);                /* copy src内容到pname */
  221.         strcat((char*)pname,(char*)GBK16_PATH);
  222.         res=updata_fontx(x+20*size/2,y,size,pname,2);    /* 更新GBK16.FON */
  223.         if(res) {
  224.             myfree(SRAMIN,pname);
  225.             return 3;
  226.         }
  227.         lcd_show_string(x,y,240,320,size,"Updating GBK24.BIN  ",g_point_color);
  228.         strcpy((char*)pname,(char*)src);                /* copy src内容到pname */
  229.         strcat((char*)pname,(char*)GBK24_PATH);
  230.         res=updata_fontx(x+20*size/2,y,size,pname,3);    /* 更新GBK24.FON */
  231.         if(res) {
  232.             myfree(SRAMIN,pname);
  233.             return 4;
  234.         }
  235.         
  236.         lcd_show_string(x,y,240,320,size,"Updating LVGL12.BIN  ",g_point_color);
  237.         strcpy((char*)pname,(char*)src);
  238.         strcat((char*)pname,(char*)LVGL_12_PATH);
  239.         res=updata_fontx(x+20*size/2,y,size,pname,4);
  240.         if(res) {
  241.             myfree(SRAMIN,pname);
  242.             return 5;
  243.         }
  244.         lcd_show_string(x,y,240,320,size,"Updating LVGL18.BIN  ",g_point_color);
  245.         strcpy((char*)pname,(char*)src);
  246.         strcat((char*)pname,(char*)LVGL_18_PATH);
  247.         res=updata_fontx(x+20*size/2,y,size,pname,5);
  248.         if(res) {
  249.             myfree(SRAMIN,pname);
  250.             return 5;
  251.         }
  252.         lcd_show_string(x,y,240,320,size,"Updating LVGL24.BIN  ",g_point_color);
  253.         strcpy((char*)pname,(char*)src);
  254.         strcat((char*)pname,(char*)LVGL_24_PATH);
  255.         res=updata_fontx(x+20*size/2,y,size,pname,6);
  256.         if(res) {
  257.             myfree(SRAMIN,pname);
  258.             return 5;
  259.         }
  260.         
  261.         
  262.         /* 全部更新好了 */
  263.         ftinfo.fontok=0XAA;
  264.         w25qxx_write((uint8_t*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));    /* 保存字库信息 */
  265.     }
  266.     myfree(SRAMIN,pname);/* 释放内存 */
  267.     myfree(SRAMIN,buf);
  268.     return rval;/* 无错误 */
  269. }

  270. /**
  271. * @brief       初始化字体
  272. * @param       无
  273. * @retval      0, 字库完好; 其他, 字库丢失;
  274. */
  275. uint8_t font_init(void)
  276. {
  277.     uint8_t t=0;
  278.     w25qxx_init();
  279.     while(t<10)/* 连续读取10次,都是错误,说明确实是有问题,得更新字库了 */
  280.     {
  281.         t++;
  282.         w25qxx_read((uint8_t*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));/* 读出ftinfo结构体数据 */
  283.         if(ftinfo.fontok==0XAA)break;
  284.         delay_ms(20);
  285.     }
  286.     if(ftinfo.fontok!=0XAA)return 1;
  287.     return 0;
  288. }
复制代码


生成的.c文件同样的步骤加到工程并添加声明



修改生成的字体驱动文件
添加路径和SPI读取信息
  1. #include "lvgl/lvgl.h"
  2. #include "BSP/NORFLASH/w25qxx.h"
  3. #include "TEXT/fontupd.h"</font>

  4. typedef struct{
  5.     uint16_t min;
  6.     uint16_t max;
  7.     uint8_t  bpp;
  8.     uint8_t  reserved[3];
  9. }x_header_t;
  10. typedef struct{
  11.     uint32_t pos;
  12. }x_table_t;
  13. typedef struct{
  14.     uint8_t adv_w;
  15.     uint8_t box_w;
  16.     uint8_t box_h;
  17.     int8_t  ofs_y;
  18. }glyph_dsc_t;


  19. static x_header_t __g_xbf_hd = {
  20.     .min = 0,
  21.     .max = 0,
  22.     .bpp = 0,
  23. };

  24. static uint8_t __g_font_buf[48];//如bin文件存在SPI FLASH可使用此buff

  25. static uint8_t *__user_font_getdata(int offset, int size){
  26.     //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
  27.     //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
  28.     w25qxx_read(__g_font_buf,ftinfo.lvgl_12addr+offset,size);</font>
  29.     return __g_font_buf;
  30. }


  31. static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) {
  32.     if( __g_xbf_hd.max==0 ) {
  33.         uint8_t *p = __user_font_getdata(0, sizeof(x_header_t));
  34.         memcpy(&__g_xbf_hd, p, sizeof(x_header_t));
  35.     }
  36.     if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
  37.         return NULL;
  38.     }
  39.     uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
  40.     uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
  41.     if( p_pos[0] != 0 ) {
  42.         uint32_t pos = p_pos[0];
  43.         glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, sizeof(glyph_dsc_t));
  44.         return __user_font_getdata(pos+sizeof(glyph_dsc_t), gdsc->box_w*gdsc->box_h*__g_xbf_hd.bpp/8);
  45.     }
  46.     return NULL;
  47. }


  48. static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) {
  49.     if( __g_xbf_hd.max==0 ) {
  50.         uint8_t *p = __user_font_getdata(0, sizeof(x_header_t));
  51.         memcpy(&__g_xbf_hd, p, sizeof(x_header_t));
  52.     }
  53.     if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
  54.         return NULL;
  55.     }
  56.     uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
  57.     uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
  58.     if( p_pos[0] != 0 ) {
  59.         glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], sizeof(glyph_dsc_t));
  60.         dsc_out->adv_w = gdsc->adv_w;
  61.         dsc_out->box_h = gdsc->box_h;
  62.         dsc_out->box_w = gdsc->box_w;
  63.         dsc_out->ofs_x = 0;
  64.         dsc_out->ofs_y = gdsc->ofs_y;
  65.         dsc_out->bpp   = __g_xbf_hd.bpp;
  66.         return true;
  67.     }
  68.     return false;
  69. }


  70. //宋体,常规,12
  71. //字模高度:16
  72. //XBF字体,外部bin文件
  73. lv_font_t myFont12 = {
  74.     .get_glyph_bitmap = __user_font_get_bitmap,
  75.     .get_glyph_dsc = __user_font_get_glyph_dsc,
  76.     .line_height = 16,
  77.     .base_line = 0,
  78. };
复制代码
同样的方法改变主题的默认字体

  1. #define LV_THEME_DEFAULT_INCLUDE                <stdint.h>      /*Include a header for the init. function*/
  2. #define LV_THEME_DEFAULT_INIT                       lv_theme_material_init
  3. #define LV_THEME_DEFAULT_COLOR_PRIMARY      LV_COLOR_RED
  4. #define LV_THEME_DEFAULT_COLOR_SECONDARY    LV_COLOR_BLUE
  5. #define LV_THEME_DEFAULT_FLAG                      LV_THEME_MATERIAL_FLAG_LIGHT
  6. #define LV_THEME_DEFAULT_FONT_SMALL          <font color="#ff8c00">&myFont12</font>
  7. #define LV_THEME_DEFAULT_FONT_NORMAL       <font color="#ff8c00">&myFont12</font>
  8. #define LV_THEME_DEFAULT_FONT_SUBTITLE     <font color="#ff8c00">&myFont18</font>
  9. #define LV_THEME_DEFAULT_FONT_TITLE           <font color="#ff8c00">&myFont24</font>
复制代码


调用的方法也是一样,直接UTF-8写入中文即可


最新的字体生成器和上述SPI字体文件如下

游客,如果您要查看本帖隐藏内容请回复


天然懒,天然呆
能吃会睡,未来可期
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
推荐
发表于 2021-4-30 08:50:51 | 只看该作者
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复 支持 1 反对 0

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2012-11-4
在线时间
43 小时
2#
发表于 2020-8-1 16:53:11 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

76

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3776
金钱
3776
注册时间
2013-12-23
在线时间
619 小时
3#
发表于 2020-8-1 19:55:14 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

28

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2019-3-30
在线时间
86 小时
4#
发表于 2020-8-2 21:01:05 | 只看该作者
gvb fvgd f
回复 支持 反对

使用道具 举报

28

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2019-3-30
在线时间
86 小时
5#
发表于 2020-8-2 21:54:40 | 只看该作者
可以发一下工程文件么,大佬
回复 支持 反对

使用道具 举报

4

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
1091
注册时间
2017-11-7
在线时间
311 小时
6#
发表于 2020-8-2 21:54:45 | 只看该作者
谢谢发布。。。。
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
7#
 楼主| 发表于 2020-8-3 08:35:52 | 只看该作者
补充一下
<font color="#ff0000">#include "BSP/NORFLASH/w25qxx.h"
例如上述这句,预览的时候看着是这一行为红色字体,实际上只有标识,用到的时候去掉即可
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2020-5-29
在线时间
20 小时
8#
发表于 2020-8-3 13:49:21 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
9#
 楼主| 发表于 2020-8-3 14:28:59 | 只看该作者
doudouqiqi 发表于 2020-8-2 21:54
可以发一下工程文件么,大佬

不是基于开发板的哦,需要的话后面抽时间整理一下
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

28

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2019-3-30
在线时间
86 小时
10#
发表于 2020-8-3 20:11:10 | 只看该作者
xcc521 发表于 2020-8-3 14:28
不是基于开发板的哦,需要的话后面抽时间整理一下

有工程文件的话,我想买一下
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
11#
 楼主| 发表于 2020-8-4 09:18:05 | 只看该作者
doudouqiqi 发表于 2020-8-3 20:11
有工程文件的话,我想买一下

给力嗷                      
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
12#
发表于 2020-8-4 10:09:27 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
13#
 楼主| 发表于 2020-8-4 11:37:32 | 只看该作者
hycrgqb 发表于 2020-8-2 21:54
谢谢发布。。。。

多谢支持,嗷嗷嗷
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

28

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2019-3-30
在线时间
86 小时
14#
发表于 2020-8-4 14:59:56 | 只看该作者
xcc521 发表于 2020-8-4 11:37
多谢支持,嗷嗷嗷

可以么,大佬。
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
15#
 楼主| 发表于 2020-8-4 15:11:34 | 只看该作者

行                 
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2016-11-7
在线时间
26 小时
16#
发表于 2020-8-4 20:55:41 | 只看该作者
好东西,谢谢分享
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
17#
发表于 2020-8-5 12:15:01 | 只看该作者
本帖最后由 DFY 于 2020-8-5 12:21 编辑

C:\Users\DFY\Desktop\樱花.png
图标字体有些可以显示(littleVGL本来支持的图标字体可以显示),有些不行,请问哪里还要修改吗?
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
18#
发表于 2020-8-5 12:17:31 | 只看该作者
DFY 发表于 2020-8-5 12:15
图标字体有些可以显示(littleVGL本来支持的图标字体可以显示),有些不行,请问哪里还要修改吗?

@xcc521
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2019-4-13
在线时间
34 小时
19#
发表于 2020-8-5 12:50:38 | 只看该作者
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
20#
 楼主| 发表于 2020-8-5 16:36:12 | 只看该作者
本帖最后由 xcc521 于 2020-8-19 09:30 编辑
DFY 发表于 2020-8-5 12:15
图标字体有些可以显示(littleVGL本来支持的图标字体可以显示),有些不行,请问哪里还要修改吗?

转换的不对,对比一下可以显示的就知道了,还有可能版本的原因,一些字体信息获取方式改了直接按照字体转换器上的方式就可以了




天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2020-4-13
在线时间
13 小时
21#
发表于 2020-8-6 13:13:38 | 只看该作者
多数应用选择自己需要的好方便。
回复 支持 反对

使用道具 举报

28

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2019-3-30
在线时间
86 小时
22#
发表于 2020-8-6 20:07:38 | 只看该作者
xcc521 发表于 2020-8-4 15:11
行                 

加个联系方式可以么?我的QQ是1084094364
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2020-5-13
在线时间
19 小时
23#
发表于 2020-8-7 10:05:57 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

5

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2011-10-24
在线时间
30 小时
24#
发表于 2020-8-10 11:15:27 | 只看该作者
谢谢分享
谢谢分享
谢谢分享
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
25#
 楼主| 发表于 2020-8-10 12:46:22 | 只看该作者
hqgboy 发表于 2020-8-10 11:15
谢谢分享
谢谢分享
谢谢分享

多谢支持,嗷嗷嗷
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-6-10
在线时间
7 小时
26#
发表于 2020-8-12 09:18:59 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2020-5-12
在线时间
9 小时
27#
发表于 2020-8-12 17:47:25 | 只看该作者
厉害呀
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-7-19
在线时间
4 小时
28#
发表于 2020-8-16 13:21:35 | 只看该作者
字体不错啊!
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2020-2-29
在线时间
30 小时
29#
发表于 2020-8-16 21:14:43 | 只看该作者
这个不错,干货,学习了。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-5-7
在线时间
6 小时
30#
发表于 2020-8-18 17:54:00 | 只看该作者
lvgl 6.1 版本是不是支持中文呀, 我输入中文总是变成二个英文现实出来, 是不是有宏设置的
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
31#
 楼主| 发表于 2020-8-18 18:11:35 | 只看该作者
hzThomas 发表于 2020-8-18 17:54
lvgl 6.1 版本是不是支持中文呀, 我输入中文总是变成二个英文现实出来, 是不是有宏设置的

编译器编码要改成UTF-8的,不过MDK神经病有时候编译报编码的错误
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-5-7
在线时间
6 小时
32#
发表于 2020-8-18 18:28:54 | 只看该作者
xcc521 发表于 2020-8-18 18:11
编译器编码要改成UTF-8的,不过MDK神经病有时候编译报编码的错误

static lv_style_t style1;
    lv_style_copy(&style1, &lv_style_plain);
    style1.text.font = &nttFont;

    /*Create a label and set new text*/
    lv_obj_t * label = lv_label_create(lv_disp_get_scr_act(NULL), NULL);
    lv_obj_set_pos(label, 160, 200);
    lv_label_set_style(label, LV_LABEL_STYLE_MAIN, &style1);
    //lv_label_set_text(label, "Hello\n大家\n1234");

        // 大  0x5927 <=> 0xB4F3
        // 家  0x597d <=> 0xBCD2
        // 好  0x5bb6 <=> 0xBAC3

        char str[] = {'H', 'e', 'l', 'l', 'o', 0x59, 0x27, 0x59, 0x7d, '1', '2', '3', 0x00};

        lv_label_set_text(label, str);

显示的效果 0x59 0x27 0x59 0x7d 也被当成英文显示了,

是不是有什么宏配置呀
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
33#
 楼主| 发表于 2020-8-19 09:18:09 | 只看该作者
hzThomas 发表于 2020-8-18 18:28
static lv_style_t style1;
    lv_style_copy(&style1, &lv_style_plain);
    style1.text.font = & ...

编译器编码改成UTF-8,直接写中文就行了,你这是内容少,几十个界面,上百条中文挨个转不累嘛
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-5-7
在线时间
6 小时
34#
发表于 2020-8-19 09:31:12 | 只看该作者
xcc521 发表于 2020-8-19 09:18
编译器编码改成UTF-8,直接写中文就行了,你这是内容少,几十个界面,上百条中文挨个转不累嘛

现在还谈不上累不累的问题, 是显示不正常,  0x59 0x27 0x59 0x7d 被当成英文显示出来了.

是不是哪里没有配置对呀?
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
35#
 楼主| 发表于 2020-8-19 11:28:35 | 只看该作者
SmartIC 发表于 2020-8-6 13:13
多数应用选择自己需要的好方便。

是的                    
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

35

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2016-4-20
在线时间
180 小时
36#
发表于 2020-8-20 09:50:41 | 只看该作者
好东东
回复 支持 反对

使用道具 举报

1

主题

234

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3227
金钱
3227
注册时间
2015-4-19
在线时间
357 小时
37#
发表于 2020-8-21 08:55:30 | 只看该作者
谢谢分享,学习一下
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-27
在线时间
52 小时
38#
发表于 2020-8-23 09:46:08 | 只看该作者
5555888
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-27
在线时间
52 小时
39#
发表于 2020-8-24 14:30:26 | 只看该作者
2222222222222222
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
40#
发表于 2020-8-24 15:57:59 | 只看该作者
xcc521 发表于 2020-8-5 16:36
转换的不对,对比一下可以显示的就知道了,还有可能版本的原因,一些字体信息获取方式改了直接按照字体转 ...

谢谢大佬,不过这样转是可以的,就是必须要大写才能显示,小写不会显示
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-27
在线时间
52 小时
41#
发表于 2020-8-25 11:48:30 | 只看该作者
本帖最后由 kyuan 于 2020-8-25 11:51 编辑

小弟想移植中文字库到littleVGL对着大佬的指导一步一步修改,最后也该UTF-8了但就是显示不出来字,有没有大神帮忙看看是什么问题,探索者板子

template.zip

4.19 MB, 下载次数: 342

回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
42#
 楼主| 发表于 2020-8-25 12:03:52 | 只看该作者
kyuan 发表于 2020-8-25 11:48
小弟想移植中文字库到littleVGL对着大佬的指导一步一步修改,最后也该UTF-8了但就是显示不出来字,有没有大 ...

字库更新了吗?读出来数据看看
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-27
在线时间
52 小时
43#
发表于 2020-8-26 10:26:22 | 只看该作者
xcc521 发表于 2020-8-25 12:03
字库更新了吗?读出来数据看看

大神,如果我想看字库是否更新是不是要自己重写一个Get_HzMat函数和Show_Font函数?
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
44#
 楼主| 发表于 2020-8-26 12:14:22 | 只看该作者
kyuan 发表于 2020-8-26 10:26
大神,如果我想看字库是否更新是不是要自己重写一个Get_HzMat函数和Show_Font函数?

读出来看看,或者直接显示就行了
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-7-8
在线时间
10 小时
45#
发表于 2020-8-27 19:47:08 | 只看该作者
收藏学习一下
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2016-7-11
在线时间
84 小时
46#
发表于 2020-8-28 09:09:37 | 只看该作者
感谢大佬分享
回复 支持 反对

使用道具 举报

6

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-3
在线时间
4 小时
47#
发表于 2020-8-28 09:55:13 | 只看该作者
支持一下,感谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2020-8-28
在线时间
1 小时
48#
发表于 2020-8-28 16:37:14 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-6-7
在线时间
8 小时
49#
发表于 2020-8-29 22:27:37 | 只看该作者
非常感谢,正在学习
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-9-3
在线时间
1 小时
50#
发表于 2020-9-3 14:47:31 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-14 09:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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