此篇博客是基于GEC6818开发板使用

1、液晶屏的基本概念

像素:屏幕上显示颜色的最小单位,英文叫pixel。注意,位图(jpg,bmp等格式的常见图片)也是由一个个的像素点构成的,跟屏幕的像素点的概念一样。原理上讲,将一张位图显示到屏幕上,就是将图片上的像素点一个个复制到屏幕像素点。

分辨率:宽高两个像素点。分辨率越高,所需要的显存越大

色深:每个像素点所对应的内存字节数,一般有8位、16位、24位或32位

GEC6818开发板的屏幕的色深是32位的

32位色深的屏幕一般被称为真彩屏,或1600万色屏

色深决定了一个像素点所能表达的颜色的丰富程度,色深越大,色彩表现力越强

2、lcd

lcd的设备名字:/dev/fb0                (fb=framebuffer 帧缓冲)

开发板和虚拟机都在该路径下

lcd的分辨率(lcd的大小):800 * 480(像素点)

将像素点转化为字节单位(1个像素点等于4个字节)

1个像素点1等于ARGB(4个字节)

A-->透明度(决定颜色的深浅,实际要看硬件的参数是否有)

R-->red

G-->green

B-->blue

说明:挑选颜色=windows的画图软件+计算器(程序员)

struct fb_fix_screeninfo
{char id[16];              /* identification string eg "TT Builtin" */unsigned long smem_start; /* Start of frame buffer mem *//* (physical address) */__u32 smem_len;           /* Length of frame buffer mem */__u32 type;               /* see FB_TYPE_*        */__u32 type_aux;           /* Interleave for interleaved Planes */__u32 visual;             /* see FB_VISUAL_*        */ __u16 xpanstep;           /* zero if no hardware panning  */__u16 ypanstep;           /* zero if no hardware panning  */__u16 ywrapstep;          /* zero if no hardware ywrap    */__u32 line_length;        /* length of a line in bytes    */......
};struct fb_var_screeninfo
{__u32 xres;           /* 可见区宽度(单位:像素) */__u32 yres;           /* 可见区高度(单位:像素) */__u32 xres_virtual;   /* 虚拟区宽度(单位:像素) */__u32 yres_virtual;   /* 虚拟区高度(单位:像素) */__u32 xoffset;        /* 虚拟区到可见区x轴偏移量 */__u32 yoffset;        /* 虚拟区到可见区y轴偏移量 */__u32 bits_per_pixel; /* 色深 */// 像素内颜色结构struct fb_bitfield red;   // 红色  struct fb_bitfield green; // 绿色struct fb_bitfield blue;  // 蓝色struct fb_bitfield transp;// 透明度......
};struct fb_bitfield
{__u32 offset;   /* 颜色在像素内偏移量 */__u32 length;   /* 颜色占用数位长度 */......
};//上述结构体的具体定义在系统的如下路径中
/usr/include/linux/fb.h

3、lcd刷颜色操作

lcd刷颜色是最基本的使用,步骤一共有四步:

1、打开lcd

2、填充刷lcd的buf

3、将buf写到lcd中

4、关闭lcd

实现代码如下

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc,char** argv)
{//1、打开lcdint fd_lcd,ret;           // --->  lcd也是一个文件,需要使用一个文件描述符fd_lcd = open("/dev/fb0",O_RDWR);if(fd_lcd == -1){perror("open lcd fail");return -1;}//2、填充刷lcd的buf//方法一//int buf[800*480] = { 0 };    //int color = 0x00ffffff;        //刷图的颜色//for(int i = 0;i < 800*480;i++)//{//    buf[i] = color;//}//方法二int buf[800*480] = {0};//给这一个buf的每一个像素点赋值int x=0; //x表示lcd的横轴int y=0; //y表示lcd的纵轴//用xy表示LCD的每一个像素点,然后一行一行的写(从第0行开始写)for(y=0;y<480;y++){for(x=0;x<800;x++){//y=0 x=0 第0行第0个像素点//y=1 x=1 第1行的第1个像素点(4个字节)    buf[y*800+x] = green; }       }//3、将buf写到lcd中write(fd_lcd,buf,sizeof(buf));//4、关闭lcdclose(fd_lcd)return 0
}

