找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6688|回复: 7
收起左侧

PCtoLCD2013字模软件下载与STM32 tft液晶显示中英文与变量源码

[复制链接]
ID:294956 发表于 2018-3-21 16:42 | 显示全部楼层 |阅读模式
F103RCT6+tft显示程序
0.png 0.png

PCtoLCD2013字模软件:
0.png
GB2312字模
寻址公式:
pos = ((High8bit-0xa1)*94+Low8bit-0xa1)*16*16/8;


其中:16*16/8 的16*16为矩阵大小,根据自己的配置修改。
工程中读取字模的函数为 bsp_spi_flash.c 文件的 GetGBKCode_from_EXFlash 。

stm32单片机源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @brief   液晶显示汉字实验(字库在外部FLASH)
  7.   ******************************************************************************
  8.   * @attention
  9.   *
  10.   * 实验平台:秉火 F103-MINI STM32 开发板
  11.   ******************************************************************************
  12.   */

  13. #include "stm32f10x.h"
  14. #include "./usart/bsp_usart.h"        
  15. #include "./lcd/bsp_ili9341_lcd.h"
  16. #include "./flash/bsp_spi_flash.h"

  17. static void LCD_Test(void);        
  18. static void Delay ( __IO uint32_t nCount );

  19. void Printf_Charater(void)   ;


  20. int main(void)
  21. {        
  22.         //LCD 初始化
  23.         ILI9341_Init ();         

  24.         /* USART config */
  25.         USART_Config();  
  26.         
  27.         printf("\r\n ********** 液晶屏中文显示程序(字库在外部FLASH)*********** \r\n");
  28.         printf("\r\n 若汉字显示不正常,请阅读工程中的readme.txt文件说明,根据要求给FLASH重刷字模数据\r\n");

  29. //其中0、3、5、6 模式适合从左至右显示文字,
  30. //不推荐使用其它模式显示文字        其它模式显示文字会有镜像效果                        
  31. //其中 6 模式为大部分液晶例程的默认显示方向  
  32.         ILI9341_GramScan ( 6 );
  33.         
  34.         Printf_Charater();
  35.         
  36.         while ( 1 )
  37.         {
  38.                 LCD_Test();
  39.         }
  40.         
  41.         
  42. }



  43. /*用于测试各种液晶的函数*/
  44. void LCD_Test(void)
  45. {
  46.         /*演示显示变量*/
  47.         static uint8_t testCNT = 0;        
  48.         char dispBuff[100];
  49.         
  50.         testCNT++;        
  51.         
  52.         LCD_SetFont(&Font8x16);
  53.         LCD_SetColors(RED,BLACK);

  54.   ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,显示全黑 */
  55.         /********显示字符串示例*******/
  56.   ILI9341_DispStringLine_EN_CH(LINE(0),"秉火3.2_2.8寸LCD参数:");
  57.   ILI9341_DispStringLine_EN_CH(LINE(1),"分辨率:240x320 px");
  58.   ILI9341_DispStringLine_EN_CH(LINE(2),"ILI9341液晶驱动");
  59.   ILI9341_DispStringLine_EN_CH(LINE(3),"XPT2046触摸屏驱动");

  60.         /********显示变量示例*******/
  61.         LCD_SetTextColor(GREEN);

  62.         /*使用c标准库把变量转化成字符串*/
  63.         sprintf(dispBuff,"显示变量: %d ",testCNT);
  64.   LCD_ClearLine(LINE(5));        /* 清除单行文字 */
  65.         
  66.         /*然后显示该字符串即可,其它变量也是这样处理*/
  67.         ILI9341_DispStringLine_EN_CH(LINE(5),dispBuff);

  68.         /*******显示图形示例******/
  69.   /* 画直线 */
  70.   
  71.   LCD_ClearLine(LINE(7));/* 清除单行文字 */
  72.         LCD_SetTextColor(BLUE);

  73.   ILI9341_DispStringLine_EN_CH(LINE(7),"画直线:");
  74.   
  75.         LCD_SetTextColor(RED);
  76.   ILI9341_DrawLine(50,170,210,230);  
  77.   ILI9341_DrawLine(50,200,210,240);
  78.   
  79.         LCD_SetTextColor(GREEN);
  80.   ILI9341_DrawLine(100,170,200,230);  
  81.   ILI9341_DrawLine(200,200,220,240);
  82.         
  83.         LCD_SetTextColor(BLUE);
  84.   ILI9341_DrawLine(110,170,110,230);  
  85.   ILI9341_DrawLine(130,200,220,240);
  86.   
  87.   Delay(0xFFFFFF);
  88.   
  89.   ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */
  90.   
  91.   
  92.   /*画矩形*/

  93.   LCD_ClearLine(LINE(7));        /* 清除单行文字 */
  94.         LCD_SetTextColor(BLUE);

  95.   ILI9341_DispStringLine_EN_CH(LINE(7),"画矩形:");

  96.         LCD_SetTextColor(RED);
  97.   ILI9341_DrawRectangle(50,200,100,30,1);
  98.         
  99.         LCD_SetTextColor(GREEN);
  100.   ILI9341_DrawRectangle(160,200,20,40,0);
  101.         
  102.         LCD_SetTextColor(BLUE);
  103.   ILI9341_DrawRectangle(170,200,50,20,1);
  104.   
  105.   Delay(0xFFFFFF);
  106.         
  107.         ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

  108.   /* 画圆 */
  109.   LCD_ClearLine(LINE(7));        /* 清除单行文字 */
  110.         LCD_SetTextColor(BLUE);
  111.         
  112.   ILI9341_DispStringLine_EN_CH(LINE(7),"画圆");
  113.         
  114.         LCD_SetTextColor(RED);
  115.   ILI9341_DrawCircle(100,200,20,0);
  116.         
  117.         LCD_SetTextColor(GREEN);
  118.   ILI9341_DrawCircle(100,200,10,1);
  119.         
  120.         LCD_SetTextColor(BLUE);
  121.         ILI9341_DrawCircle(140,200,20,0);

  122.   Delay(0xFFFFFF);
  123.   
  124.   ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

  125. }


  126. /**
  127.   * @brief  简单延时函数
  128.   * @param  nCount :延时计数值
  129.   * @retval 无
  130.   */        
  131. static void Delay ( __IO uint32_t nCount )
  132. {
  133.   for ( ; nCount != 0; nCount -- );
  134.         
  135. }



  136. /*"当"字符的字模16x16 */           
  137. unsigned char charater_matrix[] =   
  138. { /*"当",0*/
  139. 0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7F,0xF8,0x00,        0x08,
  140. 0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,0x00,0x08,0x00,0x08,0x7F,0xF8,0x00,0x08,

  141. };   
  142.   
  143. /**
  144.   * @brief  使用串口在上位机打印字模
  145.         *                                        演示字模显示原理
  146.   * @retval 无
  147.   */
  148. void Printf_Charater(void)   
  149. {   
  150.         int i,j;   
  151.         unsigned char kk;
  152.   
  153.         /*i用作行计数*/
  154.   for ( i=0;i<16;i++)   
  155.         {   
  156.                 /*j用作一字节内数据的移位计数*/
  157.                 /*一行像素的第一个字节*/
  158.     for(j=0; j<8; j++)   
  159.     {      
  160.                         /*一个数据位一个数据位地处理*/
  161.       kk = charater_matrix[2*i] << j ;  //左移J位         
  162.                         if( kk & 0x80)     
  163.                         {   
  164.                                 printf("*"); //如果最高位为1,输出*号,表示笔迹
  165.                         }   
  166.                         else  
  167.                         {   
  168.                                 printf(" "); //如果最高位为0,输出空格,表示空白  
  169.                         }   
  170.     }   
  171.                 /*一行像素的第二个字节*/
  172.     for(j=0; j<8; j++)   
  173.                 {              
  174.       kk = charater_matrix[2*i+1] << j ;  //左移J位   
  175.       
  176.                         if( kk & 0x80)         
  177.                         {   
  178.                                 printf("*"); //如果最高位为1,输出*号,表示笔迹   
  179.                         }   
  180.                         else  
  181.                         {   
  182.                                 printf(" "); //如果最高位为0,输出空格,表示空白
  183.                         }   
  184.                 }         
  185.     printf("\n");    //输出完一行像素,换行
  186.         }   
  187.         printf("\n\n");                 //一个字输出完毕
  188. }   



  189. /* ------------------------------------------end of file---------------------------------------- */

复制代码

所有资料51hei提供下载:
29-液晶显示中英文.rar (7.49 MB, 下载次数: 169)
回复

使用道具 举报

ID:335118 发表于 2018-5-21 22:52 | 显示全部楼层
理解原理核心还是很有必要的
回复

使用道具 举报

ID:290380 发表于 2019-6-4 12:33 | 显示全部楼层
理解原理核心还是很有必要的
回复

使用道具 举报

ID:55689 发表于 2020-4-11 06:44 | 显示全部楼层

理解原理核心还是很有必要的
回复

使用道具 举报

ID:296704 发表于 2020-5-5 17:00 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:135334 发表于 2020-5-7 15:25 | 显示全部楼层
是我需要的
回复

使用道具 举报

ID:70490 发表于 2020-6-16 20:30 | 显示全部楼层
是我需要的,感谢分享
回复

使用道具 举报

ID:70044 发表于 2020-10-4 22:19 | 显示全部楼层
下载下来试试,最近国庆在家打算做个中文的桌面小显示屏
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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