当前位置:   article > 正文

粤嵌Gec6818---小项目功能实现简单步骤(RFID+图片显示+音乐+视频)_gec6818开发板项目

gec6818开发板项目

项目设计开发环境:

(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)打开虚拟机->菜单->管理->虚拟机设置->选项->共享文件夹->总是启用->添加。

a90e3faf65284561a408db65124b08be.png

 0cda842a6ad84b3ebe882b6068e37ebe.png

 (2)验证是否创建成功

    快捷键:Ctrl+ALT+T 进入命令输入窗口,然后输入cd➕空格➕/mnt/hgfs➕回车,再输入ls➕回车。

02c9ba267fc745b9966e11d4ba9c9f91.png

 

 2、程序编写

查看man手册:

11ae4d2f7be2494a983e6e4c88c04136.png man 2 手册函数概述:

ca1dfe21167f43f680ff83fd03b6a1ae.png

头文件:

  1. #ifndef _MAIN_H_//头文件名字大写
  2. #define _MAIN_H_
  3. //看一下这个头文件有没有被重复包含
  4. //头文件
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10. #include <linux/input.h>
  11. #include <sys/mman.h>
  12. #include <strings.h>
  13. #include <stdlib.h> //man 3 system ,man手册第三本书
  14. #include "rfid.h" //
  15. //全局变量
  16. int x,y;//这是触摸屏的坐标变量
  17. int fd;//触摸屏在文件描述符
  18. int lcd_fd;//LCD的文件描述符
  19. int * FB;//内存映射的起始指针
  20. int num;
  21. int ret;
  22. int RD;
  23. int yy;
  24. int aa;
  25. int dd;
  26. //函数声明
  27. int project_init();//初始化函数
  28. void touch_init();//触摸屏函数
  29. void project_show();//主机界面
  30. void project_delete();//释放销毁函数
  31. int bmp_show(char *phtname);//显示图片函数
  32. int system(const char *command);//
  33. //结构体定义
  34. //定义一个结构体存储读取触摸屏的信息
  35. struct input_event touch;
  36. int open_serial(void);
  37. int PiccRequest(int fd);
  38. int init_mplayer();
  39. //宏定义
  40. //联合体,枚举
  41. #endif//结束

 

