赞
踩
项目设计开发环境:
(1)VMware Workstation Pro软件
(2)ubuntu12 .04 (能交叉编译就行)
(3)SecureCRT
(4)代码编译器(notepad++/Visual Studio Code)
项目功能描述:
(1)幻灯片:开始进行图片幻灯片显示,结束后进入RFID刷卡开锁界面。
(2)RFID:刷卡成功和刷卡失败两种状态(刷卡成功后进入功能选择界面 )。
(3)功能选择界面:四个功能——电子相册、游戏、音乐播放、视频播放。
(4)电子相册:手动切换图片。
(5)游戏:后续待开发。
(6)音乐播放:手动切换歌曲,控制播放和暂停功能。
(7)视频播放:播放、退出。
设计步骤:
1、使用linux创建共享文件夹
2、程序编写
3、Linux的使用(交叉编译)
4、使用SecureCRT传输图片、视频(可U盘传输)
5、程序写入开发板
6、项目成果图:
1、创建共享文件夹
(1)打开虚拟机->菜单->管理->虚拟机设置->选项->共享文件夹->总是启用->添加。
(2)验证是否创建成功
快捷键:Ctrl+ALT+T 进入命令输入窗口,然后输入cd➕空格➕/mnt/hgfs➕回车,再输入ls➕回车。
2、程序编写
查看man手册:
man 2 手册函数概述:
头文件:
- #ifndef _MAIN_H_//头文件名字大写
- #define _MAIN_H_
- //看一下这个头文件有没有被重复包含
-
- //头文件
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <linux/input.h>
- #include <sys/mman.h>
- #include <strings.h>
-
- #include <stdlib.h> //man 3 system ,man手册第三本书
- #include "rfid.h" //
-
- //全局变量
- int x,y;//这是触摸屏的坐标变量
- int fd;//触摸屏在文件描述符
- int lcd_fd;//LCD的文件描述符
- int * FB;//内存映射的起始指针
- int num;
- int ret;
- int RD;
- int yy;
- int aa;
- int dd;
-
- //函数声明
- int project_init();//初始化函数
- void touch_init();//触摸屏函数
- void project_show();//主机界面
- void project_delete();//释放销毁函数
- int bmp_show(char *phtname);//显示图片函数
- int system(const char *command);//
- //结构体定义
- //定义一个结构体存储读取触摸屏的信息
- struct input_event touch;
- int open_serial(void);
- int PiccRequest(int fd);
- int init_mplayer();
- //宏定义
- //联合体,枚举
-
- #endif//结束
部分程序:
-
- //主要程序
- void project_show()
- {
- //幻灯片
- bmp_show("/cry/hzw1.bmp");//刷海贼王1图片
- sleep(2);
- bmp_show("/cry/hzw2.bmp");//刷海贼王2图片
- sleep(2);
- bmp_show("/cry/hzw3.bmp");//刷海贼王3图片
- sleep(2);
- bmp_show("/cry/hzw4.bmp");//刷海贼王4图片
- sleep(2);
- bmp_show("/cry/hzw5.bmp");//刷海贼王5图片
- sleep(2);
- bmp_show("/cry/hzw6.bmp");//刷海贼王6图片
- sleep(2);
- bmp_show("/cry/skks.bmp");//刷刷卡开锁图片
- sleep(2);
- while(1)
- {
- ret = PiccRequest(RD);
- if(ret == -1) //若是请求超时退出,必须要关闭串口后,重新打开才能再次读取数据
- {
- usleep(500000);
- close(RD);
- //打开串口文件
- RD = open_serial();
- /*初始化串口*/
- init_tty(RD);
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
- continue;
- }
-
- else//(ret == 0)
- {
- printf("ok!\n");
- }
-
- //发送B命令 和获取卡号
- ret = PiccAnticoll(RD);
-
- //若获取的cardid为0,或获取id超时,则需重新发送'A'命令
- if(cardid == 0 || ret == -1) continue;
-
- else if(ret == 0)
- {
- printf("card ID = %x\n", cardid); //打印cardid号
- usleep(500000);
- //break;
- }
- //close(RD);
- if (cardid==0x6333f3ad) //选择固定卡号
- {
- printf("刷卡成功\n");
- bmp_show("/cry/skcg.bmp");//刷卡成功
- sleep(3);
- bmp_show("/cry/xuanzhe.bmp");//刷卡成功
- while (1)
- {
- touch_init();//触摸屏在初始化
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
- //界面选择、界面跳转
-
- //图片切换
- if(x>25&&x<340&&y>70&&y<180)
- {
- while(1)
- {
- touch_init();//触摸屏在初始化
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
-
- if(x > 615 && x < 800 && y > 390 && y < 480)
- {
- num++;
- printf("触碰左边屏幕");
- }
- if(x > 0 && x < 185 && y > 390 && y < 480)
- {
- num--;
- printf("触碰右边屏幕");
- }
- if (num==0)
- {
- bmp_show("/cry/hzw11.bmp");//显示图片
- }
- if(num==1)
- {
- printf("(%d,%d)\n",x,y);
- bmp_show("/cry/hzw22.bmp");//显示图片
- }
- if (num==2)
- {
- printf("(%d,%d)\n",x,y);
- bmp_show("/cry/hzw33.bmp");//显示图片
- }
- if(num==3)
- {
- printf("(%d,%d)\n",x,y);
- bmp_show("/cry/hzw44.bmp");//显示图片
- }
- if(num==4)
- {
- printf("(%d,%d)\n",x,y);
- bmp_show("/cry/hzw55.bmp");//显示图片
- }
- if(num==5)
- {
- printf("(%d,%d)\n",x,y);
- bmp_show("/cry/hzw66.bmp");//显示图片
- }
- if (num<0){num=5;}
- if (num>5){num=0;}
-
- }
- if(x > 310 && x < 500 && y > 390 && y < 480)
- {
- printf("退出头像显示界面");
- bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
- break;
- }
- }
- }
-
- //播放音乐
- if (x > 450 && x < 730 && y > 290 && y < 400)
- {
- bmp_show("/cry/bofangyingyue.bmp");//显示播放界面
- while (1)
- {
- touch_init();//触摸屏在初始化
- num=0;
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
-
- if(x > 620 && x < 800 && y > 390 && y <475)
- {
- yy++;
- printf("触碰右上角屏幕");
- }
- if(x > 29 && x < 190 && y > 390 && y < 475)
- {
- yy--;
- printf("触碰左上角屏幕");
- }
- if(yy==1)
- {
- system("killall -9 madplay");
- system("madplay yanyuxingzhou.mp3 &");
- }
- if (yy==2)
- {
- system("killall -9 madplay");
- system("madplay GuitarType.mp3 &");
- }
- if (yy==3)
- {
- system("killall -9 madplay");
- system("madplay dongmian.mp3 &");
- }
- if (yy<0){yy=3;}
- if (yy>3){yy=0;}
-
- if(x > 230 && x < 380 && y >390&& y < 475)//暂停
- {
- system("killall -19 madplay");
- }
-
- if(x > 430 && x < 580 && y > 390 && y < 475)//继续
- {
- system("killall -18 madplay");
- }
- if(x > 630 && x < 780 && y > 15 && y < 80)//退出
- {
- system("killall -9 madplay");
- bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
- break;
- }
- }
- }
- }
-
- //播放视频有bug
- if (x > 25 && x < 340 && y > 290 && y < 400)
- {
- int dd =init_mplayer();
- bmp_show("/cry/chupeng.bmp");//退出至选择界面图片
- while (1)
- {
- touch_init();//触摸屏在初始化
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
- if (x > 0 && x < 800 && y > 0 && y < 480)
- {
- system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 480 sp2.avi &");
- }
- if(x > 600 && x < 800 && y > 410 && y < 480)//左下角
- {
- //write(dd,"quit\n",5);
- system("killall -9 mplayer");
- bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
- break;
- }
- }
- }
- }
-
- //游戏假的界面
- if (x > 450 && x < 730 && y > 70 && y < 180)
- {
- //bmp_show("/cry/yxjm.bmp");//游戏开始界面
- //sleep(2);
- bmp_show("/cry/.bmp");//游戏界面
- while (1)
- {
- touch_init();//触摸屏在初始化
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
-
-
- if(x > 600 && x < 800 && y > 410 && y < 480)//左下角
- {
- printf("退出头像显示界面");
- bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
- break;
- }
- }
- }
-
- }
-
- if (x > 25 && x < 340 && y > 410 && y < 480)
- {
- printf("退出头像显示界面");
- bmp_show("/cry/skks.bmp");//刷卡开锁照片
- break;
- }
- }
- }
-
- }
- else
- {
- printf("刷卡失败\n");
- bmp_show("/cry/sksb.bmp");//刷卡失败
- while (1)
- {
- touch_init();//触摸屏在初始化
- if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
- {
- printf("(%d,%d)\n",x,y);
- //界面选择、界面跳转
-
- if(x > 600 && x < 800 && y > 410 && y < 480)
- {
- printf("退出头像显示界面");
- bmp_show("/cry/skks.bmp");//退出至刷卡开锁图片
- break;
- }
- }
- }
- }
- }
- }
-
3、Linux的使用(交叉编译)
编译命令:
arm-linux-gcc *.c -std=c99 (默认生成a.out文件)
arm-linux-gcc *.c -o a.out -std=c99 (指定生成a.out文件)
arm-linux-gcc *.c -I../inc -o../bin/main -std=c99 (指定生成main文件并存在共享文件夹中的bin文件夹中)
arm-linux-gcc *.c -std=gnu99
项目框架:
4、使用SecureCRT传输图片、视频(可U盘传输)
绿勾表示连接成功:
可以将图片或者文件拖到CRT里面选择Xmodem发送:
查看开发板有没有mplayer:
传输文件命令:
rx+空格+你想传输的图片(修改图片宽度像素800x480,后缀为.bmp格式)
rx+空格+你想传输的视频或者音乐(音频格式.mp3、视频格式.avi)
U盘传输:
默认路径为:cd + 空格+/mnt/udisk:
cp+U盘中想传输的文件+/想要存在的路径:
下图意思是拷贝hzw1.bmp文件到根目录文件中的cry文件夹中
查看当前路径或文件夹下有什么文件命令: ls
调成中文字符:
5、程序写入开发板
把交叉编译生成的a.out文件或main等文件拖到 SecureCRT中点击发送即可。
6、项目成果图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。