找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32+W25Q128+ILI93xx液晶汉字显示实验(源代码)

[复制链接]
ID:312779 发表于 2018-4-21 13:23 | 显示全部楼层 |阅读模式
实验目的:
        学习汉字显示原理,掌握字库制作以及LCD显示汉字的方法.
        
硬件资源:
        1,DS0(连接在PB5)
        2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面)
        3,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD片选/A10接RS)
        4,按键KEY0(PE4)
        5,SD卡,通过SDIO(SDIO_D0~D4(PC8~PC11),SDIO_SCK(PC12),SDIO_CMD(PD2))连接
        6,W25Q128(SPI FLASH芯片,连接在SPI2上)
               
实验现象:
        本实验开机的时候先检测W25Q128中是否已经存在字库,如果存在,则按次序显示汉字(三种字体都显示)。如
        果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNIGBK.BIN、
        GBK12.FON、GBK16.FON和GBK24.FON(这几个文件的由来,我们前面已经介绍了)。在检测到这些文件之后,
        就开始更新字库,更新完毕才开始显示汉字。通过按按键KEY0,可以强制更新字库。同样我们也是用DS0来指
        示程序正在运行。

注意事项:
        1,4.3寸和7寸屏需要比较大电流,USB供电可能不足,请用外部电源适配器(推荐外接12V 1A电源).
        2,本例程在LCD_Init函数里面(在ILI93xx.c),用到了printf,如果不初始化串口1,将导致液晶无法显示!!
        3,本例程需自备标准SD卡一张(即大卡,也可以用TF卡+卡套).
        4,本例程支持12*12/16*16/24*24大小的汉字显示。
        5,字库更新,需自备SD卡一个,并拷贝光盘:5,SD卡根目录文件 里面的所有内容到SD卡根目录,然后将SD卡插到开发板.

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "sram.h"
#include "malloc.h"
#include "sdio_sdcard.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "string.h"
#include "usmart.h"
#include "fontupd.h"
#include "text.h"            
int main(void)
{        
        u32 fontcnt;                  
        u8 i,j;
        u8 fontx[2];                                                //gbk码
        u8 key,t;
        
    HAL_Init();                                     //初始化HAL库   
    Stm32_Clock_Init(RCC_PLL_MUL9);           //设置时钟,72M
        delay_init(72);                               //初始化延时函数
        uart_init(115200);                                        //初始化串口        
        usmart_dev.init(72);                                //初始化USMART        
        LED_Init();                                                        //初始化LED        
        KEY_Init();                                                        //初始化按键
         LCD_Init();                                           //初始化LCD FSMC接口
        SRAM_Init();                                                //初始化外部SRAM  
        my_mem_init(SRAMIN);                                //初始化内部内存池
        my_mem_init(SRAMEX);                                //初始化外部内存池
        
        exfuns_init();                                                //为fatfs相关变量申请内存  
          f_mount(fs[0],"0:",1);                                 //挂载SD卡
         f_mount(fs[1],"1:",1);                                 //挂载FLASH.
        while(font_init())                                         //检查字库
        {
UPD:   
                LCD_Clear(WHITE);                                   //清屏
                 POINT_COLOR=RED;                                //设置字体为红色                                
                LCD_ShowString(30,50,200,16,16,"ELITE STM32 ^_^");
                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,"战舰STM32F103开发板",16,0);                                             
        Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             
        Show_Str(30,90,200,16,"正点原子@ALIENTEK",16,0);                                             
        Show_Str(30,110,200,16,"2017年6月1日",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);
        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;
                                fontcnt++;
                                LCD_ShowNum(118,170,j,3,16);        //显示内码低字节         
                                LCD_ShowNum(118,190,fontcnt,5,16);//汉字计数显示         
                                 fontx[1]=j;
                                Show_Font(30+132,220,fontx,24,0);         
                                Show_Font(30+144,244,fontx,16,0);                                            
                                Show_Font(30+108,260,fontx,12,0);                                            
                                t=200;
                                while(t--)//延时,同时扫描按键
                                {
                                        delay_ms(1);
                                        key=KEY_Scan(0);
                                        if(key==KEY0_PRES)goto UPD;
                                }
                                LED0=!LED0;
                        }   
                }        
        }
}


汉字显示实验.7z

1.49 MB, 下载次数: 132, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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