1.简述:电子相册,开发一个在ARM9开发板上的电子相册,实现图片的播放;

2.工具、材料:电脑(带有Ubuntu等系列Linux系统)、ARM9系列开发板、串口线一根、串口通信软件SecureCRT;

3.基本流程:

a.编写好源代码后在Ubuntu上编译为arm指令的可执行文件;a1:Linux下编译一般用gcc,基本用法为:gcc example.c  -o out; a2:这样编译出来的可执行文件还不能直接在linux上执行,需要赋予权限:chmod +x out (+x  —— -x);a3:执行源程序:./out  ;

b.经过a编译出来的可执行文件还是只能在电脑上执行,不能再arm开发板上面执行,这是因为arm和intel的汇编代码和指令集不一样,则需要通过使用gcc另一个方法:arm-linux-gcc example.c -o out ;

c.编写好可在arm上执行的文件后则需要导入到开发板上,通过串口线连接开发板和电脑,打开SecureCRT,点击连接,选择对应的com接口,连接好后传输即可;再经过a2 a3;

图1:效果展示

4.系列知识补充:

a.常用linux指令:除3中提到的几个外,补充如下  a1: cd   cd  / 跳转根目录   cd 文件夹 跳转到指定文件夹     note:可以只输入文件夹前几个字符用TAB补齐;a2:ls  显示当前文件夹下的文件, ls -l  查看详细信息;a3:su 切换用户  直接su 切换管理员root用户 ,su 用户名 切换对应用户,   note:有些可能会出现密码错误无法切换root用户,sudo passwd root 改一下密码,一般都可以解决; a4: rm   例如删库跑路指令: rm -rf /*   ,没事删删玩还可以,别删习惯了-_~; a5: mkdir 创建目录 ,对应删除目录:rmdir   note:文件夹不能和文件同名字的,这个在win下面也是对得;  a6:man  这是一个厉害的命令,可以man许多东西  note:  q退出,n、N搜索; a7:快捷键 ctrl c:退出正在执行的文件;ctrl l 清屏;

b.linux的文件:例如屏幕文件:/dev/fb0,使用方法同样是open,write,close;对触摸屏操作,获取触摸轨迹方向;

c.图片及播放:在这里我们采用bmp格式图片,即位图,这种图片是没有压缩的,读取既显示,采用双向循环链表把图片文件链接起来,根据获取到的触摸事件手指滑动方向来决定链表移动方向;

5.部分代码及实现:

1 头文件声明
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include <sys/mman.h>
#include<linux/input.h>
#include<stdlib.h>
#include<string.h>
2 定义各种变量
int fd_lcd,*plcd;//屏幕文件,映射
int fd_bmp;//图片文件3 相关函数定义
1.对一个像素点进行操作,显示颜色void lcd_draw_point(int x,int y,int color)//写像素点函数
{if(x>=800||y>=480)//屏幕大小为480*800,超过范围输出显示超界并返回{printf("point limited\n");return;}*(plcd+800*y+x)=color;//对应点进行赋值,显示对应颜色
}2.对全屏进行颜色刷新为指定颜色void lcd_clean(int color)      //填充指定颜色
{int x,y;for(y=0;y<480;y++){for(x=0;x<800;x++){lcd_draw_point(x,y,color);在全屏像素点逐个调用写像素点函数,显示指定颜色}}
}3.对图片读取写入到屏幕文件显示出来,及显示动效void draw_pic(struct node * Q)//画图片
{xg++;//xg为图片显示动画效果,在这里设定3种效果,通过xg自加再对3求余对应各个效果printf("\n\n%s\n\n",Q->picname);fd_bmp=open(Q->picname,O_RDWR);//打开图片文件,Q->picname为链表元素值,图片名if(fd_bmp == -1)//打开屏幕失败的返回值是-1{printf("open bmp  error\n");return ;}char buf[800*450*3+54];//对应图片文件字节数read(fd_bmp, buf, 800*450*3+54);//图片的颜色读入到buf数组close(fd_bmp);//关闭图片文件char b,g,r;int color,i,x,y;if(xg%3==0)//打印效果1,效果原理为按部分显示,将图片分为几个部分逐步显示出来,为突出动态效果,每个显示段中间使用暂停。{i = 0;for(y=50;y>=0;y--){for(x=0;x<800;x++){b = buf[54+i];g = buf[55+i];r = buf[56+i];color = (r<<16) | (g<<8) | b;lcd_draw_point(x,y,color);//一个个显示颜色i+=3;}}…………usleep(200);//暂停一会,毫秒级别i = 0;for(y=250;y>=0;y--){for(x=0;x<800;x++){b = buf[54+i];g = buf[55+i];r = buf[56+i];color = (r<<16) | (g<<8) | b;lcd_draw_point(x,y,color);i+=3;}}usleep(200);}
}4.根据手指滑动返回的参数控制链表顺序并将传入draw_pic()子程序显示相应的图片int touch(int f)//传递触摸方向的值和链表
{struct node * U;U=L;if(f==1){fd_lcd=open("/dev/fb0",O_RDWR);//打开屏幕文件if(fd_lcd= = -1)//打开失败返回-1{printf("open fd_lcd error\n");return -1;}plcd=mmap(NULL,800*480*4,PROT_WRITE | PROT_READ, MAP_SHARED,fd_lcd,0);//把文件或设备映射到内存中,操作内存的数据就相当于操作屏幕if(plcd == MAP_FAILED){printf("mmap failed\n");return -1;}printf("mmap success\n");printf("shun xu \n");L=U->next;draw_pic(L);   printf("shun xu \n");munmap(plcd,800*480*4);close(fd_lcd);return 1;}if(f==2){fd_lcd=open("/dev/fb0",O_RDWR);//打开屏幕文件if(fd_lcd==-1){printf("open fd_lcd error\n");return -1;}plcd=mmap(NULL,800*480*4,PROT_WRITE | PROT_READ, MAP_SHARED,fd_lcd,0);if(plcd == MAP_FAILED){printf("mmap failed\n");return -1;}printf("mmap success\n");printf("ni xu \n");L=U->pre;draw_pic(L);printf("ni xu \n");munmap(plcd,800*480*4);close(fd_lcd);return 1;}
}

附:设计报告、 源代码

Linux项目开发—电子相册相关推荐

  1. linux电子相册登录界面代码,Linux项目开发—电子相册

    1.简述:电子相册,开发一个在ARM9开发板上的电子相册,实现图片的播放: 2.工具.材料:电脑(带有Ubuntu等系列Linux系统).ARM9系列开发板.串口线一根.串口通信软件SecureCRT ...

  2. 嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植

    嵌入式linux项目开发(一)--BOA移植 项目目标:使用BOA.CGIC.SQLite搭建嵌入式web服务器 一.嵌入式web服务器BOA简介 在嵌入式设备的管理与交互中,基于Web方式的应用成为 ...

  3. 嵌入式linux 项目开发(一)——HTML编程

    嵌入式linux 项目开发(一)--HTML编程 本文主要讲解HTML的基础知识,主要是涉及嵌入式web服务器中数据交互HTML页面表单制作部分. 一.HTML简介 HTML是Hypertext Ma ...

  4. 嵌入式Linux项目开发流程

    使用实时操作系统作为应用程序代码平台的设计还面临着许多挑战,比如如何将功能分配给不同的并行任务.如何设计高可靠的进程间通信.以及如何在硬件上测试整个软件包等问题. 越来越多的OEM厂商发现,避免上述两 ...

  5. linux npm安装_怎样在Linux上开发vue项目

    怎样在Linux上开发vue项目 一.开发环境搭建:安装node.js环境以及vue cli工具 (1)安装node.js 从官网下载对应的二进制压缩包,如下图: 解压到程序安装目录 xz -d no ...

  6. [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】

    [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...

  7. [嵌入式Linux项目实战开发]基于QT4.8的仓库管理系统实现功能【2019年给力项目】

    [嵌入式Linux项目实战开发]基于QT4.8的仓库管理系统实现功能[2019年给力项目] 支持导出 excel 表格 支持查看商品操作日志 支持高精度浮点运算 支持同一商品以不同价格入库 该软件已开 ...

  8. Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器

    Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...

  9. HTTP服务器项目2:Linux多进程开发

    HTTP服务器项目2:Linux多进程开发 1.进程概述: 01 / 程序和进程 程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: ◼ 二进制格式标识:每个程序文件都包含用于描述可 ...

最新文章

  1. linux环境安全测评实验报告,linux第一次实验报告
  2. 机器学习知识点(二十八)Beta分布和Dirichlet分布理解
  3. 【Nginx】判断URL中是否存在某个参数Parameter
  4. Nginx 内置变量,细化规则,真实IP获取及限制连接请求
  5. SAP Commerce Cloud Product Action 导出的层级结构设计
  6. 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
  7. Python+OpenCV:ORB: An efficient alternative to SIFT or SURF
  8. Storm入门之第8章事务性拓扑
  9. 4207. 最长合法括号子序列
  10. 基于复杂网络的股票分析论文研读
  11. Web前端开发面试题——将字符串转成驼峰写法
  12. axf下不了 keil5jlink_keil无法生成axf文件之解决方法
  13. VVC学习之五:帧内预测——MPM列表建立
  14. 大学物理简明教程笔记
  15. excel熵值法计算权重_一文讲清楚分散投资(下)——让很多人顿悟的“熵增定律”在投资中的应用...
  16. php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  17. postgresql 在流复制模式下,WAL发生以下错误的对处方法
  18. PrettyTable | 美丽的表格
  19. 基于主成分分析(PCA)的人脸识别
  20. “联想笔记本电脑的电池显示0%,充不进电” 解决方案

热门文章

  1. 【HIT-OSLAB-实验中的碎碎念】
  2. 2020年元旦上海计算机类会议,CARC2020年元旦晚会
  3. BadUSB的前世今生:USB RUBBER DUCKY和Teensy USB
  4. 谷歌智能眼镜回归,针对商业用户售价999美元
  5. 年纪轻轻就要秃了?别怕,用它,让你重新找回浓密秀发!
  6. 什么是动态网页?动态网页有哪些特点?
  7. 菜鸟柳--23种设计模式初学记录笔记(二)装饰者设计模式
  8. 从〇开始可微神经搜索DARTS分析第〇章:意义与基础结构
  9. [PMZL]第1卷-误入天庭-02
  10. 3月第2周业务风控关注 |上海市网信办依法对“华尔街见闻”作出行政处罚