单片机汉字显示实验

单片机 :STM32F407

开发板:DMF407电机开发板

平台:keil V5.31

HSE 为8MHZ

HSI为16MHZ

一、内存申请:

复制代码
exfuns_init();                      /* 为fatfs相关变量申请内存 */

二、初始化

复制代码
USBH_Init(&g_hUSBHost, USBH_UserProcess, HOST_FS);

三、注册

复制代码
USBH_RegisterClass(&g_hUSBHost, USBH_MSC_CLASS);

四、启动

复制代码
USBH_Start(&g_hUSBHost);

五、处理

复制代码
    delay_ms(1800);
    btim_timx_int_init(1000, 840);      /* 84 000 000 / 840 = 100 000 100Khz的计数频率,计数1000次为10ms */
    
    while(usb_mount_status==0)          /* 等待 USB 设备挂载完成 */
    {
        lcd_show_string(30, 30, 200, 16, 16, "STM32", RED);
        lcd_show_string(30, 50, 200, 16, 16, "USB Connecting...", RED);
        delay_ms(200);
        delay_ms(200);
    }
    

    while (fonts_init())                /* 检查字库 */
    {
    UPD:
        printf("update font\r\n");
        usb_mount_status = 0;
        lcd_clear(WHITE);               /* 清屏 */

        USBH_Init(&g_hUSBHost, USBH_UserProcess, HOST_FS);
        USBH_RegisterClass(&g_hUSBHost, USBH_MSC_CLASS);
        USBH_Start(&g_hUSBHost);
        delay_ms(1800);
        btim_timx_int_init(1000, 840);  /* 84 000 000 / 840 = 100 000 100Khz的计数频率,计数1000次为10ms */

        while(usb_mount_status==0)      /* 等待 USB 设备挂载完成 */
        {
            lcd_show_string(30, 30, 200, 16, 16, "STM32", RED);
            lcd_show_string(30, 50, 200, 16, 16, "USB Connecting...", RED);
            delay_ms(200);
            delay_ms(200);
        }

        lcd_clear(WHITE);               /* 清屏 */
        lcd_show_string(30, 30, 200, 16, 16, "STM32", RED);
        lcd_show_string(30, 50, 200, 16, 16, "Font Updating...", RED);

        key = fonts_update_font(20, 90, 16, (uint8_t *)"1:", RED);  /* 更新字库 */
        while (key)         /* 更新失败 */
        {
            lcd_show_string(30, 90, 200, 16, 16, "Font Update Failed!", RED);
            delay_ms(200);
            lcd_fill(20, 90, 200 + 20, 90 + 16, WHITE);
            delay_ms(200);
        }
        TIM3->CR1&=~(1<<0); /* 关闭定时器3 */
        lcd_show_string(30, 90, 200, 16, 16, "Font Update Success!   ", RED);
        delay_ms(1500);
        lcd_clear(WHITE);   /* 清屏 */
    }

 TIM3->CR1&=~(1<<0);     /* 关闭定时器3 */

    lcd_clear(WHITE);       /* 清屏 */
    text_show_string(30, 30, 200, 16, "正点原子STM32开发板", 16, 0, RED);
    text_show_string(30, 50, 200, 16, "GBK字库测试程序", 16, 0, RED);
    text_show_string(30, 70, 200, 16, "正点原子@ALIENTEK", 16, 0, RED);
    text_show_string(30, 90, 200, 16, "按KEY0,更新字库", 16, 0, RED);

    text_show_string(30, 110, 200, 16, "内码高字节:", 16, 0, BLUE);
    text_show_string(30, 130, 200, 16, "内码低字节:", 16, 0, BLUE);
    text_show_string(30, 150, 200, 16, "汉字计数器:", 16, 0, BLUE);

    text_show_string(30, 180, 200, 24, "对应汉字为:", 24, 0, BLUE);
    text_show_string(30, 204, 200, 16, "对应汉字(16*16)为:", 16, 0, BLUE);
    text_show_string(30, 220, 200, 16, "对应汉字(12*12)为:", 12, 0, BLUE);

    while (1)
    {
        for (i = 0x81; i < 0xff; i++)               /* GBK内码高字节范围为0x81~0xFE */
        {
            fontx[0] = i;
            lcd_show_num(118, 110, i, 3, 16, BLUE); /* 显示内码高字节 */

            for (j = 0x40; j < 0xfe; j++)           /* GBK内码低字节范围为 0x40~0x7E, 0x80~0xFE) */
            {
                if (j == 0x7f)
                    continue;

                fontcnt++;
                lcd_show_num(118, 130, j, 3, 16, BLUE);       /* 显示内码低字节 */
                lcd_show_num(118, 150, fontcnt, 5, 16, BLUE); /* 汉字计数显示 */
                fontx[1] = j;
                text_show_font(30 + 132, 180, fontx, 24, 0, BLUE);
                text_show_font(30 + 144, 204, fontx, 16, 0, BLUE);
                text_show_font(30 + 108, 220, fontx, 12, 0, BLUE);
                t = 200;
                
                while (t--)     /* 延时,同时扫描按键 */
                {
                    delay_ms(1);
                    key = key_scan(0);
                    if (key == KEY0_PRES)
                    {
                        goto UPD;    /* 跳转到UPD位置(强制更新字库) */
                    }
                }
                LED0_TOGGLE();
            }
        }
    }

测试结果:

1、不插U盘:

2、插一个不能识别的U盘

3、可以识别的U盘,并加载字库文件

相关推荐
开发笔记-阿牛7 小时前
解析一款有意思的产品||CK6159A语音芯片设计的儿童专注力训练机-舒尔特玩具
stm32·单片机·嵌入式硬件·音频
残影飞雪8 小时前
ESP32-C5下载烧录固件失败报错的原因
单片机·嵌入式硬件
搞全栈小苏9 小时前
SIMetrix_simplis8.4安装教程——附安装包
stm32·单片机·嵌入式硬件·电力电子
qq_5739678210 小时前
STM32控制器
stm32·单片机·嵌入式硬件
某林21211 小时前
履带小车底盘stm32F103RCT6开发
人工智能·stm32·单片机·嵌入式硬件·架构·人机交互·ros2
sramdram11 小时前
低功耗MCU微控制器在动态血糖仪(CGM)中的应用方案
单片机·嵌入式硬件·mcu·mcu微控制器
Dlrb121111 小时前
ARM--IMX6ULL的SDK学习,BSP开发工程管理,以及链接脚本与Makefile的编写
单片机·嵌入式硬件·arm·sdk·链接脚本·i.mx6ull·cortex-a7
李永奉12 小时前
杰理可视化SDK开发-配置ANC主动降噪功能模块教程
单片机·嵌入式硬件·物联网
云泽80812 小时前
嵌入式环境搭建(一):Keil MDK5 安装流程及 DFP 器件包配置实战
嵌入式硬件·keil5·keil mdk5·dfp器件包配置
亿道电子Emdoor12 小时前
【Aitium】PCB导出DXF文件出现eDuplicateRecordName报错
stm32·单片机·嵌入式硬件·altium