栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

应用程序操作LCD源码分析

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

应用程序操作LCD源码分析

1、LCD设备节点文件介绍

帧缓冲设备对应的设备文件为/dev/fb*,linux最多支持32个帧缓冲设备,分别为/dev/fb0到/dev/fb31,而/dev/fb是当前默认的帧缓冲设备,通常指向/dev/fb0;

2、操作LCD的逻辑流程分析

(1)使用open函数打开LCD设备的设备节点文件;
(2)调用ioctl函数获取LCD设备的信息;
(3)调用mmap函数,映射帧缓冲区到用户空间;
(4)将要显示的内容写入到帧缓冲区;

3、应用操作LCD设备的源码
#include 
#include 
#include 
#include 
#include 
#include 
#include 

// 设备节点
#define FBDEVICE	"/dev/fb0"

//屏幕的实际分辨率
#define WIDTH		1024	
#define HEIGHT		600

#define WHITE		0xffffffff			// test ok

// 设置屏幕背景色
void draw_back(unsigned int width, unsigned int height, unsigned int color);

// 全局变量
unsigned int *pfb = NULL;

int main(void)
{
	int fd = -1, ret = -1;
	
	struct fb_fix_screeninfo finfo = {0};
	struct fb_var_screeninfo vinfo = {0};
	
	// 第1步:打开设备
	fd = open(FBDEVICE, O_RDWR);

	// 第2步:获取设备的硬件信息
	ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo);

	printf("smem_start = 0x%x, smem_len = %u.n", finfo.smem_start, finfo.smem_len);
	
	ret = ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);

	printf("xres = %u, yres = %u.n", vinfo.xres, vinfo.yres);
	printf("xres_virtual = %u, yres_virtual = %u.n", vinfo.xres_virtual, vinfo.yres_virtual);
	printf("bpp = %u.n", vinfo.bits_per_pixel);

	// 第3步:进行mmap
	unsigned long len = vinfo.xres_virtual * vinfo.yres_virtual * vinfo.bits_per_pixel / 8;
	printf("len = %ldn", len);
	pfb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
	if (NULL == pfb)
	{
		perror("mmap");
		return -1;
	}
	printf("pfb = %p.n", pfb);
	
	//往帧缓冲区写数据
	draw_back(WIDTH, HEIGHT, WHITE);
	
	close(fd);
	
	return 0;
}

void draw_back(unsigned int width, unsigned int height, unsigned int color)
{
	unsigned int x, y;
	
	for (y=0; y
		for (x=0; x
			*(pfb + y * WIDTH + x) = color;
		}
	}}

ioctl函数中的命令在linux/fb.h文件中定义,支持多个命令,想了解更多命令的去查询这个文件;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号