4、内存映射

为什么要使用内存映射呢?

当我们使用普通的read,write函数读写lcd时,发现lcd显示颜色的时候:

1、逐渐显示的过程

2、每条颜色之间存在毛刺的现象

3、显示颜色的时间稍长

这就引出内存映射(mmap)这种方法,内存映射函数接口如下:

//mmap()函数   --->  man 2 mmap
//功能:将文件或设备映射到内存中#include <sys/mman.h>void* mmap(void* addr,size_t length,int port,int flag,int fd,off_t offset);
参数说明:addr:不为NULL  --->  用户选择内存空间的起始地址      0.00001%为NULL   --->  系统为用户去自动分配某一块空间 99.99999%length:映射的内存大小(字节数)port:PROT_EXEC    页面可能会被执行PROT_READ    可以阅读页面PROT_WRITE    可以写页面PROT_NONE    页面可能无法访问如果需要多个权限,则使用“ | ” 连接在一起flag:MAP_SHARED:    1、进程共享内存    2、内存数据的变更同步到对应的文件MAP_PRIVATE:    1、内存私有    2、内存数据的变更不会影响到对应的内存fd:文件描述符offset:文件偏移量(从文件的哪个地方开始进行映射)
返回值:成功:指向那片内存空间的区域的地址失败:NULL//munmap()函数  --->  man 2 munmap
//功能:将文件或设备取消映射到内存#include <sys/mman.h>int munmap(void* addr,size_t length);
参数说明:addr:需要撤销映射的内存的起始地址 --->  mmap()函数的返回值length:撤销的长度
返回值:成功:0DD失败:-1
每次lcd映射完完了之后需要释放掉   ---> 使用munmap()函数

内存映射的实现步骤:

1、打开lcd(open)

2、内存映射(mmap)

3、操作映射空间

4、取消内存映射(munmap)

5、关闭lcd(close)

测试代码如下:

#include <stdio.h>
#include <sys/mman.h>
#inclued <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc,char** agrv)
{int fd_lcd;int* addr = NULL;int color = 0x00ff00ff;//1、打开lcd(open)fd_lcd = open("/dev/fb0",O_RDWR);if(fd_lcd == -1){perror("open lcd fail");return 0; }//2、内存映射(mmap)addr = mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd_lcd,0);if(addr == NULL)    {perror("mmap fail");return -1;}//3、操作映射空间/*开始操作这段映射空间*///给指针指向的这段空间赋值(效率要高于读写LCD) int x=0;//x是横轴int y=0;//y是纵轴//一行一行的给指针指向的像素点赋值for(y=0;y<480;y++){for(x=0;x<800;x++)//指针偏移是指向的下一个单位//先指针偏移然后解引用*(addr+y*800+x) =  color; //颜色}    //4、取消内存映射(munmap)munmap(addr,800*480*4);    //5、关闭lcd(close)close(fd_lcd);return 0;
}

