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


(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;} }}}//播放视频有bugif (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、项目成果图:




源码关注后私聊!!!
相关文章:
粤嵌Gec6818---小项目功能实现简单步骤(RFID+图片显示+音乐+视频)
项目设计开发环境: (1)VMware Workstation Pro软件 (2)ubuntu12 .04 (能交叉编译就行) (3)SecureCRT (4)代码编译器(notepad/Vis…...
opencv学习 特征提取
内容来源于《opencv4应用开发入门、进阶与工程化实践》 图像金字塔 略 拉普拉斯金字塔 对输入图像进行reduce操作会生成不同分辨率的图像,对这些图像进行expand操作,然后使用reduce减去expand之后的结果,就会得到拉普拉斯金字塔图像。 …...
关于maven项目构建的解释
在Idea中使用模块化构建项目 项目介绍: sky-take-out sky-common pom.xml sky-pojo pom.xml sky-server pom.xml pom.xml 说明 sky-server依赖sky-pojo和sky-common,继承sky-take-outsky-pojo继承sky-take-outsky-common继承sky-take-out 由于Idea编…...
IMU/捷联惯导常见的术语,以及性能评价标准(附Python解析代码)
0. 简介 现在的机器人领域在普遍使用IMU(惯性导航单元)。该系统有三个加速度传感器与三个角速度传感器(陀螺)组成,加速度计用来感受飞机相对于地垂线的加速度分量,陀螺仪用来感知飞机的角速率变化…...
Debezium发布历史98
原文地址: https://debezium.io/blog/2020/11/12/debezium-1-3-1-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 1.3.1.Final 发布 十一月 12, 2020 作者: 克里…...
APUE学习之进程间通信(IPC)(下篇)
目录 一、进程间通信(IPC) 二、信号量(Semaphore) 1、基本概念 2、同步关系与互斥关系 3、临界区与临界资源 4、信号量的工作原理 5、信号量编程 6、实战演练 三、共享内存(Shared Memory) 1、…...
【Java 设计模式】行为型之中介者模式
文章目录 1. 定义2. 应用场景3. 代码实现结语 中介者模式(Mediator Pattern)是一种行为型设计模式,用于通过一个中介对象来集中管理多个对象之间的交互关系,从而降低对象之间的耦合度。中介者模式通过将对象之间的通信委托给中介者…...
MySql 慢SQL配置,查询,处理
一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…...
算法:分界线
一、算法描述 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字 剪切下来,剪拼成匿名信。 现在有一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。 但为…...
STM32单片机基本原理与应用(四)
直流电机驱动控制原理 1、电机正反转控制 在STM32中,直流电机的正反转控制主要通过改变电机输入电源的极性来实现。当电机的电压极性发生变化时,电机的旋转方向也会相应改变。在硬件电路中,可以通过继电器或晶体管等电子开关来切换电机的电源…...
elk之安装和简单配置
写在前面 本文看下elk的安装和简单配置,安装我们会尝试通过不同的方式来完成,也会介绍如何使用docker,docker-compose安装。 1:安装es 1.1:安装单实例 下载es安装包 在这里 下载,下载后解压到某个目录…...
springboot(ssm环保网站 绿色环保宣传系统Java系统
springboot(ssm环保网站 绿色环保宣传系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7࿰…...
【MBtiles数据索引和服务发布】GeoServer改造Springboot番外系列二
xyz地图服务访问示例:http://192.168.1.240:8081/gmserver/raster/xyz/firstWP:Imagery-raster/{z}/{x}/{y}.jpg 访问示例如下: mbtiles目录结构 根据z,x,y获取对应mbtiles文件路径的工具方法 说明:重点是使用getMb…...
Redis抓取数据到Logstash再推到Elasticsearch集群
一、安装Logstash 前面安装过Logstash了,不做解释直接跳过 参考:上一篇文章 二、配置Logstash 在logstash目录下,编辑我们之前的配置文件logstash.conf vim logstash.confinput、output字面意思,从redis去拿取数据,输出到Elasticsearch data_type:数据类型为list k…...
【代码随想录-链表】反转链表
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…...
32GPIO输入LED闪烁蜂鸣器
一.GPIO简介 所有的GPIO都挂载到APB2上,每个GPIO有16个引脚 内核可以通过APB2对寄存器进行读写,寄存器都是32位的,但每个引脚端口只有16位 驱动器用于增加信号的驱动能力 二.具体…...
Qt|QPushButton控件讲解
前提 按钮分为了四种状态:常态、聚焦、按下、禁用 前一段时间更新了MFC框架下CButton的自绘。因为MFC框架下的按钮限制性很高,所以只能由自绘实现各种风格,但是QT框架完美的解决了这个问题,我们只需要了解如何调用,就…...
再学webpack
1 优化 webpack 打包体积的思路 优化 webpack 打包体积的思路包括: 提取第三方库或通过引用外部文件的方式引入第三方库:将第三方库单独打包,并通过 CDN 引入,减少打包体积。使用代码压缩插件:例如 UglifyJsPlugin&a…...
systemd:service与target使用及相关命令
文章目录 一、 unit1.1 unit常用命令 二、 service系统服务2.1 unit service配置文件2.1.1 [Unit]区块2.1.2 [Service]区块2.1.3 [Install]区块2.1.4 示例介绍 2.2 service常用命令 三、target3.1 tartget有关命令 四、其他系统命令4.1 systemctl 相关系统管理命令4.2 journalc…...
FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》
2024年1月24日, FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图,共计展示20个一级分类、108个细分安全领域,旨在为广大企业提供网络安全产品选型参考,帮助企业了解中国网络安全技术与市场的…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