部分程序:

  1. //主要程序
  2. void project_show()
  3. {
  4. //幻灯片
  5. bmp_show("/cry/hzw1.bmp");//刷海贼王1图片
  6. sleep(2);
  7. bmp_show("/cry/hzw2.bmp");//刷海贼王2图片
  8. sleep(2);
  9. bmp_show("/cry/hzw3.bmp");//刷海贼王3图片
  10. sleep(2);
  11. bmp_show("/cry/hzw4.bmp");//刷海贼王4图片
  12. sleep(2);
  13. bmp_show("/cry/hzw5.bmp");//刷海贼王5图片
  14. sleep(2);
  15. bmp_show("/cry/hzw6.bmp");//刷海贼王6图片
  16. sleep(2);
  17. bmp_show("/cry/skks.bmp");//刷刷卡开锁图片
  18. sleep(2);
  19. while(1)
  20. {
  21. ret = PiccRequest(RD);
  22. if(ret == -1) //若是请求超时退出,必须要关闭串口后,重新打开才能再次读取数据
  23. {
  24. usleep(500000);
  25. close(RD);
  26. //打开串口文件
  27. RD = open_serial();
  28. /*初始化串口*/
  29. init_tty(RD);
  30. timeout.tv_sec = 1;
  31. timeout.tv_usec = 0;
  32. continue;
  33. }
  34. else//(ret == 0)
  35. {
  36. printf("ok!\n");
  37. }
  38. //发送B命令 和获取卡号
  39. ret = PiccAnticoll(RD);
  40. //若获取的cardid为0,或获取id超时,则需重新发送'A'命令
  41. if(cardid == 0 || ret == -1) continue;
  42. else if(ret == 0)
  43. {
  44. printf("card ID = %x\n", cardid); //打印cardid号
  45. usleep(500000);
  46. //break;
  47. }
  48. //close(RD);
  49. if (cardid==0x6333f3ad) //选择固定卡号
  50. {
  51. printf("刷卡成功\n");
  52. bmp_show("/cry/skcg.bmp");//刷卡成功
  53. sleep(3);
  54. bmp_show("/cry/xuanzhe.bmp");//刷卡成功
  55. while (1)
  56. {
  57. touch_init();//触摸屏在初始化
  58. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  59. {
  60. printf("(%d,%d)\n",x,y);
  61. //界面选择、界面跳转
  62. //图片切换
  63. if(x>25&&x<340&&y>70&&y<180)
  64. {
  65. while(1)
  66. {
  67. touch_init();//触摸屏在初始化
  68. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  69. {
  70. printf("(%d,%d)\n",x,y);
  71. if(x > 615 && x < 800 && y > 390 && y < 480)
  72. {
  73. num++;
  74. printf("触碰左边屏幕");
  75. }
  76. if(x > 0 && x < 185 && y > 390 && y < 480)
  77. {
  78. num--;
  79. printf("触碰右边屏幕");
  80. }
  81. if (num==0)
  82. {
  83. bmp_show("/cry/hzw11.bmp");//显示图片
  84. }
  85. if(num==1)
  86. {
  87. printf("(%d,%d)\n",x,y);
  88. bmp_show("/cry/hzw22.bmp");//显示图片
  89. }
  90. if (num==2)
  91. {
  92. printf("(%d,%d)\n",x,y);
  93. bmp_show("/cry/hzw33.bmp");//显示图片
  94. }
  95. if(num==3)
  96. {
  97. printf("(%d,%d)\n",x,y);
  98. bmp_show("/cry/hzw44.bmp");//显示图片
  99. }
  100. if(num==4)
  101. {
  102. printf("(%d,%d)\n",x,y);
  103. bmp_show("/cry/hzw55.bmp");//显示图片
  104. }
  105. if(num==5)
  106. {
  107. printf("(%d,%d)\n",x,y);
  108. bmp_show("/cry/hzw66.bmp");//显示图片
  109. }
  110. if (num<0){num=5;}
  111. if (num>5){num=0;}
  112. }
  113. if(x > 310 && x < 500 && y > 390 && y < 480)
  114. {
  115. printf("退出头像显示界面");
  116. bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
  117. break;
  118. }
  119. }
  120. }
  121. //播放音乐
  122. if (x > 450 && x < 730 && y > 290 && y < 400)
  123. {
  124. bmp_show("/cry/bofangyingyue.bmp");//显示播放界面
  125. while (1)
  126. {
  127. touch_init();//触摸屏在初始化
  128. num=0;
  129. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  130. {
  131. printf("(%d,%d)\n",x,y);
  132. if(x > 620 && x < 800 && y > 390 && y <475)
  133. {
  134. yy++;
  135. printf("触碰右上角屏幕");
  136. }
  137. if(x > 29 && x < 190 && y > 390 && y < 475)
  138. {
  139. yy--;
  140. printf("触碰左上角屏幕");
  141. }
  142. if(yy==1)
  143. {
  144. system("killall -9 madplay");
  145. system("madplay yanyuxingzhou.mp3 &");
  146. }
  147. if (yy==2)
  148. {
  149. system("killall -9 madplay");
  150. system("madplay GuitarType.mp3 &");
  151. }
  152. if (yy==3)
  153. {
  154. system("killall -9 madplay");
  155. system("madplay dongmian.mp3 &");
  156. }
  157. if (yy<0){yy=3;}
  158. if (yy>3){yy=0;}
  159. if(x > 230 && x < 380 && y >390&& y < 475)//暂停
  160. {
  161. system("killall -19 madplay");
  162. }
  163. if(x > 430 && x < 580 && y > 390 && y < 475)//继续
  164. {
  165. system("killall -18 madplay");
  166. }
  167. if(x > 630 && x < 780 && y > 15 && y < 80)//退出
  168. {
  169. system("killall -9 madplay");
  170. bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
  171. break;
  172. }
  173. }
  174. }
  175. }
  176. //播放视频有bug
  177. if (x > 25 && x < 340 && y > 290 && y < 400)
  178. {
  179. int dd =init_mplayer();
  180. bmp_show("/cry/chupeng.bmp");//退出至选择界面图片
  181. while (1)
  182. {
  183. touch_init();//触摸屏在初始化
  184. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  185. {
  186. printf("(%d,%d)\n",x,y);
  187. if (x > 0 && x < 800 && y > 0 && y < 480)
  188. {
  189. system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 480 sp2.avi &");
  190. }
  191. if(x > 600 && x < 800 && y > 410 && y < 480)//左下角
  192. {
  193. //write(dd,"quit\n",5);
  194. system("killall -9 mplayer");
  195. bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
  196. break;
  197. }
  198. }
  199. }
  200. }
  201. //游戏假的界面
  202. if (x > 450 && x < 730 && y > 70 && y < 180)
  203. {
  204. //bmp_show("/cry/yxjm.bmp");//游戏开始界面
  205. //sleep(2);
  206. bmp_show("/cry/.bmp");//游戏界面
  207. while (1)
  208. {
  209. touch_init();//触摸屏在初始化
  210. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  211. {
  212. printf("(%d,%d)\n",x,y);
  213. if(x > 600 && x < 800 && y > 410 && y < 480)//左下角
  214. {
  215. printf("退出头像显示界面");
  216. bmp_show("/cry/xuanzhe.bmp");//退出至选择界面图片
  217. break;
  218. }
  219. }
  220. }
  221. }
  222. if (x > 25 && x < 340 && y > 410 && y < 480)
  223. {
  224. printf("退出头像显示界面");
  225. bmp_show("/cry/skks.bmp");//刷卡开锁照片
  226. break;
  227. }
  228. }
  229. }
  230. }
  231. else
  232. {
  233. printf("刷卡失败\n");
  234. bmp_show("/cry/sksb.bmp");//刷卡失败
  235. while (1)
  236. {
  237. touch_init();//触摸屏在初始化
  238. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)
  239. {
  240. printf("(%d,%d)\n",x,y);
  241. //界面选择、界面跳转
  242. if(x > 600 && x < 800 && y > 410 && y < 480)
  243. {
  244. printf("退出头像显示界面");
  245. bmp_show("/cry/skks.bmp");//退出至刷卡开锁图片
  246. break;
  247. }
  248. }
  249. }
  250. }
  251. }
  252. }

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

