学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。

这篇具有很好参考价值的文章主要介绍了学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目要求:

(1)设计一个初始界面,并且设置电子相册,音乐播放器,视频播放器三个触摸按键。

(2)电子相册——能够实现相册的幻灯片功能,实现相册左右滑动切换相片。

(3)音乐播放器实现——切歌,播放和暂停功能。

(4)视频播放器实现——播放、暂停、音量大小、快进倒退等功能。

(5)对代码进行集成化

项目设计:

(1)头文件、设置变量和素材引入

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#include <linux/input.h>
#include <pthread.h>
#include <stdlib.h>

int get_touch(int *th_x,int *th_y);//x轴和y轴的位置。
int show_color(int color,int x,int y,int w,int h);//颜色的显示x和y设定位置,w和h设定显示大小
int mmap_bmp(char *namebuf,int x,int y,int w,int h);//

int lcd,touch;
int *map;

int th_x,th_y,th_falg = 0,falg_2 = 0,i = -1;
pthread_t pid;

int fd_fifo;

char music_path[4][32] = {"faded.mp3","faded1.mp3","faded2.mp3"};

char name_buf[4][20] = {"01.bmp","02.bmp","1.bmp"};

(2)对设备的初始化和停止

int __INIT__()
{
    touch = open("/dev/input/event0",O_RDWR);
    if(touch == -1)
    {
        perror("open touch failed");
        return -1;
    }
    lcd = open("/dev/fb0",O_RDWR);
    if(lcd == -1)
	{
		perror("open lcd failed");
		return -1;
	}
    map = (int *)mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED,lcd,0);
	if(map == MAP_FAILED)
	{
		perror("mmap failed");
		return -1;
	}


    if(access("/fifo",F_OK))// 默认管道文件创建在根目录  F_OK:判断是否存在
	{
		//如果没有创建
		mkfifo("/fifo",777); //创建管道文件函数

	}
	fd_fifo = open("/fifo",O_RDWR);
	if(fd_fifo == -1)
	{
		printf("创建管道文件失败!\n");
		return -1;

	}
	return 0;
}

int __FrEe()
{
    close(touch);
    close(lcd);
    munmap(map,800*400*4);
    system("killall -9 mplayer");
}

int Send_Cmd(char *cmd)//写入管道文件
{
	write(fd_fifo,cmd,strlen(cmd));
	
	return 0;
}

(3)限制图片的显示大小


void *cyc_showbmp(void *arg)
{
    for(int i = 0;i<3;i++)
    {
        mmap_bmp(name_buf[i],0,0,800,400);
        sleep(3);
        if(i == 2) i=-1;
    }
}

(4)获取坐标

//获取坐标
int get_touch(int *th_x,int *th_y)
{
    int old_x,old_y;
    struct input_event buf;
    while(1)
    {
        read(touch,&buf,sizeof(buf));

        if(buf.type == EV_ABS && buf.code == ABS_X)
            *th_x = buf.value;
        if(buf.type == EV_ABS && buf.code == ABS_Y)
            *th_y = buf.value;

        if(buf.type == EV_KEY && buf.code == BTN_TOUCH && buf.value == 1)
        {
            old_x = *th_x;
            old_y = *th_y;
        }
        
        if(buf.type == EV_KEY && buf.code == BTN_TOUCH && buf.value == 0)
        {
            if(old_x < *th_x && (*th_x - old_x >= 50)) return 1;//向右移动
            if(old_x > *th_x && (old_x - *th_x >= 50)) return 2;//向左移动
            break;
        }

    }

    return 0;
}

(5)颜色的显示

int show_color(int color,int x,int y,int w,int h)
{
    int * new_map = map + (800*y) + x;
	
	for(int i = 0 ;i < h;i++)
	{
		for(int j = 0;j < w;j++)
		{
			*(new_map+(i*800+j)) = color;//buf[((h -1 -i)*w)+j];
		}
	}
    return 0;
}

(6)在任意位置显示图片

//任意位置,任意大小刷图
int mmap_bmp(char *namebuf,int x,int y,int w,int h)
{
    int bmp = open(namebuf,O_RDWR);
    if(bmp == -1)
    {
        perror("open failed");
        return -1;
    }

	char buf[w*h*3];
	int new_buf[w*h];
	
	lseek(bmp,54,SEEK_SET);
	
	read(bmp,buf,w*h*3);
	
	for(int i = 0 ;i < h;i++)
	{
		for(int j = 0;j < w;j++)
		{
			new_buf[(i*w)+j] = buf[3*((i*w)+j)] << 0 | buf[3*((i*w)+j)+1] << 8 | buf[3*((i*w)+j)+2] << 16;
		}
	}
	
	int * new_map = map + (800*y) + x;
	
	for(int i = 0 ;i < h;i++)
	{
		for(int j = 0;j < w;j++)
		{
			*(new_map+(i*800+j)) = new_buf[((h -1 -i)*w)+j];
		}
	}
	close(bmp);
	return 0;
}

