代码详细注释:嵌入式Linux LCD汉字显示程序(基于font.h字库头文件)

发布于:2025-07-09 ⋅ 阅读:(20) ⋅ 点赞:(0)

代码

#include <stdio.h>  // 标准输入输出头文件

// 添加字库头文件
#include "font.h"   // 自定义字体操作头文件

#include <stdio.h>  // 标准输入输出头文件(重复包含)
#include <sys/types.h>  // 系统数据类型定义
#include <sys/stat.h>  // 文件状态信息
#include <fcntl.h>  // 文件控制选项
#include <sys/mman.h>  // 内存映射相关
#include <unistd.h>  // UNIX标准函数

int fd;  // 全局文件描述符
// 全局变量,所有函数都可以访问
int (*lcd)[800] = NULL;  // 定义指向LCD显存的二维数组指针

// 映射LCD设备
int init_lcd()
{
    // 1.打开LCD设备文件
    fd = open("/dev/fb0", O_RDWR);  // 以读写方式打开帧缓冲设备
    if (fd == -1)  // 检查是否打开成功
    {
        perror("打开LCD设备失败\n");  // 打印错误信息
        return -1;  // 返回错误码
    }
    else
    {
        printf("打开LCD设备成功\n");  // 成功提示
    }

    // 2.映射LCD设备到内存空间
    lcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (lcd == MAP_FAILED)  // 检查映射是否成功
    {
        perror("映射LCD设备失败\n");  // 打印错误信息
        return -1;  // 返回错误码
    }
    else
    {
        printf("映射LCD设备成功\n");  // 成功提示
    }
    return 0;  // 初始化成功
}

//释放LCD资源
void free_lcd()
{
    // 3.解除内存映射
    munmap(lcd, 800 * 480 * 4);  // 释放映射的内存区域
    close(fd);  // 关闭设备文件
}

int main()
{
    // 初始化LCD设备
    init_lcd();  // 调用初始化函数

    // 1.加载开发板的字库文件
    /*
        [root@GEC6818 /usr/share/fonts]#pwd
        /usr/share/fonts
        [root@GEC6818 /usr/share/fonts]#ls
        DroidSansFallback.ttf  msyh.ttf
        请自己进入开发板的/usr/share/fonts 查看字库文件
    */
    font *f = fontLoad("/usr/share/fonts/DroidSansFallback.ttf");  // 加载字体文件

    // 2.设置字体的大小
    fontSetSize(f, 64);  // 设置字体大小为64像素

    /*
    // 3.创建一块画布(注释掉的旧方法)
    bitmap *bm = createBitmap(250, 80, 4);

    // 4.把中文汉字显示到画布上
    fontPrint(f, bm, 0, 0, "今天很热!", 0, 0);

    // 5.画布显示到LCD设备中
    show_font_to_lcd((unsigned int *)lcd, 350, 215, bm);
    */

    // 自定义一块画布(新方法)
    bitmap bm;  // 定义位图结构体
    bm.height = 480;  // 设置画布高度为480像素
    bm.width = 800;  // 设置画布宽度为800像素
    bm.byteperpixel = 4;  // 每个像素4字节(32位色)
    bm.map = (u8 *)lcd;  // 将画布映射到LCD显存

    // 4.在画布上显示字体
    fontPrint(f, &bm, 0, 0, "今天很开心!", getColor(0, 0, 0, 255), 0);
    // 参数说明: 字体对象,画布指针,x坐标,y坐标,显示文本,颜色(黑色),背景色(透明)

    free_lcd();  // 释放LCD资源
    return 0;  // 程序正常退出
}

代码功能说明:

  1. LCD初始化

    • 打开帧缓冲设备(/dev/fb0)

    • 将设备内存映射到用户空间

    • 提供资源释放函数

  2. 字体显示

    • 加载TrueType字体文件

    • 设置字体大小

    • 直接在LCD显存上绘制文字

  3. 关键技术

    • 使用mmap映射显存

    • 自定义位图结构直接操作显存

    • 支持中文TrueType字体渲染

硬件平台说明:

  • 针对GEC6818开发板设计

  • 使用800x480分辨率的LCD屏

  • 字体文件路径为/usr/share/fonts/

注意事项:

  1. 需要配套的font.h头文件实现字体操作

  2. 直接操作显存需要root权限

  3. 颜色格式为ARGB(32位)

  4. 注释部分展示了另一种创建独立画布的方法


网站公告

今日签到

点亮在社区的每一天
去签到