找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5254|回复: 0
收起左侧

STM32液晶屏显示英文(字库在外部FLASH)

[复制链接]
ID:251110 发表于 2018-10-5 11:04 | 显示全部楼层 |阅读模式


单片机源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @date    2013-xx-xx
  7.   * @brief   液晶显示汉字实验(字库在外部FLASH)

  8.   */

  9. #include "stm32f10x.h"
  10. #include "./usart/bsp_usart.h"       
  11. #include "./lcd/bsp_ili9341_lcd.h"
  12. #include "./flash/bsp_spi_flash.h"

  13. static void LCD_Test(void);       
  14. static void Delay ( __IO uint32_t nCount );

  15. void Printf_Charater(void)   ;


  16. int main(void)
  17. {       
  18.         //LCD 初始化
  19.         ILI9341_Init ();         

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

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



  39. /*用于测试各种液晶的函数*/
  40. void LCD_Test(void)
  41. {
  42.         /*演示显示变量*/
  43.         static uint8_t testCNT = 0;       
  44.         char dispBuff[100];
  45.        
  46.         testCNT++;       
  47.        
  48.         LCD_SetFont(&Font16x24);
  49.         LCD_SetColors(BLACK,WHITE); //(字体颜色,背景颜色)

  50.   ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,显示全黑 */
  51.         /********显示字符串示例*******/
  52. //1,单行字
  53.        
  54. //  ILI9341_DispStringLine_EN_CH(LINE(0),"奥");
  55. //  ILI9341_DispStringLine_EN_CH(LINE(1),"运");
  56. //  ILI9341_DispStringLine_EN_CH(LINE(2),"五");
  57. //  ILI9341_DispStringLine_EN_CH(LINE(3),"环");
  58.        
  59. //2,特定位置字
  60.         //Horizontal and Vertical     水平、垂直
  61.         ILI9341_DisplayStringEx(10,1*10,25,25,(uint8_t *)"angleH:",0);  //x坐标,y坐标,几乘几的大小
  62. //        ILI9341_DisplayStringEx(20,1*10,25,25,(uint8_t *)"n",0);
  63.   ILI9341_DisplayStringEx(10,1*100,25,25,(uint8_t *)"angleV:",0);
  64. //        ILI9341_DisplayStringEx(30,1*10,25,25,(uint8_t *)"g",0);  //x坐标,y坐标,几乘几的大小
  65. //        ILI9341_DisplayStringEx(40,1*10,25,25,(uint8_t *)"l",0);
  66. //        ILI9341_DisplayStringEx(50,1*10,25,25,(uint8_t *)"e",0);
  67. //        ILI9341_DisplayStringEx(50,1*10,25,25,(uint8_t *)"1",0);

  68.         /********显示变量示例*******/
  69.         LCD_SetTextColor(GREEN);

  70.         /*使用c标准库把变量转化成字符串*/
  71. //        sprintf(dispBuff,"4 ",testCNT);
  72. //  LCD_ClearLine(LINE(5));        /* 清除单行文字 */
  73.        
  74.         /*然后显示该字符串即可,其它变量也是这样处理*/
  75.         ILI9341_DispStringLine_EN_CH(LINE(5),dispBuff);
  76.        

  77. //        /*******显示图形示例******/
  78. //  /* 画直线 */
  79. //        //两点确定一条直线,(x1,y1,x2,y2)
  80. //  
  81. //  LCD_ClearLine(LINE(7));/* 清除单行文字 */
  82. //        LCD_SetTextColor(BLUE);

  83. //  ILI9341_DispStringLine_EN_CH(LINE(7),"5");
  84. //  
  85. //        LCD_SetTextColor(RED);
  86. //  ILI9341_DrawLine(50,170,210,170);  
  87. //  ILI9341_DrawLine(50,200,210,200);
  88. //  
  89. //        LCD_SetTextColor(GREEN);
  90. //  ILI9341_DrawLine(100,150,100,270);  
  91. //  ILI9341_DrawLine(150,150,150,270);
  92. //       
  93. //        LCD_SetTextColor(BLUE);
  94. //  ILI9341_DrawLine(130,170,110,170);  
  95. //  ILI9341_DrawLine(130,200,220,200);
  96. //  
  97. //  Delay(0xFFFFFF);
  98. //  
  99. //  ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */
  100.   
  101.   
  102. //  /*画矩形*/
  103. //        //(顶端的x坐标,y坐标,宽度,高度,1:全满/0:边界)

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

  106. ////  ILI9341_DispStringLine_EN_CH(LINE(7),"6");

  107. //        LCD_SetTextColor(RED);
  108. //  ILI9341_DrawRectangle(0,20,100,30,1);
  109. //       
  110. //        LCD_SetTextColor(GREEN);
  111. //  ILI9341_DrawRectangle(160,200,20,40,0);
  112. //       
  113. //        LCD_SetTextColor(BLUE);
  114. //  ILI9341_DrawRectangle(170,200,50,20,1);
  115. //  
  116. //  Delay(0xFFFFFF);
  117. //       
  118. //        ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

  119.   /* 画圆 */
  120.        
  121.         LCD_SetTextColor(BLACK);
  122.   ILI9341_DrawCircle(120,150,20,0); //圆心X坐标,圆心y坐标,半径,1:圆内全部:0:园边界
  123.        
  124.         LCD_SetTextColor(BLUE);
  125.   ILI9341_DrawCircle(80,150,20,0);
  126.        
  127.         LCD_SetTextColor(RED);
  128.         ILI9341_DrawCircle(160,150,20,0);

  129.   LCD_SetTextColor(GREEN);
  130.         ILI9341_DrawCircle(140,180,20,0);
  131.        
  132.         LCD_SetTextColor(YELLOW);
  133.         ILI9341_DrawCircle(100,180,20,0);
  134.   Delay(0xFFFFFF);

  135.   Delay(0xFFFFFF);
  136.   
  137.   ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

  138. }


  139. /**
  140.   * @brief  简单延时函数
  141.   * @param  nCount :延时计数值
  142.   * @retval 无
  143.   */       
  144. static void Delay ( __IO uint32_t nCount )
  145. {
  146.   for ( ; nCount != 0; nCount -- );
  147.        
  148. }



  149. /*"当"字符的字模16x16 */           
  150. unsigned char charater_matrix[] =   
  151. { /*"当",0*/
  152. 0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7F,0xF8,0x00,0x08,
  153. 0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,0x00,0x08,0x00,0x08,0x7F,0xF8,0x00,0x08,
  154. };   
  155.   
  156. /**
  157.   * @brief  使用串口在上位机打印字模
  158.         *                                        演示字模显示原理
  159.   * @retval 无
  160.   */
  161. void Printf_Charater(void)   
  162. {   
  163.         int i,j;   
  164.         unsigned char kk;
  165.   
  166.         /*i用作行计数*/
  167.   for ( i=0;i<16;i++)   
  168.         {   
  169.                 /*j用作一字节内数据的移位计数*/
  170.                 /*一行像素的第一个字节*/
  171.     for(j=0; j<8; j++)   
  172.     {      
  173.                         /*一个数据位一个数据位地处理*/
  174.       kk = charater_matrix[2*i] << j ;  //左移J位         
  175.                         if( kk & 0x80)     
  176.                         {   
  177.                                 printf("*"); //如果最高位为1,输出*号,表示笔迹
  178.                         }   
  179.                         else  
  180.                         {   
  181.                                 printf(" "); //如果最高位为0,输出空格,表示空白  
  182.                         }   
  183.     }   
  184.                 /*一行像素的第二个字节*/
  185.     for(j=0; j<8; j++)   
  186.                 {              
  187.       kk = charater_matrix[64+2*i+1] << j ;  //左移J位   
  188.       
  189.                         if( kk & 0x80)         
  190.                         {   
  191.                                 printf("*"); //如果最高位为1,输出*号,表示笔迹   
  192.                         }   
  193.                         else  
  194.                         {   
  195.                                 printf(" "); //如果最高位为0,输出空格,表示空白
  196.                         }   
  197.                 }         
  198.     printf("\n");    //输出完一行像素,换行
  199.         }   
  200.         printf("\n\n");                 //一个字输出完毕
  201. }   



  202. /* ------------------------------------------end of file---------------------------------------- */
复制代码

所有资料51hei提供下载:
1-液晶显示中英文(字库在外部FLASH).rar (341.92 KB, 下载次数: 51)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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