(7)电子相册

int pic()
{
    while(1)
    {  
        //获取坐标
        
        //判断坐标位置
                        mmap_bmp("12.bmp",0,400,800,80);
                    get_touch(&th_x,&th_y);
                    if(th_x >= 0 && th_x < 200 && th_y >= 400 &&th_y <= 480)
                    {
                        //结束自动循环
                        
                            pthread_cancel(pid);
                            falg_2 = 0;
                            mmap_bmp(name_buf[i],0,0,800,400);
                            
                    }
                    if(th_x >= 201 && th_x < 400 && th_y >= 400 &&th_y <= 480)
                    {
                        //开启自动循环
                        
                        pthread_create(&pid,NULL,cyc_showbmp,NULL);
                    }
                    if(th_x >= 401 && th_x < 600 && th_y >= 400 &&th_y <= 480)
                    {
                        //上一张 数组 --
                        i--;
                        if(i < 0) i = 3;
                        mmap_bmp(name_buf[i],0,0,800,400);
                    }//上一张
                    if(th_x >= 601 && th_x < 799 && th_y >= 400 &&th_y <= 480)
                    {
                        //下一张 数组 ++
                        i++;
                        if(i > 3) i = 0;
                        printf("1111\n");
                        mmap_bmp(name_buf[i],0,0,800,400);
                    } //下一张
                   if(th_x >= 0 && th_x < 100 && th_y >= 0 &&th_y <= 100)
                    break;
                         
             //启动自动循环:开启线程
            
            //停止自动循环:结束线程
            
            //退出
                
 }
}

(8)音乐播放器

int music()
{
    //execl("/bin/madplay", "madplay", music_path[i], NULL);
    

    system("madplay faded.mp3 &");
    sleep(1);
    while(1)
    {
        //获取坐标
        mmap_bmp("14.bmp",0,0,800,400);
        mmap_bmp("16.bmp",0,400,800,80);
        get_touch(&th_x,&th_y);
        //判断坐标位置
        /*if(th_x >= 441 && th_x <= 560 && th_y >= 400 && th_y <= 480)//结束
        {
            system("killall -9 madplay");
        }*/
        if(th_x >= 0 && th_x < 200 && th_y >= 400 &&th_y <= 480)//暂停
        {
            printf("继续!\n");
            system("killall  -18 madplay");
		    //Send_Cmd("pause\n");
        }
         if(th_x >= 201 && th_x < 400 && th_y >= 400 &&th_y <= 480)
        {
                        -
         i--;
        if(i < 0) i = 3;
        system(name_buf[i]);
        }//
        if(th_x >= 401 && th_x < 600 && th_y >= 400 &&th_y <= 480)
        { 
        i++;
        if(i > 3) i = 0;
        system( name_buf[i] );
        } //下一首
        if(th_x >= 551 && th_x <= 800 && th_y >= 400 && th_y <= 480)//退出
        {
            system("killall -19 madplay");
            break;
        }
        if(th_x >= 0 && th_x < 100 && th_y >= 0 &&th_y <= 100)
        {
          system("killall -9 madplay");
            break;
        }
                    
    }
}

(9)视频播放器

int video()
{
    system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 Faded3.avi &");
	sleep(1);
            mmap_bmp("13.bmp",0,0,800,480);
    while(1)
    {
        //获取坐标
        /*show_color(0x00ffff00,0,400,120,80);
        show_color(0x00ff0000,120,400,120,80);
        show_color(0x0000ff00,240,400,200,80);
        show_color(0x000000ff,440,400,120,80);
        show_color(0x00ff00ff,560,400,120,80);
        show_color(0x00ffffff,680,400,119,80);*/

        get_touch(&th_x,&th_y);
        //判断坐标位置
        if(th_x>241 && th_x<440 && th_y>400 && th_y<480)
        {
            printf("暂停 继续!\n");
		    Send_Cmd("pause\n");
        }
		if(th_x>0 && th_x<120 && th_y>400 && th_y<480)
		{
		    printf("音量+\n");
		    Send_Cmd("volume +10\n");
		}
		if(th_x>121 && th_x<240 && th_y>400 && th_y<480)
		{
		    printf("音量-\n");
		    Send_Cmd("volume -10\n");
		}
		if(th_x>441 && th_x<560 && th_y>400 && th_y<480)
		{
			printf("快进!\n");
			Send_Cmd("seek +10\n");
		}
		if(th_x>561 && th_x<680 && th_y>400 && th_y<480)
		{
			printf("快退!\n");
			Send_Cmd("seek -10\n");
		}
		if(th_x>681 && th_x<799 && th_y>400 && th_y<480)
        {
            system("killall -9 mplayer");
            break;
        }
        
			
            //启动视频播放器
            //退出
            //上一个
            //下一个
            //暂停
            //继续
            //音量+-
            //快进快退
        
    }
}

(10)主函数

int main(int argc, char const *argv[])
{
    //初始化
    int ret = __INIT__();
    if(ret == -1) return -1;

    
    while(1)
    {//主界面
    mmap_bmp("11.bmp",0,0,800,480);
        //获取坐标
    get_touch(&th_x,&th_y);
        //判断坐标位置
        if(th_x >= 100 && th_x < 200 && th_y >= 300 && th_y < 400)
        {
            //图片
            pic();
        }

        if(th_x >= 300 && th_x < 500 && th_y >= 300 && th_y < 400)
        {
            //音乐
            music();
        }

        if(th_x >= 600 && th_x < 700 && th_y >= 300 && th_y < 400)
        {
            //视频
          video();
        } 
        
    }

    
    //结束初始化
    __FrEe();
    return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-503685.html

 (11)项目成果

学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。

学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。 

 

(12)程序编译指令  arm-linux-gcc xxx.c -o xxx -lphread 

 

 

 

 

到了这里,关于学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 粤嵌 GEC-6818 蓝牙智能家庭影音 arm开发记录

    注意:未经允许不得转载,引用请注明出处 文件操作:创建、删除、复制、移动 环境:VMware15.5,ubantu16.04,串口驱动HI-340,secureCRT 设置共享文件夹,设置后ubantu系统和windows系统可以共享使用该文件夹里面的内容。 1.gcc编译:将c文件进行编译 2.交叉编译:将c文件编译成arm文

    2024年01月22日
    浏览(94)
  • LVGL笔记(6)-电子相册使用手势切换图片(windows仿真)

    今天看了一下lvgl的EVENT枚举,有一个事件 LV_EVENT_GESTURE 是响应手势滑屏的,就把电子相册的按键改为手势操作。 参考文章: 1.作者:weixin_46964996,文章: LVGL 的 LV_EVENT_GESTURE 2.我自己的文章: LVGL笔记(2)-电子相册(windows模拟和ESP32-S3) 先看看效果: 手势滑动相册 这个lvgl的事

    2024年02月11日
    浏览(47)
  • 基于GEC6818开发板的相册

    1.图片的显示 2.上滑,下滑,左滑,右滑切换图片 3.幻灯片播放相册 4.显示图片的缩略图 pic.h main.c 获取滑动方向,控制图片切换 幻灯片播放 保存图片到链表 显示图片 触屏判断

    2024年02月12日
    浏览(43)
  • 基于Java电子相册图片分享网站系统设计与实现(Springboot框架)毕业设计论文提纲参考

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年02月19日
    浏览(69)
  • 基于Java(SpringBoot框架)毕业设计作品成品(17)电子相册、摄影图片分享管理系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(55)
  • 6.串口通信和传感器的使用----粤嵌gec6818开发板上实现智能家居(光照气度,压强,海拔,湿度,温度达到临界值蜂鸣器自动警报等)

    串口是一种简单的通信接口,也是单片机中最常用,最简单的通信方式 通常传感器都是采用串口作为与上位机的通信接口 ARM板上提供了三个可以外接传感器的串口接口,位于开发板的右上角, 从上到下分别是: ​ 串口号 串口驱动设备文件名 ​ CON2 “/dev/ttySAC1” ​ CON3 “

    2024年02月16日
    浏览(166)
  • 怎样制作一本旅游电子相册呢?

    ​随着数码技术的发展,旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆,还能分享给亲朋好友,甚至上传到社交媒体上,让更多人了解您的旅行故事。那么,如何制作一本精美的旅游电子相册呢? 一、选择合适的软件 制作

    2024年01月18日
    浏览(52)
  • OpenHarmony开发实战:电子相册(ArkTS)

    本篇Codelab介绍了如何实现一个简单的电子相册应用的开发,主要功能包括: 实现首页顶部的轮播效果。 实现页面跳转时共享元素的转场动画效果。 实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 Swiper:滑块视图容器,提供子组件滑动轮播显示的

    2024年04月28日
    浏览(40)
  • 艾奇免费KTV电子相册视频制作软件

    不得不承认功能特色支持添加导入图形、视频、歌曲、卡啦ok动态歌词字幕文件:图形文件格式支持导入jpg/jpeg/png/bmp/gif等静态图形;视频文件支持导入AVI/MP4/FLV/MTS/MPG/RMVB等几乎所有常见视频文件;歌曲格式支持mp3/wma/acc/ogg/wav等几乎所有常见音频文件,同时支持输入有歌曲的

    2024年02月06日
    浏览(52)
  • 干货|小白也能自制电子相册赶紧码住~

    你是否想拥有一个独一无二的电子相册,却又苦于不知道如何下手?今天教你一个简单的方法,即使你是小白,也能轻松自制电子相册! 一、选择合适的工具 首先,你需要选择一个合适的工具来制作电子相册。有很多工具可供选择,包括手机APP、在线制作网站等。推荐大家

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包