野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16685|回复: 1

挑战者F429RGB屏幕四种方向显示字符串

[复制链接]

发表于 2020-7-9 22:44:42 | 显示全部楼层 |阅读模式
本帖最后由 Yuhailong 于 2020-7-10 10:21 编辑

挑战者F429的RGB屏幕显示例程只能从一个方向显示字符串,我研究了一下,改动了一些代码,现在可以设置四种方向显示字符串

1.首先写了一个画点的函数,可以从四种不同的方向画点
  1. /**
  2. * [url=home.php?mod=space&uid=41770]@brief[/url]  在屏幕上面画点
  3. * @param  Xpos: 横坐标.
  4. * @param  Ypos: 纵坐标.
  5. * @param  mode:显示方向
  6. * @param  color:显示的颜色
  7. * @retval None
  8. */
  9. void LCD_DrawSome(uint16_t Xpos, uint16_t Ypos, uint8_t mode,uint32_t color)
  10. {
  11.         uint32_t videoMemory;
  12.         switch(mode)
  13.         {
  14.                 case 0:
  15.                                 videoMemory = CurrentFrameBuffer + (LCD_PIXEL_WIDTH - Ypos -1)*2 + (Xpos * LCD_PIXEL_WIDTH*2);
  16.                          *(__IO uint16_t*) (videoMemory) = color;
  17.                 break;
  18.                 case 1:
  19.                                 videoMemory = CurrentFrameBuffer + Xpos *2 + (Ypos * LCD_PIXEL_WIDTH*2);
  20.                          *(__IO uint16_t*) (videoMemory) = color;
  21.                 break;               
  22.                 case 2:
  23.                                 videoMemory =(CurrentFrameBuffer + 480*800*2) - ((Xpos + 1)*2 + (Ypos * LCD_PIXEL_WIDTH*2));
  24.                          *(__IO uint16_t*) (videoMemory) = color;
  25.                 break;               
  26.                 case 3:
  27.                                 videoMemory =CurrentFrameBuffer + (480*800*2 - (Xpos*2*LCD_PIXEL_WIDTH + (LCD_PIXEL_WIDTH - Ypos)*2));
  28.                          *(__IO uint16_t*) (videoMemory) = color;
  29.                 break;               
  30.         }
  31. }
复制代码
2.然后将画点函数和显示字符串的函数结合一下,改动如下:
  1. /**
  2. * @brief  Displays a maximum of 20 char on the LCD.
  3. * @param  Line: the Line where to display the character shape .
  4. *   This parameter can be one of the following values:
  5. *     @arg Linex: where x can be 0..9
  6. * @param  *ptr: pointer to string to display on LCD.
  7. * @retval None
  8. */
  9. void LCD_DisplayStringLine(uint16_t Line, uint8_t *ptr)
  10. {
  11. uint16_t refcolumn = 0;
  12. /* Send the string character by character on lCD */
  13. while ((refcolumn < LCD_PIXEL_WIDTH) && ((*ptr != 0) & (((refcolumn + LCD_Currentfonts->Width) & 0xFFFF) >= LCD_Currentfonts->Width)))
  14. {
  15.    /* Display one character on LCD */
  16.    LCD_DisplayChar(refcolumn,Line , *ptr);
  17.    /* Decrement the column position by width */
  18.    refcolumn += LCD_Currentfonts->Width;
  19.    /* Point on the next character */
  20.    ptr++;
  21. }
  22. }
复制代码
  1. /**
  2. * @brief  Draws a character on LCD.
  3. * @param  Xpos: the Line where to display the character shape.
  4. * @param  Ypos: start column address.
  5. * @param  c: pointer to the character data.
  6. * @retval None
  7. */
  8. void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c)
  9. {
  10. uint32_t index = 0, counter = 0, xpos =0;
  11. uint32_t  Xaddress = 0;
  12.   xpos = Xpos;;
  13. Xaddress += Ypos ;

  14. for(index = 0; index < LCD_Currentfonts->Height; index++)
  15. {
  16.      Xpos = xpos;
  17.    for(counter = 0; counter < LCD_Currentfonts->Width; counter++)
  18.    {

  19.      if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> counter)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
  20.        (((c[index] & (0x1 << counter)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
  21.      {
  22.                  LCD_DrawSome(Xpos,Xaddress,SET_DIRECTION,CurrentBackColor);
  23.      }
  24.      else
  25.      {
  26.                  LCD_DrawSome(Xpos,Xaddress,SET_DIRECTION,CurrentTextColor);
  27.      }
  28.      Xpos++;         
  29.    }
  30.       Xaddress++;
  31. }
  32. }
复制代码
3.最后可以通过这个宏定义来设置显示方向

  1. //设置字符串显示方向,注意:超出屏幕的部分不会显示,
  2. #define SET_DIRECTION 0 //设置范围0-3,可以设置四种方向显示
复制代码
四种不同的显示效果如下:
#define SET_DIRECTION 0

野火论坛202007092231318649..png
#define SET_DIRECTION 1

野火论坛202007092238316662..png

#define SET_DIRECTION 2

野火论坛202007092237052772..png

#define SET_DIRECTION 3

野火论坛202007092239436670..png








最后附上源代码
19-LTDC—液晶显示英文(字库在内部FLASH).rar (645.96 KB, 下载次数: 28)

19-LTDC—液晶显示英文(字库在内部FLASH).zip (729.96 KB, 下载次数: 21)

回复

使用道具 举报

发表于 2020-7-10 10:51:18 | 显示全部楼层
这个好用,赞一个
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 14:27 , Processed in 0.052406 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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