[STM32F1] 【HAL库每天一例】第039例:LCD-显示英文(字模在内部Flash)

[复制链接]
 楼主| 亼亽 发表于 2016-6-13 08:39 | 显示全部楼层 |阅读模式
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将**每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
等级不够,不给发连接(去掉下面链接空格)
百度云:pan. baidu. com/s/1jIvrqlC
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-039. LCD-显示英文(字模在内部Flash)

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-039. LCD-显示英文(字模在内部Flash)
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:www ing10bbs com
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  FSMC:可变静态存储控制器,是STM32系列采用的一种新型的存储器扩展技术。一般可以用FSMC
接口与液晶驱动IC连接,实现数据交换。YS-F1Pro预留16bit的FSMC液晶接口,我们同时提供了
3.5寸TFT液晶模组供选购,该模组的液晶驱动IC型号为ILI9488。
  本例程实现液晶模组显示英文字符和字符串,提供16号和24号两种字体选择。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  
【3】操作及现象
把3.5寸TFT液晶模组插入开发板中间液晶接口上,使用开发板配套的MINI USB线连接到开发板标
示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置参
数为115200 8-N-1。下载完程序之后,在串口调试助手窗口可接收到液晶模组ID信息,同时液晶屏
幕亮起来,背景为黑色,显示一些英文字符。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
16号ASCll码取模.png
24号ASCll码取模.png

英文显示函数实现

  1. /**
  2.   * 函数功能: 在 LCD 显示器上显示一个英文字符
  3.   * 输入参数: usX:在特定扫描方向下字符的起始X坐标
  4.   *           usY :在特定扫描方向下该点的起始Y坐标
  5.   *           cChar :要显示的英文字符
  6.   *           usColor_Background :选择英文字符的背景色
  7.   *           usColor_Foreground :选择英文字符的前景色
  8.   *           font:字体选择
  9.   *             参数:USB_FONT_16 :16号字体
  10.   *                   USB_FONT_24 :24号字体
  11.   * 返 回 值: 无
  12.   * 说    明:该函数必须与ascii.h内容对应使用
  13.   */
  14. void LCD_DispChar_EN( uint16_t usX, uint16_t usY, const char cChar, uint16_t usColor_Background, uint16_t usColor_Foreground,USB_FONT_Typdef font)
  15. {
  16.         uint8_t ucTemp, ucRelativePositon, ucPage, ucColumn;
  17.   
  18.   /* 检查输入参数是否合法 */
  19.   assert_param(IS_USB_FONT(font));
  20.   
  21.         ucRelativePositon = cChar - ' ';
  22.   
  23.         if(font==USB_FONT_16)
  24.   {
  25.     LCD_OpenWindow(usX,usY,8,16);
  26.     LCD_WRITE_CMD(0x2C);
  27.    
  28.     for(ucPage=0;ucPage<16;ucPage++)
  29.     {
  30.       ucTemp=ucAscii_1608[ucRelativePositon][ucPage];               
  31.       for(ucColumn=0;ucColumn<8;ucColumn++)
  32.       {
  33.         if(ucTemp&0x01)
  34.           LCD_WRITE_DATA(usColor_Foreground);                       
  35.         else
  36.           LCD_WRITE_DATA(usColor_Background);                                                               
  37.         ucTemp >>= 1;                                       
  38.       }
  39.     }   
  40.   }
  41.   else
  42.   {
  43.     LCD_OpenWindow(usX,usY,12,24);
  44.     LCD_WRITE_CMD(0x2C);
  45.    
  46.     for(ucPage=0;ucPage<48;ucPage++)
  47.     {
  48.       ucTemp=ucAscii_2412[ucRelativePositon][ucPage];               
  49.       for(ucColumn=0;ucColumn<8;ucColumn++)
  50.       {
  51.         if(ucTemp&0x01)
  52.           LCD_WRITE_DATA(usColor_Foreground);                       
  53.         else
  54.           LCD_WRITE_DATA(usColor_Background);                                                               
  55.         ucTemp >>= 1;                                       
  56.       }       
  57.       ucPage++;
  58.       ucTemp=ucAscii_2412[ucRelativePositon][ucPage];
  59.       /* 只显示前面4个位,与上面8位总共12位 */
  60.       for(ucColumn=0;ucColumn<4;ucColumn++)
  61.       {
  62.         if(ucTemp&0x01)
  63.           LCD_WRITE_DATA(usColor_Foreground);                       
  64.         else
  65.           LCD_WRITE_DATA(usColor_Background);                                                               
  66.         ucTemp >>= 1;                                       
  67.       }       
  68.     }
  69.   }       
  70. }

  71. /**
  72.   * 函数功能: 在 LCD 显示器上显示英文字符串
  73.   * 输入参数: usX:在特定扫描方向下字符的起始X坐标
  74.   *           usY :在特定扫描方向下该点的起始Y坐标
  75.   *           pStr :要显示的英文字符串的首地址
  76.   *           usColor_Background :选择英文字符的背景色
  77.   *           usColor_Foreground :选择英文字符的前景色
  78.   *           font:字体选择
  79.   *             参数:USB_FONT_16 :16号字体
  80.   *                   USB_FONT_24 :24号字体
  81.   * 返 回 值: 无
  82.   * 说    明:该函数必须与ascii.h内容对应使用
  83.   */
  84. void LCD_DispString_EN ( uint16_t usX, uint16_t usY, const char * pStr, uint16_t usColor_Background, uint16_t usColor_Foreground,USB_FONT_Typdef font)
  85. {
  86.   /* 检查输入参数是否合法 */
  87.   assert_param(IS_USB_FONT(font));
  88.   
  89.         while ( * pStr != '\0' )
  90.         {
  91.     if(font==USB_FONT_16)
  92.     {
  93.       if ( ( usX +  8 ) > LCD_DEFAULT_WIDTH )
  94.       {
  95.         usX = 0;
  96.         usY += 16;
  97.       }      
  98.       if ( ( usY +  16 ) > LCD_DEFAULT_HEIGTH )
  99.       {
  100.         usX = 0;
  101.         usY = 0;
  102.       }      
  103.       LCD_DispChar_EN ( usX, usY, * pStr, usColor_Background, usColor_Foreground,font);
  104.       pStr ++;      
  105.       usX += 8;
  106.     }
  107.     else
  108.     {
  109.       if ( ( usX +  12 ) > LCD_DEFAULT_WIDTH )
  110.       {
  111.         usX = 0;
  112.         usY += 24;
  113.       }      
  114.       if ( ( usY +  24 ) > LCD_DEFAULT_HEIGTH )
  115.       {
  116.         usX = 0;
  117.         usY = 0;
  118.       }      
  119.       LCD_DispChar_EN ( usX, usY, * pStr, usColor_Background, usColor_Foreground,font);
  120.       pStr ++;      
  121.       usX += 12;
  122.     }
  123.         }
  124. }





mmuuss586 发表于 2016-6-13 09:34 | 显示全部楼层
谢谢分享;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

216

帖子

48

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