項目設計開發(fā)環(huán)境:
(1)VMware Workstation Pro軟件
(2)ubuntu12 .04 (能交叉編譯就行)
(3)SecureCRT?
(4)代碼編譯器(notepad++/Visual Studio Code)
項目功能描述:
(1)幻燈片:開始進行圖片幻燈片顯示,結束后進入RFID刷卡開鎖界面。
(2)RFID:刷卡成功和刷卡失敗兩種狀態(tài)(刷卡成功后進入功能選擇界面 )。
(3)功能選擇界面:四個功能——電子相冊、游戲、音樂播放、視頻播放。
(4)電子相冊:手動切換圖片。
(5)游戲:后續(xù)待開發(fā)。
(6)音樂播放:手動切換歌曲,控制播放和暫停功能。
(7)視頻播放:播放、退出。
設計步驟:
1、使用linux創(chuàng)建共享文件夾
2、程序編寫
3、Linux的使用(交叉編譯)
4、使用SecureCRT傳輸圖片、視頻(可U盤傳輸)
5、程序寫入開發(fā)板
6、項目成果圖:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-478306.html
1、創(chuàng)建共享文件夾
(1)打開虛擬機->菜單->管理->虛擬機設置->選項->共享文件夾->總是啟用->添加。
?
?(2)驗證是否創(chuàng)建成功
? ? 快捷鍵:Ctrl+ALT+T 進入命令輸入窗口,然后輸入cd?空格?/mnt/hgfs?回車,再輸入ls?回車。
?文章來源:http://www.zghlxwxcb.cn/news/detail-478306.html
?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();
//宏定義
//聯(lián)合體,枚舉
#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");
}
//發(fā)送B命令 和獲取卡號
ret = PiccAnticoll(RD);
//若獲取的cardid為0,或獲取id超時,則需重新發(fā)送'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)//繼續(xù)
{
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發(fā)送:
?
查看開發(fā)板有沒有mplayer:
?
傳輸文件命令:
rx+空格+你想傳輸的圖片(修改圖片寬度像素800x480,后綴為.bmp格式)
rx+空格+你想傳輸的視頻或者音樂(音頻格式.mp3、視頻格式.avi)
?
U盤傳輸:
默認路徑為:cd + 空格+/mnt/udisk:
?
cp+U盤中想傳輸的文件+/想要存在的路徑:
下圖意思是拷貝hzw1.bmp文件到根目錄文件中的cry文件夾中
?查看當前路徑或文件夾下有什么文件命令: ls
?
調成中文字符:
?
5、程序寫入開發(fā)板
把交叉編譯生成的a.out文件或main等文件拖到 SecureCRT中點擊發(fā)送即可。
?
6、項目成果圖:
源碼關注后私聊!?。?/p>
?
?
?
到了這里,關于粵嵌Gec6818---小項目功能實現(xiàn)(RFID+圖片顯示+音樂+視頻)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!