历史上的今天

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

正在发生

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

发布者:码梦狂人 来源: eefocus关键字:STM32F4  W25Q16  字库 手机看文章 扫描二维码
随时随地手机看文章

一开始我下载了读取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;

[1] [2]
关键字:STM32F4  W25Q16  字库 引用地址:STM32F4更新W25Q16字库源程序

上一篇:STM32 PWM实现精确输出脉冲数控制电机
下一篇:Stm32f103c8t6工程模板(内部晶振)源码

推荐阅读

一、安装交叉编译工具链:参考博文:更换arm-linux-gcc编译器版本安装arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz交叉编译工具链:sudo tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /cd /opt/FriendlyARM/toolschain/4.5.1/binls //可以看到各种工具链echo $PATH //环境变量指定了去哪里找命令/usr/local/sbin:/usr/local/bin:...
LPWA的定义LPWA – Low power wide area, 低功耗广域技术的简称,使用较低功耗实现远距离的无线信号传输。相较于熟悉的低功耗蓝牙(BLE)、Zigbee和Wifi等技术,LPWA的传输距离更远,一般在公里级,其链接预算(link budget)可达160dBm,而BLE和Zigbee等一般在100dBm以下。和传统的蜂窝网络技术(2G、3G)相比,LPWA的功耗更低,电池供电的设备使...
环境:主机:WIN10开发环境:MDK5.13MCU:STM32F103说明:本文定义了图片控件。OLED屏是单色屏,所以本图片控件支持的是单色BMP图像。将普通图像转换为单色图片可以用工具BmpCvt.exe。将转换后的BMP图像转换为hex文件,可以用Bin2C.exe。这两个工具都是emwin自带工具。源代码:转换后的hex文件再整理成如下的示例格式:battery0.c/*** Copyright (c), 2015-2...
堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。ATMEGA48 在调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0xFF 的地址空间。使用PUSH...

史海拾趣

问答坊 | AI 解惑

自己待完善的技术工作经验体系

1、电子技术资料尽量看西方英文原版的      理由:电子技术发源于西方,那边的人对许多电路问题有很深的认识,研究的很细,条理很清晰,对产品开发的指导性强。尽管国内也有人在研究,但有真正指导生产意义的刊物太少,市面上 ...…

查看全部问答∨

请问为啥pc不能引导ce。image section doesn't fit in allocated block

下载了VM虚拟机。和研博loadcepc 【2.2】 和nk.bin 【2.2】 把虚拟硬盘格成FAT格式 把研博的DOS引导部分解压到c:把loadcepc和nk.bin复制到c: 硬盘开机 看到研博的开机画面了 大概到百分90的时候 出现错误   Error   image ...…

查看全部问答∨

想在上海组个VxWorks开发小团队!有兴趣的进

最近通过导师的介绍认识了一个公司的负责人,有2个基于Vxworks的项目,说可以给我做,省得自己再招人。我也是刚刚着手Vxworks的开发,到上海时间不长,想找几个志同道合的内行组个小团队,一起发展发展,有兴趣且有实际经验的可以联系我,qq:41878 ...…

查看全部问答∨

新手的概念问题

看单片机书的时候出来一些很专业的术语看不懂,前面后面又都没有给解释 请高手给解释一下 同步位移寄存器输出方式 数据从RXD端串行输出或输入,同步信号从TXD端输出,其数据传输率是固定的,为fosc/12 同步信号? 数据传输率? fosc/12 ...…

查看全部问答∨

急~,linux高手,帮我解决在linux上安装ADS??

   linux高手,帮我解决在linux上安装ADS,我用的是red hat .25 的,在那里有下支持linux  ads的!!谢谢了!没用的话,谁能告诉我,在linux下有什么样的ARM编译器!!!…

查看全部问答∨

请问有人做过GPU?

有没有人设计过GPU?我想看看这方面的资料,可不可以告知一下,或者给个资料的地址也可以! 谢谢! 只要资料好,分不够可以加分!…

查看全部问答∨

电脑如何控制一串led灯中的几个灯明灭

在厂房里有一排柜子,每个柜子上有一个led灯,想通过一台电脑来控制其中的几个led灯亮! 问应该采用什么样的解决方案! 我以前很少搞这种跟单片机打交道的项目,所以特来请教,希望高手指点! (是不是每个led灯都配一个51系列的单片机,都带rs ...…

查看全部问答∨

at88sc0104加密芯片里的一段代码,请高手指点啊

这是初始化的一段代码,我初始化后,再往芯片发送随机数就不成功,我怀疑是初始化后熔断了熔丝造成的, 熔丝代码: ucData[0]= (uchar)CM_FAB;         ucReturn = cm_BurnFuse(ucData[0]);         i ...…

查看全部问答∨

机顶盒界面开发咨询

请问各位大侠如何做比较酷的机顶盒界面(比如说立体按钮)? 用C或C++. 只能自己画吗? 有什么注意的地方? 谢谢了 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved