LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

这篇具有很好参考价值的文章主要介绍了LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.GEC6818开发板的LCD

1.LCD

(1)原理

LCD屏幕是由一个个像素组成的,横向像素个数和纵向像素个数是LCD的一个重要指标,称为像素分辨率,当前举例开发板的分辨率是 800X480

LCD显示从屏幕左上角的像素开始,直到右下角一帧结束

像素位数指的是存储一个像素数据所需要的空间长度,当前举例LCD的像素位数是32位(bpp)
LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

(2)屏幕显示的控制

LCD的像素显示数据来自于显存,显存一般使用内存,使用一段内存空间来存储显示数据,将显存和LCD建立映射关系之后,我们往显存上写什么数据,LCD就会显示什么内容

显存在用户空间不能直接访问,需要将显存映射到用户空间之后才能访问,使用mmap函数来实现映射

LCD硬件对应的设备文件 /dev/fb0
LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

2.mmap函数

mmap函数用来映射文件,将文件映射到内存,建立映射关系,修改映射的内存就会影响对应的文件

#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
int munmap(void *addr, size_t length);
参数:

    addr:映射内存的首地址,给NULL表示由系统选择映射地址

    length:映射区的长度(映射长度是页的倍数)

    prot:映射区权限
    
         PROT_EXEC  Pages may be executed.

         PROT_READ  Pages may be read.

         PROT_WRITE Pages may be written.

         PROT_NONE  Pages may not be accessed.
        
    flags:映射标志

         MAP_SHARED ----- 对映射区的修改要同步到文件
        
         MAP_PRIVATE ----- 对映射区的修改不同步到文件

    fd:映射的文件描述符

    offset:映射位置相对于文件开头的偏移

成功返回映射区首地址,失败MAP_FAILED((void *)-1)

映射区使用完成之后要解除映射,使用munmap函数解除,传入映射区首地址和映射区的长度

3.LCD的显存映射

使用mmap映射显存和映射普通文件的流程一样,唯一的区别是映射的文件要改成LCD的设备文件 (/dev/fb0)

对于LCD的显示来说,往先存上写什么数据,LCD就会显示什么内容,LCD显示简化成了显存操作,也就是内存操作

4.图片的显示

图片分为位图和矢量图,位图存储的是图像的像素信息,矢量图保存的是图像的轮廓信息。

位图主要用于图像显示和存储,矢量图主要用于工程制图

(1)位图的参数

位图文件存储的图像信息,图像信息就有几个重要参数 --------- 像素分辨率 像素位数

对于一个位图文件来说,我们需要找到它的 图像数据 像素分辨率 像素位数

(2)位图格式

bmp:图像数据不压缩,直接保存

jpeg:压缩的图片

png:压缩的图片

tiff:压缩的图片

gif:动态图片

5.bmp图片格式

(1)bmp图片数据组成
LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

文件头:
LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频
信息头:
LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频
图像数据:

图像数据一个像素中颜色分量的顺序如下

    24位 -------- B G R

    32位 -------- B G R A

二.触摸屏

1.概念和原理

触摸屏是一个输入设备,在Linux内核中使用输入子系统的框架来实现的,使用输入子系统实现的设备驱动对应的设备文件 /dev/event0…1…2…或/dev/input/event0…1…2…

我们触摸屏对应的设备文件是 /dev/input/event0

输入子系统上报的信息(读到的信息)都是一个个的事件(struct input_event)

在/usr/include/linux/input.h 中定义

struct input_event 
{
     struct timeval time;//时间戳
     __u16 type;//事件类型
     __u16 code;// 按键事件---键值      坐标事件---坐标类型
     __s32 value;//按键事件---按键状态  坐标事件---坐标值
};

事件类型:

  #define EV_SYN                  0x00 //同步事件
  #define EV_KEY                  0x01 //按键事件
  #define EV_REL                  0x02 //相对坐标事件
  #define EV_ABS                  0x03 //绝对坐标事件
  #define EV_MSC                  0x04
  #define EV_SW                   0x05
  #define EV_LED                  0x11
  #define EV_SND                  0x12
  #define EV_REP                  0x14
  #define EV_FF                   0x15
  #define EV_PWR                  0x16
  #define EV_FF_STATUS            0x17
  #define EV_MAX                  0x1f
  #define EV_CNT                 (EV_MAX+1)

键值:

  #define KEY_ESC                 1
  #define KEY_1                   2
  #define KEY_2                   3
  #define KEY_3                   4
  #define KEY_4                   5
  #define KEY_5                   6
  #define KEY_6                   7
  #define KEY_7                   8
  #define KEY_8                   9
  #define KEY_9                   10
  #define KEY_0                   11

  #define BTN_TOUCH               0x14a

坐标类型:

  #define ABS_X                   0x00
  #define ABS_Y                   0x01
  #define ABS_Z                   0x02

2.测试

(1)使用hexdump命令

hexdump /dev/input/event0
编号 时间戳 事件类型 坐标类型/键值 坐标值/按键状态
0000000 1dcc 7ff8 4e50 000e 0003 0000 01b1 0000
0000010 1dcc 7ff8 4e56 000e 0003 0001 013b 0000
0000020 1dcc 7ff8 4e5a 000e 0001 014a 0001 0000
0000030 1dcc 7ff8 4e5e 000e 0000 0000 0000 0000
0000040 1dcc 7ff8 1923 000f 0001 014a 0000 0000
0000050 1dcc 7ff8 1928 000f 0000 0000 0000 0000

(2)编写代码

编写输入子系统的代码需要包含 linux/input.h 头文件

三.音乐播放

6818开发板上的音频驱动,麦克风,耳机接口都已经实现,我们只需要使用。借助开源音乐播放器软件madplay来播放音乐

1.使用madplay直接用命令

madplay mp3音乐文件路径

2.使用system函数来执行音乐控制播放命令

(1)开始播放

system("madplay mp3音乐文件路径 &");

(2)停止播放

system("killall -KILL madplay &");

(3)暂停播放

system("killall -STOP madplay &");

(4)继续播放

system("killall -CONT madplay &");

四.图片缩放

线性差值算法是一种简易经典的图片缩放算法,就是按照比例去寻找所需要的像素点

假设图片原始的长和宽(像素)为a,b

缩放后的图片大小为a0,b0

那么缩放后图片上任意一像素点(x0,y0)对应原图片的像素坐标(x,y)为

x = x0*a/a0;

y = y0*b/b0;

注:图片的宽度必须是4的倍数

五.maplyer播放视频

1.安装mplayer

mplayer是一个开源的视频播放工具,可以用来播放各种格式的视频

mplayer已经编译好了,将下载好的mplayer文件传送到开发板文件系统,修改权限777,将文件移动到/usr/bin

2.使用mplayer播放视频

基本用法:

mplayer avi视频文件的路径

-quiet:不要显示推流

-zoom -x 800 -y 480:指定视频播放大小文章来源地址https://www.toymoban.com/news/detail-408517.html

到了这里,关于LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子FPGA连载】 第二十章 LCD触摸屏实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html 现在几乎所有智能手机,包括平板电脑都是采用电容屏作为触摸屏,电容屏是利用人体感应进行触点检测控制

    2023年04月23日
    浏览(63)
  • 应用在手机触摸屏中的电容式触摸芯片

    触控屏(Touch panel)又称为触控面板,是个可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板,并借由液晶显示画面制造出生动的影音效果。 手机触摸

    2024年02月07日
    浏览(24)
  • 应用在游戏机触摸屏中的触摸感应芯片

    触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个

    2024年01月18日
    浏览(20)
  • 基于GEC6818的触摸屏

    连接操作系统的输入设备,可不止一种,也许是一个标准PS/2键盘,也许是一个USB鼠标,或者是一块触摸屏,甚至是一个游戏机摇杆,Linux在处理这些纷繁各异的输入设备的时候,采用的办法还是找中间层来屏蔽各种细节,请看下图: 在Linux的内核中,对输入设备的使用,实际

    2024年02月05日
    浏览(23)
  • Linux 多点电容触摸屏实验

    1、多点触摸(MT)协议详解 电容触摸屏驱动其实就是以下几种 linux 驱动框架的组合: ①、IIC 设备驱动,因为电容触摸 IC 基本都是 IIC 接口的,因此大框架就是 IIC 设备驱动。 ②、通过中断引脚(INT)向 linux 内核上报触摸信息,因此需要用到 linux 中断驱动框架。坐标的上报在中断

    2024年02月06日
    浏览(25)
  • ESP32开发---驱动触摸屏

    采用 I2C 驱动触摸屏。 I2C 多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 它有两条线,一条是 SCL (串行时钟总线),另外一条是SDA(串行数据线),这两条数据需要接上拉电阻,总线空闲的时候SCL和SDA处于高电

    2024年02月08日
    浏览(22)
  • Linux 触摸屏 (IIC驱动详解)

    本文使用触摸屏iic驱动,驱动编写中要使用 总线,设备,驱动 分层的思想,IIC总线,触摸屏驱动,触摸屏设备,   一般 SOC 的 I2C 总线驱动都是由半导体厂商编写的,比如 I.MX6U 的 I2C 适配器驱动 NXP 已经编写好了,这个不需要用户去编写。因此 I2C 总线驱动对我们这些 SOC 使

    2023年04月11日
    浏览(24)
  • WPF --- 触摸屏下的两个问题

    本片文章分享一下之前遇到的WPF应用在触摸屏下使用时的两个问题。 具体场景就是一个配置界面, ScrollViewer 中包含一个 StackPanel 然后纵向堆叠,已滚动的方式查看,然后包含多个 TextBlock 、 TextBox 以及 DataGrid ,期间遇到了两个问题: WPF在触摸屏下,如果有滚动条( ScrollVie

    2024年03月09日
    浏览(27)
  • 电容触摸屏驱动(Linux驱动开发篇)

    电容屏只需要手指轻触即可,而电阻屏是需要手指 给予一定的压力才有反应,而且电容屏不需要校准。 如果要做人机交互设备的开发,多点电容触摸屏基本是不可能绕过去的。 正点原子ATK-7016 这款屏幕 其实是由 TFT LCD+触摸屏组合起来的。底下是 LCD 面板,上面是触摸面板,

    2024年02月05日
    浏览(36)
  • 单片机与触摸屏的通信实现方法

    单片机与触摸屏的通信是在嵌入式系统中常见的任务之一。通过合适的通信协议和接口,我们可以实现单片机与触摸屏之间的数据传输和交互。下面将详细介绍一种常用的实现方法,并提供相应的源代码示例。 硬件连接 首先,我们需要将触摸屏与单片机正确地连接起来。触

    2024年03月12日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包