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

项目设计开发环境:

(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

头文件:

#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

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

 

 

 

 

 

  • 28
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白_往北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值