fd82f762212140f28d54fb87762ad41f.png

 项目框架:

1c1a253d7403444cbb0b6a691479d794.png

eefc4e9e10524eb0859beea45fdef584.png

 

 4、使用SecureCRT传输图片、视频(可U盘传输)

绿勾表示连接成功:

c8ad16337066404795439d7340c0734e.png

 

可以将图片或者文件拖到CRT里面选择Xmodem发送:

6b69014a939944e9a2ea3a44cf4374d4.png

 

查看开发板有没有mplayer:

ecb14bdb0ae34c65a62d6dd8883f6f86.png

 

传输文件命令:

rx+空格+你想传输的图片(修改图片宽度像素800x480,后缀为.bmp格式)

rx+空格+你想传输的视频或者音乐(音频格式.mp3、视频格式.avi)

 

U盘传输:

默认路径为:cd + 空格+/mnt/udisk:

aab29029d785416990c7972f77cff22e.png

 

cp+U盘中想传输的文件+/想要存在的路径:

下图意思是拷贝hzw1.bmp文件到根目录文件中的cry文件夹中

6acc5a56d7c24dbab51f39a55bc5693d.png

 查看当前路径或文件夹下有什么文件命令: ls5d855b7c67a84c0a9fb6a0e8dfeedf13.png

 

调成中文字符:

89373c7c945c43fe9b63454b84e825e1.png

 

5、程序写入开发板

把交叉编译生成的a.out文件或main等文件拖到 SecureCRT中点击发送即可。

2dd675c7a43d4bdcbc4f36e29b363885.png

 

6、项目成果图:

4c942ec067214d73a28b3456a0c42d1a.pngae4ee34a729041dba80dc5f9e45fcd89.pngb17ff7bb8b424159bcfc74fffe3f10aa.pnga973f81472a94e1f94395a19600fd557.png

 

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号