目录
1、项目名字
基于GEC6818的智能家居系统
2、项目实现功能
1)开机画面
2)自动播放照片(bmp图片,jpg图面)
3)手动播放照片(上下选择)
4)MP3的播放,暂停,继续功能
5)MP4的播放,暂停,继续功能
6)读取目录里的文件信息,显示到GEC6818屏幕上
7)链表的形式存储图片信息
项目需要用到jpeg库,jpeg库的移植可参考我以下的这篇博客:
(31条消息) jpeg库的移植步骤(GEC6818)_ljpeg库_sakura0908的博客-CSDN博客
3、部分功能讲解
做项目的流程(供参考)
1.jpg的移植
2.mp3_mp4功能的测试
3.字库功能的测试
4.实现项目的框架
5.实现各个子功能
1).mp3
2).mp4
3).管理员
说明: 读取目录里面的文件信息,然后打印到GEC6818屏幕上。(需要使用到字库)
4).自动播放
说明:先读取目录里面的jpg图片和bmp图片,然后存入到双向循环链表中;最后遍历双向循环链表完成整张图片的自动播放;以上做完之后再做bmp图片的算法。
注意:读出来的文件名要区分jpg图片和bmp图片。
5).上下张
说明:比如说有3张图片1.jpg 2.jpg 3.jpg;那么按下一张后要从1.jpg跳到2.jpg再跳到3.jpg;
按上一张后要从3.jpg跳到2.jpg再跳到1.jpg
6).完成bmp图片的算法
说明:bmp图片的算法包括:百叶窗、左进、右进、上进、下进等等。
注意: bmp图片的分辨率可以通过解析bmp的头54个字节的信息来获取。
4、项目主函数
int main(int argc,char **argv)
{
//硬件的初始化
fd_lcd = open("/dev/fb0",O_RDWR);
if(fd_lcd == -1)
{
printf("open lcd fail\n");
return -1;
}
addr = mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd_lcd,0);
if(addr == NULL)
{
printf("mmap lcd fail\n");
return -1;
}
fd_bmp = open("/study/project_home/pic/xitong.bmp",O_RDWR);
if(fd_bmp == -1)
{
printf("open bmp fail\n");
return -1;
}
fd_ts = open("/dev/input/event0",O_RDWR);
if(fd_ts < 0)
{
printf("open ts fail");
return -1;
}
//链表的初始化
node* head = initList();
dp = opendir("/study/project_home/pic");
if(dp == NULL)
{
printf("opendir fail");
return -1;
}
chdir("/study/project_home/pic");
int j =0;
while(1)
{
ep = readdir(dp);
if(ep == NULL)
break;
if(ep->d_name[0] == '.')
continue;
if(ep->d_name[2] == 'b')
{
node* new = newNode(ep->d_name);
insertHead(head, new);
}
if(ep->d_name[2] == 'j')
{
node* new = newNode(ep->d_name);
insertHead(head, new);
}
}
show_bmp("/study/project_home/menu/kaiji.bmp");
sleep(3);
while(1)
{
// //功能界面
show_bmp("/study/project_home/pic/xitong.bmp");
get_xy(&x,&y);
if(x>80&&x<280&&y>90&&y<150)
{
auto_play(head);
}
if(x>500&&x<700&&y>90&&y<150)
{
hand_play(head);
}
if(x>70&&x<190&&y>340&&y<390)
{
chdir("/study/project_home/mp3_mp4");
mp3_play();
chdir("/study/project_home/pic");
}
if(x>340&&x<460&&y>340&&y<390)
{
chdir("/study/project_home/mp3_mp4");
mp4_play();
chdir("/study/project_home/pic");
}
if(x>580&&x<730&&y>340&&y<390)
{
chdir("/study/project_home/usr_date");
admin_info();
chdir("/study/project_home/pic");
}
}
//链表的释放
head = destroy(head);
//关闭硬件
munmap(addr,800*480*4);
close(fd_bmp);
close(fd_lcd);
close(fd_ts);
closedir(dp);
return 0;
}