历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2019年10月14日 | STM32F4更新W25Q16字库源程序

2019-10-14 来源:eefocus

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

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

单片机源程序如下:

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

#include "lcd.h"

#include "key.h"  

#include "sram.h"   

#include "malloc.h" 

#include "usmart.h"  

#include "sdio_sdcard.h"    

#include "malloc.h" 

#include "w25qxx.h"    

#include "ff.h"  

#include "exfuns.h"    

#include "fontupd.h"

#include "text.h"        


//汉字显示 实验 -库函数版本

//STM32F4工程模板-库函数版本



int main(void)

{        

        u32 fontcnt;                  

        u8 i,j;

        u8 fontx[2];//gbk码

        u8 key,t;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

        delay_init(168);  //初始化延时函数

        uart_init(115200);                //初始化串口波特率为115200

        LED_Init();                                        //初始化LED  

        LCD_Init();                                        //LCD初始化  

        KEY_Init();                                        //按键初始化  

        W25QXX_Init();                                //初始化W25Q128

        usmart_dev.init(168);                //初始化USMART

        my_mem_init(SRAMIN);                //初始化内部内存池 

        my_mem_init(SRAMCCM);                //初始化CCM内存池 

        exfuns_init();                                //为fatfs相关变量申请内存  

          f_mount(fs[0],"0:",1);                 //挂载SD卡 

        f_mount(fs[1],"1:",1);                 //挂载FLASH.

//        W25QXX_Erase_Chip();//擦除

        while(font_init())                         //检查字库

        {

UPD:    

                LCD_Clear(WHITE);                           //清屏

                POINT_COLOR=RED;                        //设置字体为红色                                

                LCD_ShowString(30,50,200,16,16,"Mcudev STM32F4");

                while(SD_Init())                        //检测SD卡

                {

                        LCD_ShowString(30,70,200,16,16,"SD Card Failed!");

                        delay_ms(200);

                        LCD_Fill(30,70,200+30,70+16,WHITE);

                        delay_ms(200);                    

                }                                                                                                                     

                LCD_ShowString(30,70,200,16,16,"SD Card OK");

                LCD_ShowString(30,90,200,16,16,"Font Updating...");

                key=update_font(20,110,16,"0:");//更新字库

                while(key)//更新失败                

                {                                           

                        LCD_ShowString(30,110,200,16,16,"Font Update Failed!");

                        delay_ms(200);

                        LCD_Fill(20,110,200+20,110+16,WHITE);

                        delay_ms(200);                       

                }                   

                LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");

                delay_ms(1500);        

                LCD_Clear(WHITE);//清屏               

        }  

        POINT_COLOR=RED;       

        Show_Str(30,50,200,16,"Mcudev_STM32F407开发板",16,0);                                             

        Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             

        //Show_Str(30,90,200,16,"嵌入式开发网mcudev",16,0);                                             

        Show_Str(30,110,200,16,"2018年4月22日",16,0);

        Show_Str(30,130,200,16,"按KEY0,更新字库",16,0);

        POINT_COLOR=BLUE;  

        Show_Str(30,150,200,16,"内码高字节:",16,0);                                             

        Show_Str(30,170,200,16,"内码低字节:",16,0);                                             

        Show_Str(30,190,200,16,"汉字计数器:",16,0);


//        Show_Str(30,220,200,24,"对应汉字为:",24,0); //因为FLASH W25Q16无法装下所有三种字库,暂时不提供对24点阵字库的显示

        Show_Str(30,244,200,16,"对应汉字(16*16)为:",16,0);                         

        Show_Str(30,260,200,12,"对应汉字(12*12)为:",12,0);                         

        while(1)

        {

                fontcnt=0;

                for(i=0x81;i<0xff;i++)

                {                

                        fontx[0]=i;

                        LCD_ShowNum(118,150,i,3,16);                //显示内码高字节    

                        for(j=0x40;j<0xfe;j++)

                        {

                                if(j==0x7f)continue;

推荐阅读

史海拾趣

Astec [Astec America, Inc]公司的发展小趣事

随着技术的不断成熟和市场的不断扩大,Astec开始积极寻求市场拓展的机会。公司不仅加大了在国内市场的宣传力度,还通过参加国际电子展会等方式,将产品推向了国际市场。同时,Astec还注重品牌形象的建立,通过提供优质的产品和服务,逐渐树立了良好的品牌形象。

ETC公司的发展小趣事

速通科技始终将用户体验放在首位。公司不断完善ETC系统的服务功能,提高了系统的稳定性和易用性。同时,速通科技还建立了完善的客户服务体系,为用户提供24小时不间断的在线客服支持。这些举措大大提高了用户对ETC系统的满意度和信任度。

固得沃克(GOODWORK)公司的发展小趣事

为了进一步提升品牌影响力和市场占有率,固得沃克积极寻求与行业内知名企业的战略合作。例如,公司与锐单商城达成战略合作,共同推动电子元器件的在线销售和服务。这一合作不仅拓宽了公司的销售渠道,还提升了公司的品牌知名度和美誉度。通过不断参与行业交流和合作,固得沃克在电子行业中的影响力日益增强,为公司的长远发展奠定了坚实基础。

FOTEK公司的发展小趣事

随着业务的不断拓展,福禄克意识到全球化布局的重要性。1970年代,公司在英国设立了首个海外生产基地,随后又在荷兰和中国等地建立工厂。这一系列举措不仅降低了生产成本,还使福禄克能够更贴近全球市场需求,提供更加快速和灵活的服务。同时,福禄克在全球范围内建立了广泛的销售和服务网络,进一步巩固了其市场地位。

Delta Electronics公司的发展小趣事

近年来,网络安全问题日益严重。2022年,Delta Electronics遭遇了一起勒索软件攻击。面对这一挑战,公司迅速启动了应急响应机制,与专业的网络安全机构合作,成功阻止了攻击者的进一步行动。这一事件虽然给公司带来了一定的损失,但也让Delta更加重视网络安全问题,加强了公司网络安全防护体系的建设。

Fermionics Lasertech Inc公司的发展小趣事

随着公司规模的不断扩大,Fermionics Lasertech Inc公司开始寻求国际合作与全球布局。他们与国外的知名企业和研究机构建立了紧密的合作关系,共同开展技术研发和市场拓展。同时,公司还在海外设立了多个分支机构和办事处,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,还为公司的长期发展提供了有力保障。

问答坊 | AI 解惑

AVR(MEGA16)入门教程,详细的图解教程

AVR(MEGA16)入门教程,详细的图解教程…

查看全部问答>

如何用红外对射开关控制继电器

我想用一个红外对射开关控制欧姆龙MY2NJ继电器工作,对射开关的型号见图片 我用黄颜色的线接到继电器,继电器不能工作,继电器都是好的,我用12V电压直接控制继电器,是可以工作的,但用感应的不知道怎么接法。 红外对射开关工作电压是5V,继电器 ...…

查看全部问答>

在动车组两个车厢中的无线传输用什么样的方式更好

想在动车组两个车厢中实现数据的无线传输。 也考虑到一些实现方法,但是由于动车组有屏蔽大,速度快特点,造成无线数据包传输难度很大。 请问各位高手,用什么方式能达到这个目的呢?前提是不对车厢作出改造,比如车体外安装天线等 …

查看全部问答>

smart lcd 和普通lcd有哪些区别,驱动起来有何不同

smart lcd 和普通lcd有哪些区别,驱动起来有何不同?…

查看全部问答>

又是一个石沉大海的问题!!??

如何在驱动代码中,获得U盘的插入?并获得其盘符(注:此U盘无文件系统) 谢谢,有钱的捧个钱场,无钱的捧个情场…

查看全部问答>

Fluke 27-II防水防尘数字多用表精确的使用方法

Fluke 27-II 工业多用表 新型 Fluke 27 II数字多用表树立了在困难情况下进行测量的新标准,它具有优异的功能和准确度,可以轻松解决大多数电气故障。 这款多用表均符合 IP 67(防水和防尘)规格,正在接受 MSHA 的认证审批,并且拥有更广的工作温 ...…

查看全部问答>

网页转换工具FCARM和makefsfile的使用简介

    首先在这里要提一下Keil的网页转换工具FCARM.exe的使用,花费了我好几个小时。TI也有一个类似的程序,是Makefsfile,并且源码公开的。     这个FCARM.exe,一直认为只要这个custom arguments里边设置好了FCarm.exe的路径就可以在勾 ...…

查看全部问答>

有没有可以监视USB数据传送的软件?

                                 就像串口调试时监视串口那种的,谢谢。。。…

查看全部问答>

新手问一个简单的问题

我写了一个简单的求正旋值的c程序: #include<math.h> #define NX 180 #define pi 3.14159 short i; double x[NX]; double r[NX]; void main(void) { for(i=0;i<NX;i++)   {x=pi*i/180;    r=sin(x);   ...…

查看全部问答>