RFID充電消費システム


序文

       無線周波数識別(RFID)は、無線周波数識別の略語です。
       原理は、ターゲットを識別する目的を達成するための、リーダーとタグ間の非接触データ通信です。RFIDには幅広い用途があります。典型的な用途には、動物チップ、自動車チップ盗難防止装置、アクセス制御、駐車場制御、生産ラインの自動化、および資材管理が含まれます。


ヒント:以下はこの記事の内容です。以下のケースは参照用です。

1つは、コンパイル環境です。

       このシステムはVC ++ 6.0バージョンに基づいています。このソフトウェアをインストールしていない読者は、BaiduNetdiskからソフトウェアをダウンロードできます。
       リンク:https
       ://pan.baidu.com/s/1_pUq7swULst7plceOAQpSA抽出コード:l0x5

第二に、充電消費システムを実現する

1.プロジェクトを作成します

        ソフトウェア->ファイル->新規を開きます。以下のインターフェースが表示されます。プロンプトに従って、プロジェクトの作成を完了してください。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

2.mwf32関連のAPIドキュメントを追加します

(1)APIフォルダーの下にある3つのファイルmwrf32。*を、作成したプロジェクトのフォルダーにコピーします。
ここに画像の説明を挿入
   関連ドキュメントがシステムプロジェクト全体に組み込まれました!

(2)ヘッダーファイルを追加します
ここに画像の説明を挿入
(3)プロジェクト->設定->接続->オブジェクト/ライブラリモジュール
ここに画像の説明を挿入

3.一般的に使用される機能の紹介

    機能説明
rf_usbinit()USB通信を初期化します
rf_get_status()バージョン番号を取得し
ます
rf_load_key()リーダーに認証パスワードをダウンロードしますrf_beep()ブザー
rf_card()カードを検索します
rf_authentication()認証
rf_write()カードを書き込みます
rf_read()カードを読み取ります
rf_halt ()カード操作を終了します
rf_exit()シリアルポートを閉じます

4.インターフェースを構築します

   コントロールを介して静的テキスト、編集ボックス、ボタン、リストボックスを選択し、次のインターフェイスを構築します
ここに画像の説明を挿入

5.変数を設定します

       右クリック->クラスの作成ウィザード->メンバー変数->変数の追加、変数名と変数タイプの選択
ここに画像の説明を挿入

6.プログラムを書く

       ダブルクリックしてカードを読み取り、情報を初期化し、再充電し、消費後にプログラムを直接書き込みます。

(1)[グローバル変数の定義]対応するコードは次のとおりです。

	HANDLE icdev;
	int st;
	int sector=1;

	CString str1;	//余额
	CString str2;	//充值金额
	CString str3;	//消费金额

(2)[リーディングカード]対応するコードは次のとおりです。

	icdev=rf_usbinit();
	if (icdev>0) {
    
    list.AddString("设备连接成功!");}
	else {
    
    list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {
    
    list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {
    
    list.AddString("认证失败!");}

	//UpdateData();

	unsigned char databuff[17];
	ZeroMemory(databuff,17); 
	st=rf_read(icdev,sector*4,databuff);
	if(st==0) {
    
    list.AddString((char*)databuff);xingming=databuff;}

	st=rf_read(icdev,sector*4+1,databuff);
	if(st==0) {
    
    list.AddString((char*)databuff);xuehao=databuff;}

	st=rf_read(icdev,sector*4+2,databuff);
	str1=databuff;	//类型转换
	if(st==0) {
    
    list.AddString((char*)databuff);yue=atof(str1);}

	UpdateData(false);

	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	//if(st==0) {list.AddString("断开连接!");}

(3)【初期化情報】対応するコードは以下のとおりです。

	icdev=rf_usbinit();
	if (icdev>0) {
    
    list.AddString("设备连接成功!");}
	else {
    
    list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {
    
    list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) 
	{
    
    
		list.AddString("认证失败!");
	}
	
	else
	{
    
    
		UpdateData();
		str1.Format(_T("%.2f"),yue);	//余额

		char* data1=xingming.GetBuffer(xingming.GetLength());	//姓名
		char* data2=xuehao.GetBuffer(xuehao.GetLength());	//学号
		char* data3=str1.GetBuffer(str1.GetLength());	//余额

		st=rf_write(icdev,sector*4,(unsigned char*)data1);
		if(st==0) {
    
    list.AddString("写姓名成功!");}
		else {
    
    list.AddString("写姓名失败!");}

		st=rf_write(icdev,sector*4+1,(unsigned char*)data2);
		if(st==0) {
    
    list.AddString("写学号成功!");}
		else {
    
    list.AddString("写学号失败!");}

		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {
    
    list.AddString("写余额成功!");}
		else {
    
    list.AddString("写余额失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4,databuff);
		if(st==0) {
    
    list.AddString((char*)databuff);}
		st=rf_read(icdev,sector*4+1,databuff);
		if(st==0) {
    
    list.AddString((char*)databuff);}
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {
    
    list.AddString((char*)databuff);}

		UpdateData(false);
	}

	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	//if(st==0) {list.AddString("断开连接!");}

(4)[リチャージ]対応するコードは次のとおりです。

	icdev=rf_usbinit();

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {
    
    list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {
    
    list.AddString("认证失败!");}

	else	//读卡才能进行操作
	{
    
    
		UpdateData();
		yue=yue+chongzhi;	//充值
		chongzhi=0;	//充值置零
		str1.Format(_T("%.2f"),yue);	//余额
		str2.Format(_T("%.2f"),chongzhi);  //充值置零

		char* data3=str1.GetBuffer(str1.GetLength());	//余额
		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {
    
    list.AddString("充值成功!");}
		else {
    
    list.AddString("充值失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {
    
    list.AddString((char*)databuff);}

		UpdateData(false);
    }
	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	//if(st==0) {list.AddString("断开连接!");}

(5)【消費】対応するコードは以下の通りです。

	icdev=rf_usbinit();
	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {
    
    list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {
    
    list.AddString("认证失败!");}

	else	//读卡才能操作
	{
    
    
		UpdateData();
		yue=yue-xiaofei;	//消费
		xiaofei=0;	//消费置零
		str1.Format(_T("%.2f"),yue);	//消费
		str3.Format(_T("%.2f"),xiaofei);	//消费置零

		char* data3=str1.GetBuffer(str1.GetLength());	//余额
		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {
    
    list.AddString("消费成功!");}
		else {
    
    list.AddString("消费失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {
    
    list.AddString((char*)databuff);}

		UpdateData(false);
	}
	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	//if(st==0) {list.AddString("断开连接!");}

このシステムのプロジェクトファイルは、Baiduネットワークディスクからダウンロードできます。
       リンク:https
       ://pan.baidu.com/s/1de7lseleJFXQEJ2XosY0Pg抽出コード:4na5


総括する

       そもそも、後輩としては、後輩としては終わらないような疲れを感じます。ハハ、私は本当に文句を言うべきです!私たちのRFIDコースの小さなテストとして、この充電消費システムは非常に意味のあるものだと感じています。これにより、私たちの生活におけるいわゆる「スワイプカード」の基本原理を理解することができ、本当に私にカエルを与えてくれます。上手。私は卒業しようとしています。このブログは、RFIDコースの合格を記念して書いたものです。多分それは本当にさようなら〜さようなら
ここに画像の説明を挿入
私の許可なしに転載することは許されていません!!!

おすすめ

転載: blog.csdn.net/weixin_44935259/article/details/111392684