找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6322|回复: 2
收起左侧

STM32F4更新W25Q16字库源程序

[复制链接]
ID:319311 发表于 2018-4-30 12:41 | 显示全部楼层 |阅读模式
一开始我下载了读取SD卡的程序,但液晶显示屏幕上没反应,于是我就下载了这个关于更新字库的程序,就有反应了。
本实验将实现如下功能:开机的时候先检测W25Q16中是否已经存在字库,如果存在,则按次序显示汉字(三种字体都显示)。如果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNIGBK.BIN、GBK12.FON、GBK16.FON (这几个文件的由来,我们前面已经介绍了)。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。通过按按键KEY0,可以强制更新字库。同样我们也是用DS0来指示程序正在运行。
0.png
需要拷贝到SD卡根目录文件
1,在系统(或字库)更新的时候,必须用到SYSTEM文件夹,请将该文件夹下的SYSTEM文件夹拷贝到SD卡根目录。
2,测试用文件--该文件夹是用来测试用的,里面包含一些文本/图片/音乐/视频等文件,这个文件不一定要拷贝。
3,默认我们已经将这两个文件夹拷贝到了FLASH磁盘(磁盘名:ALIENTEK,即W25Q128)里面。

注意:
1,本例程支持12*12/16*16 大小的汉字显示。
2,如果想更新字库,必须自备SD卡一个。

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "key.h"  
  7. #include "sram.h"   
  8. #include "malloc.h"
  9. #include "usmart.h"  
  10. #include "sdio_sdcard.h"   
  11. #include "malloc.h"
  12. #include "w25qxx.h"   
  13. #include "ff.h"  
  14. #include "exfuns.h"   
  15. #include "fontupd.h"
  16. #include "text.h"       

  17. //汉字显示 实验 -库函数版本
  18. //STM32F4工程模板-库函数版本


  19. int main(void)
  20. {        
  21.         u32 fontcnt;                  
  22.         u8 i,j;
  23.         u8 fontx[2];//gbk码
  24.         u8 key,t;
  25.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  26.         delay_init(168);  //初始化延时函数
  27.         uart_init(115200);                //初始化串口波特率为115200
  28.         LED_Init();                                        //初始化LED  
  29.         LCD_Init();                                        //LCD初始化  
  30.         KEY_Init();                                        //按键初始化  
  31.         W25QXX_Init();                                //初始化W25Q128
  32.         usmart_dev.init(168);                //初始化USMART
  33.         my_mem_init(SRAMIN);                //初始化内部内存池
  34.         my_mem_init(SRAMCCM);                //初始化CCM内存池
  35.         exfuns_init();                                //为fatfs相关变量申请内存  
  36.           f_mount(fs[0],"0:",1);                 //挂载SD卡
  37.         f_mount(fs[1],"1:",1);                 //挂载FLASH.
  38. //        W25QXX_Erase_Chip();//擦除
  39.         while(font_init())                         //检查字库
  40.         {
  41. UPD:   
  42.                 LCD_Clear(WHITE);                           //清屏
  43.                 POINT_COLOR=RED;                        //设置字体为红色                                
  44.                 LCD_ShowString(30,50,200,16,16,"Mcudev STM32F4");
  45.                 while(SD_Init())                        //检测SD卡
  46.                 {
  47.                         LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
  48.                         delay_ms(200);
  49.                         LCD_Fill(30,70,200+30,70+16,WHITE);
  50.                         delay_ms(200);                    
  51.                 }                                                                                                                     
  52.                 LCD_ShowString(30,70,200,16,16,"SD Card OK");
  53.                 LCD_ShowString(30,90,200,16,16,"Font Updating...");
  54.                 key=update_font(20,110,16,"0:");//更新字库
  55.                 while(key)//更新失败               
  56.                 {                                           
  57.                         LCD_ShowString(30,110,200,16,16,"Font Update Failed!");
  58.                         delay_ms(200);
  59.                         LCD_Fill(20,110,200+20,110+16,WHITE);
  60.                         delay_ms(200);                       
  61.                 }                   
  62.                 LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");
  63.                 delay_ms(1500);       
  64.                 LCD_Clear(WHITE);//清屏               
  65.         }  
  66.         POINT_COLOR=RED;      
  67.         Show_Str(30,50,200,16,"Mcudev_STM32F407开发板",16,0);                                             
  68.         Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             
  69.         //Show_Str(30,90,200,16,"嵌入式开发网mcudev",16,0);                                             
  70.         Show_Str(30,110,200,16,"2018年4月22日",16,0);
  71.         Show_Str(30,130,200,16,"按KEY0,更新字库",16,0);
  72.         POINT_COLOR=BLUE;  
  73.         Show_Str(30,150,200,16,"内码高字节:",16,0);                                             
  74.         Show_Str(30,170,200,16,"内码低字节:",16,0);                                             
  75.         Show_Str(30,190,200,16,"汉字计数器:",16,0);

  76. //        Show_Str(30,220,200,24,"对应汉字为:",24,0); //因为FLASH W25Q16无法装下所有三种字库,暂时不提供对24点阵字库的显示
  77.         Show_Str(30,244,200,16,"对应汉字(16*16)为:",16,0);                         
  78.         Show_Str(30,260,200,12,"对应汉字(12*12)为:",12,0);                         
  79.         while(1)
  80.         {
  81.                 fontcnt=0;
  82.                 for(i=0x81;i<0xff;i++)
  83.                 {               
  84.                         fontx[0]=i;
  85.                         LCD_ShowNum(118,150,i,3,16);                //显示内码高字节   
  86.                         for(j=0x40;j<0xfe;j++)
  87.                         {
  88.                                 if(j==0x7f)continue;
  89.                                 fontcnt++;
  90.                                 LCD_ShowNum(118,170,j,3,16);        //显示内码低字节         
  91.                                 LCD_ShowNum(118,190,fontcnt,5,16);//汉字计数显示         
  92.                                  fontx[1]=j;
  93. //                                Show_Font(30+132,220,fontx,24,0);          
  94.                                 Show_Font(30+144,244,fontx,16,0);                                            
  95.                                 Show_Font(30+108,260,fontx,12,0);                                            
  96.                                 t=200;
  97.                                 while(t--)//延时,同时扫描按键
  98.                                 {
  99.                                         delay_ms(1);
  100.                                         key=KEY_Scan(0);
  101.                                         if(key==KEY0_PRES)goto UPD;
  102.                                 }
  103.                                 LED0=!LED0;
  104.                         }   
  105.                 }       
  106.         }
  107. }

  108. //int main(void)
  109. //{               
  110. //        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  111. //       
  112. //        delay_init(168);  //初始化延时函数
  113. //        uart_init(115200);                //初始化串口波特率为115200
  114. //        LED_Init();                                        //初始化LED  
  115. //         LCD_Init();                                        //LCD初始化  
  116. //         KEY_Init();                                        //按键初始化  
  117. //        W25QXX_Init();                                //初始化W25Q128
  118. //        usmart_dev.init(168);                //初始化USMART
  119. //        my_mem_init(SRAMIN);                //初始化内部内存池
  120. //        my_mem_init(SRAMCCM);                //初始化CCM内存池
  121. //        exfuns_init();                                //为fatfs相关变量申请内存  
  122. //          f_mount(fs[0],"0:",1);                 //挂载SD卡
  123. //         f_mount(fs[1],"1:",1);                 //挂载FLASH.
  124. ////        W25QXX_Erase_Chip();//擦除
  125. //       
  126. //        while(font_init())                         //检查字库
  127. //        {   
  128. //                LCD_Clear(WHITE);                           //清屏
  129. //                 POINT_COLOR=RED;                        //设置字体为红色                                
  130. //                LCD_ShowString(30,50,200,16,16,"Mcudev STM32F4");
  131. //                while(SD_Init())                        //检测SD卡
  132. //                {
  133. //                        LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
  134. //                        delay_ms(200);
  135. //                        LCD_Fill(30,70,200+30,70+16,WHITE);
  136. //                        delay_ms(200);                    
  137. //                }                                                                                                                     
  138. //                   
  139. //                LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");
  140. //                delay_ms(1500);       
  141. //                LCD_Clear(WHITE);//清屏               
  142. //        }  
  143. //       
  144. //        POINT_COLOR=RED;      
  145. //        Show_Str(30,50,200,16,"Mcudev_STM32F407开发板",16,0);                                             
  146. //        Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             
  147. //        Show_Str(30,90,200,16,"嵌入式开发网mcudev",16,0);                                             
  148. //        Show_Str(30,110,200,16,"2015年8月15日",16,0);
  149. //        Show_Str(30,130,200,16,"按KEY0,更新字库",16,0);
  150. //         POINT_COLOR=BLUE;  
  151. //        Show_Str(30,150,200,16,"林本源vdfdhdfhfhfhfgh斯蒂芬归还建行开户结果就发给回复:",16,0);                                             
  152. ……………………

  153. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
CS_show_HZ.rar (8.96 MB, 下载次数: 88)
回复

使用道具 举报

ID:575489 发表于 2019-10-14 13:48 | 显示全部楼层
正是需要的,谢谢!
回复

使用道具 举报

ID:575489 发表于 2019-10-14 13:49 | 显示全部楼层
这个要支持一下!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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