赞
踩
哔哩哔哩项目视频链接:https://www.bilibili.com/video/BV1Hp4y1v7Pt
代码资料链接:https://download.csdn.net/download/mbs520/16668844
项目功能展示:
一、开机显示登入界面,可密码管理员登入,也可以免密码普通用户登入

二、登入后显示桌面,显示5个应用 ,分别是图片、视频、音乐、设置、文件管理

三、音乐相册功能,播放图片同时播放背景音乐,可以左右滑动切换图片等操作

四、视频播放功能,可以播放avi,mp4等格式视频

五、音乐播放器,可以播放mp3格式的音频

六、设置壁纸,可以根据喜好设置自己喜欢的壁纸

七、文件管理,可以对文件进行预览和删除

基于ARM平台的广告机系统设计
应用:电梯、公交车、公共场合。。。
项目基本功能:
1.广告图片切换(可以播放对应背景音乐)
2.广告视频播放
3.可以检索某个目录下所有的图片或多媒体数据(音乐,视频) readdir
显示出来,对其进行管理(加入播放列表,将其从列表移除)
(增删改查之类的多媒体操作,可以使用Secure CRT终端显示并输入)
项目拓展功能:(供参考,可自行决定更多功能)
1.使用触摸屏点击,实现多媒体数据管理(用户交互)
2.添加密码输入界面,实现用户管理机制
例如: root管理员权限:多媒体添加、删除、调整顺序、用户管理…
gec普通用户权限:多媒体浏览、调整顺序…
3.递归检索,可检索低层的所有子目录。(需要注意文件路径,绝对路径)
1、图片准备
下载大量图片,用画图软件转换为.bmp图片方便显示
系统图片:

斗罗大陆广告图片:

二、视频准备

准备若干个斗罗视频,mp4,avi的都可以,avi的视频播放的更加流畅
三、音乐准备
下载几首斗罗主题曲,博主比较穷,找了半天找到一首不要钱的斗罗大陆,用中文不好传输我就把名字改成了英文。

代码文件目录:

代码量比较多,所以用分文件管理,Makefile编译。
1、利用opendir函数打开文件目录检索文件
2、利用内核链表保存文件名方便管理
typedef struct kernel_list{
// 1.数据域,保存文件名
char buf[256];
// 2.指针域(小结构体)
struct list_head list;
}kl_st, *kl_pt;
3、利用.bmp .ebm图片代码驱动播放图片文件(其他)
//显示bmp void show_bmp(char *bmp_patpname,int x_offset,int y_offset) { /*向lcd文件中写入像素点数据*/ //打开bmp图片 int bmp_fd = open(bmp_patpname, O_RDONLY);//完整路径 /mnt/hgfs/shear/day004/1.bmp if(bmp_fd == -1) { perror("打开bmp图片失败"); exit(-1); } //读取图片头部信息 bmp_head myhead; read(bmp_fd, &myhead, sizeof(bmp_head)); //申请缓冲区 char tmp_buf[myhead.width*myhead.height*3]; //清空缓冲区 bzero(tmp_buf,sizeof(tmp_buf)); //读取图片数据 read(bmp_fd, tmp_buf, sizeof(tmp_buf)); //关闭图片文件 close(bmp_fd); //将数据存入映射内存 //将数据存入映射内存 int i,j; for(i=0; i<myhead.height; i++) for(j=0; j<myhead.width; j++) { *(FB+((i+y_offset)*800+j+x_offset)*4) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3]; *(FB+((i+y_offset)*800+j+x_offset)*4+1) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+1]; *(FB+((i+y_offset)*800+j+x_offset)*4+2) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+2]; *(FB+((i+y_offset)*800+j+x_offset)*4+3) = 0x00<<24; } }
4、用mplayer软件播放视频与音乐,相关软件文件已经上传到资料链接

mplayer使用方法:
首先把mplayer上传到开发板的 /usr/bin 文件目录下 使用一下mplayer 命令,看一下能否使用
命令使用:
1)、播放视频:播放起始位置(240,70),显示区域大小400*240,&后台播放
system("mplayer -geometry 240:70 -zoom -x 400 -y 240 ./mp4/dl.mp4 &");
2)、播放音乐:后台播放dl.mp3
system("mplayer ./dl.mp3 &");
代码展示
由于代码过长,这里只显示部分代码
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #include <string.h> #include "lcd.h" #include "ts.h" #include "kl_list.h" #include "list.h" #include "font.h" //密码 int pswd_cheak(char *psword); //显示文件名 void LCD_show_filename(int x,int y,kl_pt head); //应用界面触摸选择 int app_choose(void); //文件选择 int file_choose(void); //图片 void photo(void); //视频 void video(void); //音乐 void music(void); //设置 void settings(void); //移除文件 void file_del(char *phname,kl_pt head); //文件触摸选项 int file_choose(void); //扫描tailname文件到phname void file_scan(char *phname,char *tailname); //移除文件 void file_del(char *phname,kl_pt head); //文件管理 void file_manage(const char *path_name); //文件管理器触摸选项 int file_mag_choose(void); kl_pt all_head;//递归链 char walpar[64]="bz1.bmp";//壁纸 int root=0;//0:游客 1:root用户 //主函数 int main(int argc, const char *argv[]) { all_head=kl_list_init();//初始化递归链 if(argc != 2) { perror("input error\n"); return 0; } char psword[]="1234";//设置密码 int x=0,y=0; int app_val; open_lcd();//初始化lCd open_ts();//初始化触摸屏 Init_Font();// 初始化字库 show_ebm("./ebm/14.ebm");//显示密码界面 root = pswd_cheak(psword);//获取登入权限 while(1) { show_bmp(walpar,0,0);//显示壁纸 show_bmp("./bmp/15.bmp",110,190);//显示应用图标 show_bmp("./bmp/16.bmp",270,190); show_bmp("./bmp/17.bmp",430,190); show_bmp("./bmp/18.bmp",590,190); show_bmp("./bmp/file.bmp",590,70); while(1) { app_val=app_choose();//获取触摸屏信息 if(app_val) { switch(app_val) { case 1:photo();break;//应用 case 2:video();break; case 3:music();break; case 4:settings();break; case 5:file_manage(".");//递归遍历 } break; } } } close_lcd();//关闭文件 close_ts(); //关闭字库 UnInit_Font(); return 0; }
资料说明:
1、拷贝整个目录到开发板(tftp nfs u盘…)

2、运行a.out
./a.out ./
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。