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

[复制链接]
 楼主| 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这次先把内部的图片更新几张看看,打开
屏幕截图 2023-11-29 212509.png
红色圈圈内的一定都要选中,不然不会更新,之前弄了好久点击更新并没开始,后来发现最上面的图片路径也要选中,还有就是一定要好一点的串口工具,不然也更新不了。更新后看看效果
IMG_20231129_211854.jpg
这样就能显示自已上传的图片了,可光有图片并不爽,还得要它显示几个文字看看,于是网上逛了一圈,下到了GC9A01的驱动源码,并把里面的几个函数移植了过来,看代码

  1. /******************************************************************************
  2.       函数说明:显示单个字符
  3.       入口数据:x,y显示坐标
  4.                 num 要显示的字符
  5.                 fc 字的颜色
  6.                 bc 字的背景色
  7.                 sizey 字号
  8.                 mode:  0非叠加模式  1叠加模式
  9.       返回值:  无
  10. ******************************************************************************/
  11. void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
  12. {
  13.         uint8_t temp,sizex,t,m=0;
  14.         uint16_t i,TypefaceNum;//一个字符所占字节大小
  15.         uint16_t x0=x;
  16.         sizex=sizey/2;
  17.         TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
  18.         num=num-' ';    //得到偏移后的值
  19.         
  20.         adderset(x,x+sizex-1,y,y+sizey-1);  //设置光标位置

  21.         for(i=0;i<TypefaceNum;i++)
  22.         {
  23.                 if(sizey==12)temp=ascii_1206[num][i];                       //调用6x12字体
  24.                 else if(sizey==16)temp=ascii_1608[num][i];                 //调用8x16字体
  25.                 else if(sizey==24)temp=ascii_2412[num][i];                 //调用12x24字体
  26.                 else if(sizey==32)temp=ascii_3216[num][i];                 //调用16x32字体
  27.                 else return;
  28.                 for(t=0;t<8;t++)
  29.                 {

  30.                         if(!mode)//非叠加模式
  31.                         {
  32.                                 if(temp&(0x01<<t))SPI_Write_Data(fc);
  33.                                 else SPI_Write_Data(bc);
  34.                                 m++;
  35.                                 if(m%sizex==0)
  36.                                 {
  37.                                         m=0;
  38.                                         break;
  39.                                 }
  40.                         }
  41.                         else//叠加模式
  42.                         {
  43.                                 if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点
  44.                                 x++;
  45.                                 if((x-x0)==sizex)
  46.                                 {
  47.                                         x=x0;
  48.                                         y++;
  49.                                         break;
  50.                                 }
  51.                         }


  52.                 }
  53.         }   

  54. }


  55. /******************************************************************************
  56.       函数说明:显示字符串
  57.       入口数据:x,y显示坐标
  58.                 *p 要显示的字符串
  59.                 fc 字的颜色
  60.                 bc 字的背景色
  61.                 sizey 字号
  62.                 mode:  0非叠加模式  1叠加模式
  63.       返回值:  无
  64. ******************************************************************************/
  65. 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)
  66. {         
  67.         while(*p!='\0')
  68.         {      
  69.                 LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
  70.                 x+=sizey/2;
  71.                 p++;
  72.         }  
  73. }
  74. /******************************************************************************
  75.       函数说明:显示数字
  76.       入口数据:m底数,n指数
  77.       返回值:  无
  78. ******************************************************************************/
  79. uint32_t mypow(uint8_t m,uint8_t n)
  80. {
  81.         uint32_t result=1;         
  82.         while(n--)result*=m;
  83.         return result;
  84. }
  85. /******************************************************************************
  86.       函数说明:显示两位小数变量
  87.       入口数据:x,y显示坐标
  88.                 num 要显示小数变量
  89.                 len 要显示的位数
  90.                 fc 字的颜色
  91.                 bc 字的背景色
  92.                 sizey 字号
  93.       返回值:  无
  94. ******************************************************************************/
  95. void LCD_ShowFloatNum1(uint16_t x,uint16_t y,float num,uint8_t len,uint16_t fc,uint16_t bc,uint8_t sizey)
  96. {                 
  97.         uint8_t t,temp,sizex;
  98.         uint16_t num1;
  99.         sizex=sizey/2;
  100.         num1=num*100;
  101.         for(t=0;t<len;t++)
  102.         {
  103.                 temp=(num1/mypow(10,len-t-1))%10;
  104.                 if(t==(len-2))
  105.                 {
  106.                         LCD_ShowChar(x+(len-2)*sizex,y,'.',fc,bc,sizey,0);
  107.                         t++;
  108.                         len+=1;
  109.                 }
  110.                  LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
  111.         }
  112. }

然后在主函数中调用
  1. LCD_ShowString(20,80,"LCD_Diameter:",RED,WHITE,32,0);
文字是显示出来了,但颜色对不上啊,给大家看看图片
IMG_20231129_192412.jpg
VID_20231129_192424.mp4_20231129_193215.gif
我要是显示的是红字白底,结果是黑字蓝底,这是怎么回事?知道的朋友说说原因?
颜色定义在这里
  1. //画笔颜色
  2. #define WHITE                  0xFFFF
  3. #define BLACK                  0x0000         
  4. #define BLUE                    0x001F  
  5. #define BRED             0XF81F
  6. #define GRED                                0XFFE0
  7. #define GBLUE                               0X07FF
  8. #define RED                    0xF800
  9. #define MAGENTA                0xF81F
  10. #define GREEN                  0x07E0
  11. #define CYAN                   0x7FFF
  12. #define YELLOW                 0xFFE0
  13. #define BROWN                              0XBC40 //棕色
  14. #define BRRED                              0XFC07 //棕红色
  15. #define GRAY                               0X8430 //灰色
  16. #define DARKBLUE               0X01CF        //深蓝色
  17. #define LIGHTBLUE               0X7D7C        //浅蓝色  
  18. #define GRAYBLUE                0X5458 //灰蓝色
  19. #define LIGHTGREEN              0X841F //浅绿色
  20. #define LGRAY                              0XC618 //浅灰色(PANNEL),窗体背景色
  21. #define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
  22. #define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)


为什么颜色不对呢?是什么地方搞错了呢?哪位大神指点一下!
lulugl 发表于 2023-11-30 09:43 | 显示全部楼层
s
看看一下写进去字节的顺序。或者是用逻辑分析仪抓一下正常的时序。对比一下就知道了。
小小蚂蚁举千斤 发表于 2023-11-30 21:18 | 显示全部楼层
s
应该是顺序问题
 楼主| stb988 发表于 2023-12-1 09:21 | 显示全部楼层
s
已经找到原因了,少写了一个字节进去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部