LCD(GEC6818)相关推荐

  1. 2022-2028年中国LCD(液晶显示器)行业市场发展现状及投资策略研究报告

    报告类型:产业研究 报告格式:电子版.纸介版 出品单位:智研咨询-产业信息网 智研咨询发布的<2022-2028年中国LCD(液晶显示器)行业市场发展现状及投资策略研究报告>共十四章.首先 ...

  2. 展讯平台 LCD(Mipi)移植步骤及问题归纳

    PortingGuide Backlight 背光的硬件设计有两种情况:  1. 内置并联背光  2. 外置串联背光  对于 1 的情况,步骤如下:  1.移植对应的 lcd 驱动.  2.设置u-b ...

  3. Lcd(一)显示原理

    一.LCD控制原理 S5PV210处理器中自带LCD控制器,控制LCD的显示,把 LCD 图像数据从一个位于系统内存的 video buffer 传送到一个外部的 LCD 驱动器接口. 类型: 1.S ...

  4. PDP(等离子) VS LCD(液晶)

    现在彩电平板化已是大势所趋,其实这个方向已在电脑显示技术的发展轨迹上得到验证.当然,彩电技术还不完全和电脑显示等同,我从92进厂曾经不务正业地做了5年彩电工艺,这个道理我还是知道的. 最近比较忙,所以 ...

  5. video LCD(液晶显示器)的接口 RGB接口 RGB色彩模型 颜色模型除了RGB, 还有CIE, YUV 给我弄混了---RGB是接口还是颜色模型

    LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器 LCD目前已经取代CRT, 成为TV.PC等的标配 接口类型 首先我们以传递的信号类型来区分主要有两大类: 模拟信号 ...

  6. FPGA驱动SPI接口的LCD(三)——LCD的初始化

    一.跟据参考的STM32代码了解初始化流程 LCD初始化函数 void LCD_Init(void); 首先是LCD的复位 void LCD_RESET(void) {     LCD_RST_CLR ...

  7. LCD(液晶)显示器选购注意事项

    最近想买个液晶22寸的显示器,没想到让我查出来那么多关于选购显示器大技巧. 现在分享给大家吧. 方面一: 液晶面板可谓是液晶显示设备的灵魂所在,其优劣直接决定了液晶显示设备的好坏.而目前市场上主流的液 ...

  8. 晶联讯LCD(JLX128128G-610-PC)使用教程

    模块介绍:拿到板子,首先可以看到这个是3.3V串行的(如果想改成并行,把R1的0Ω电阻拆下来焊在R2处即可).板子的串行和并行都是虚拟协议,也就是说只需要接到普通I/O口,保证可以调高或拉低电平即可. ...

  9. LCD(五)Backlight背光子系统

    一.Backlight背光子系统概述 LCD的背光原理主要是由核心板的一根引脚控制背光电源,一根PWM引脚控制背光亮度组成,应用程序可以通过改变PWM的频率达到改变背光亮度的目的. Backlight ...

最新文章

  1. SBB-2016-石油污染土壤微生物群落构建与生物多样性研究
  2. iOS WKWebView JS原生交互之JS调用OC(附demo)
  3. binary hacks读数笔记(共享库)
  4. 一次非常有意思的sql优化经历
  5. SAP发票校验前收货后是否能更改物料价格
  6. 信息系统项目管理师考试公式都在这里了
  7. SharePoint Calendar Webparts
  8. 99%的数据中心都会面临的痛点,现在终于有好的解决方案了!
  9. 10-对象属性的获取方式
  10. linux 下 oracle 10.2.0.1 32bit netca报错
  11. 江苏开放计算机绘图作业1,江苏开放大学计算机绘图形考2
  12. popToRootViewController & popToViewController
  13. MySQL索引优化案例学习总结
  14. 虚拟机修改hosts文件
  15. MIME,拓展名需要相应的软件打开
  16. CAM350 12.1版本安装
  17. 上海宝付教你如何更好地保护手机隐私
  18. Pytorch Note19 优化算法5 Adadelta算法
  19. 电源模块-LM5117-BUCK- 电路
  20. 计算机毕业设计-SSM企业OA管理系统-JavaWeb企业OA管理系统

热门文章

  1. 计算机图形学迷宫论文,三维迷宫的设计与制造
  2. html 图片透明字不透明,CSS实现背景图片透明,文字不透明效果的两种方法
  3. 成熟的B端产品经理,都有这个能力
  4. NX/UG二次开发创建曲面偏置体
  5. 手机充电器的D+,D-电压
  6. margin失效问题——嵌套块元素引起的外边距坍塌
  7. 【Python基础】第八篇 | 容器之列表的使用
  8. phpstudy mysql建表_MySQL_总结MySQL建表、查询优化的一些实用小技巧,MySQL建表阶段是非常重要的一 - phpStudy...
  9. 辐射探测 期末考试 考完后的recheck!oh,老baby,高纯锗要低温呀!!
  10. 如何舒服的在电视上操作电脑