プロジェクトの設計および開発環境:
(1) VMware Workstation Pro ソフトウェア
(2) ubuntu12.04 (クロスコンパイル可能)
(3)セキュアCRT
(4) コードコンパイラ (notepad++/Visual Studio Code)
プロジェクト機能の説明:
(1) スライドショー: 画像スライドショーの表示を開始し、終了後に RFID カードのロック解除インターフェイスに入ります。
(2) RFID: カード スワイプ成功とカード スワイプ失敗 (カード スワイプ成功後に機能選択インターフェイスに入る) の 2 つのステータスがあります。
(3) 機能選択インターフェース: 電子フォトアルバム、ゲーム、音楽プレーヤー、ビデオプレーヤーの 4 つの機能。
(4) 電子フォトアルバム: 写真を手動で切り替えます。
(5) ゲーム: フォローアップ開発予定。
(6) 音楽再生: 手動で曲を切り替え、再生および一時停止機能を制御します。
(7) ビデオ再生: 再生、終了します。
設計手順:
1. Linuxを使用して共有フォルダーを作成します
2. プログラミング
3. Linuxの使用(クロスコンパイル)
4. SecureCRT を使用して写真とビデオを転送します (U ディスクで転送可能)
5. 開発ボードにプログラムを書き込む
6. プロジェクト結果マップ:
1. 共有フォルダーを作成する
(1) 仮想マシンを開きます -> [メニュー] -> [管理] -> [仮想マシンの設定] -> [オプション] -> [共有フォルダ] -> [常に有効] -> [追加]
(2) 作成が成功したかを確認する
ショートカット キー: Ctrl+ALT+T を押してコマンド入力ウィンドウに入り、cd ➕ space ➕ /mnt/hgfs ➕ Enter を入力し、続いて ls ➕ Enter を入力します。
2. プログラミング
マニュアルを参照してください。
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 (デフォルトで.out ファイルを生成)
arm-linux-gcc *.c -o a.out -std=c99 (.out ファイルの生成を指定)
arm-linux-gcc *.c -I../inc -o../bin/main -std=c99 (メインファイルを生成し、共有フォルダー内の bin フォルダーに保存することを指定)
プロジェクトの枠組み:
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 ファイルまたはクロスコンパイルによって生成されたメイン ファイルを SecureCRT にドラッグし、[送信] をクリックします。
6. プロジェクト結果マップ: