单片机汉字显示实验

单片机 :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盘,并加载字库文件

相关推荐
guygg881 小时前
基于C# + Halcon的通用ROI绘制工具
stm32·单片机·c#
yugi9878382 小时前
基于 RFID 的智能公交刷卡系统
stm32·嵌入式硬件
点灯小铭2 小时前
基于单片机的雨量检测智能汽车雨刮器模拟系统设计与实现
单片机·嵌入式硬件·汽车·毕业设计·课程设计·期末大作业
三佛科技-134163842123 小时前
腕式血压计方案开发设计,腕式血压计MCU控制芯片选择
单片机·嵌入式硬件·物联网·智能家居
cici158743 小时前
C# LAS 点云读取与处理工具
stm32·单片机·c#
listhi5204 小时前
基于 LabVIEW 和 51 单片机的温度检测系统
单片机·mongodb·labview
三佛科技-187366133974 小时前
GD32F103RCT6兆易创新LQFP64,32 位 ARM Cortex-M3 微控制器芯片解析
单片机·嵌入式硬件
亿道电子Emdoor5 小时前
【Altium】封装焊盘批量命名
单片机·嵌入式硬件
清风6666665 小时前
基于单片机与12864显示屏的多种函数波形信号发生器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业