前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day27-LCD开发板操作(2022.2.24)

day27-LCD开发板操作(2022.2.24)

作者头像
天天Lotay
发布2022-12-02 14:40:05
2330
发布2022-12-02 14:40:05
举报
文章被收录于专栏:嵌入式音视频

================== 1.LCD认识 =====================

——》 液晶显示屏。

在这里插入图片描述
在这里插入图片描述

3个基本概念: 1.像素:图像显示的最小单位,单个像素只能显示1个颜色。 三原色RGB:红、绿、蓝颜色分量。 (范围:0~255,0000 0000b~1111 1111b,0x00~0xFF,占用8位->1字节) 如纯红色: 100%+ 0%+0% 纯绿色: 0%+100%+0% 纯黄色: 100%+100%+0% 纯白色: 100%+100%+100% 结论—》在内存中表示RGB至少需要3字节(24位) 2.分辨率:横向和纵向像素点的乘积。720P 1080P 2K 4K 8K (6818开发板屏幕分辨率:800*480) 3.色彩深度: RGB:24位 (6818开发板屏幕色深aRGB:32位=24位RGB+8位灰度)

开发板LCD屏幕也是文件: ——》“/dev/fb0“

在这里插入图片描述
在这里插入图片描述

把大象塞冰箱,分几步?(把像素点塞入LCD屏幕) 1.打开冰箱门 ——》打开屏幕设备文件 open() 2.把大象塞进去 ——》将像素点写入到LCD中 write() 3.关闭冰箱门 ——》关闭设备 close() 大象:像素点颜色(int) 冰箱:LCD屏幕

1.demo1_循环显示3个颜色.c

代码语言:javascript
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int main()
{
	// 1.	打开冰箱门	——》打开屏幕设备文件
	int lcd_fd;
	lcd_fd = open("/dev/fb0", O_RDWR);
	if(lcd_fd == -1)
	{
		perror("open lcd failed");
		return -1;
	}

	// 2.	把大象塞进去	——》将像素点写入到LCD中	
	int color_red   = 0x00FF0000;	// 纯红色16进制表示aRGB
	int color_green = 0x0000FF00;	// 纯绿色16进制表示aRGB
	int color_blue  = 0x000000FF;	// 纯蓝色16进制表示aRGB

	int x, y;
	while(1)
	{
		lseek(lcd_fd, 0, SEEK_SET);
		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				write(lcd_fd, &color_red, 4);
		sleep(1);

		lseek(lcd_fd, 0, SEEK_SET);
		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				write(lcd_fd, &color_green, 4);
		sleep(1);

		lseek(lcd_fd, 0, SEEK_SET);
		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				write(lcd_fd, &color_blue, 4);
		sleep(1);
	}

	// 3.	关闭冰箱门	——》关闭设备				
	close(lcd_fd);

	return 0;
}

2.demo2_mmap显示.c

代码语言:javascript
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int main()
{
	// 1.	打开冰箱门	——》打开屏幕设备文件
	int lcd_fd;
	lcd_fd = open("/dev/fb0", O_RDWR);
	if(lcd_fd == -1)
	{
		perror("open lcd failed");
		return -1;
	}
		// 显存映射(int *类型表示操作对象是像素点)
	int *FB = mmap(	NULL,	// 填NULL表示显存地址由系统自动分配
					800*480*4, 	// 整块屏幕的显存大小
					PROT_READ|PROT_WRITE, 	// 显存保护权限:可读可写
					MAP_SHARED, 	// 多进程共享设置
					lcd_fd, 	// LCD文件描述符
					0);			// 0表示不偏移
	if(FB == MAP_FAILED)
	{
		perror("mmap failed");
		return -2;
	}

	// 2.	把大象塞进去	——》将像素点写入到LCD中	
	int color_red   = 0x00FF0000;	// 纯红色16进制表示aRGB
	int color_green = 0x0000FF00;	// 纯绿色16进制表示aRGB
	int color_blue  = 0x000000FF;	// 纯蓝色16进制表示aRGB

	int x, y;
	while(1)
	{
		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				*(FB+x+800*y) = color_red;
		sleep(1);

		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				*(FB+x+800*y) = color_green;
		sleep(1);
		
		for(y=0; y<480; y++)
			for(x=0; x<800; x++)
				*(FB+x+800*y) = color_blue;
		sleep(1);
	}

	// 3.	关闭冰箱门	——》关闭设备
	close(lcd_fd);

	return 0;
}

3.demo3_显示国旗.c

代码语言:javascript
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int main()
{
	// 1.	打开冰箱门	——》打开屏幕设备文件
	int lcd_fd;
	lcd_fd = open("/dev/fb0", O_RDWR);
	if(lcd_fd == -1)
	{
		perror("open lcd failed");
		return -1;
	}
		// 显存映射(int *类型表示操作对象是像素点)
	int *FB = mmap(	NULL,	// 填NULL表示显存地址由系统自动分配
					800*480*4, 	// 整块屏幕的显存大小
					PROT_READ|PROT_WRITE, 	// 显存保护权限:可读可写
					MAP_SHARED, 	// 多进程共享设置
					lcd_fd, 	// LCD文件描述符
					0);			// 0表示不偏移
	if(FB == MAP_FAILED)
	{
		perror("mmap failed");
		return -2;
	}

	// 2.	把大象塞进去	——》将像素点写入到LCD中	
	int color_white = 0x00FFFFFF;	// 纯白色16进制表示aRGB
	int color_red   = 0x00FF0000;	// 纯红色16进制表示aRGB
	int color_blue  = 0x000000FF;	// 纯蓝色16进制表示aRGB

	int x, y;
	for(y=0; y<480/3; y++)
		for(x=0; x<800; x++)
			*(FB+x+800*y) = color_white;
	for(y=480/3; y<480/3*2; y++)
		for(x=0; x<800; x++)
			*(FB+x+800*y) = color_blue;
	for(y=480/3*2; y<480; y++)
		for(x=0; x<800; x++)
			*(FB+x+800*y) = color_red;

	// 3.	关闭冰箱门	——》关闭设备
	close(lcd_fd);

	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档