先簡單的介紹下程序功能:
本實驗將實現(xiàn)如下功能:開機的時候先檢測W25X16中是否已經存在字庫,如果存在,則按次序顯示漢字。如果沒有,則檢測SD卡和文件系統(tǒng),并查找SYSTEM文件夾下的FONT文件夾,在該文件夾內查找UNI2GBK.SYS和GBK16.FON(這兩個文件是由我們自己生成的UNICODE轉GBK碼表文件和GBK字庫(16*16)文件)。在檢測到這些文件之后,就開始更新字庫,更新完畢才開始顯示漢字。同樣我們也是用LED0來指示程序正在運行。同時,可以按KEY0來強制更新字庫.
注意:
1,本實驗可以SWD下載仿真.但是下載完了,請拔掉JLINK.
2,不要把1820和PA0的跳線帽跳上,否則可能導致按鍵"不靈".
- // #include <stm32f10x_lib.h>
- #include <stm32f10x_map.h>
- #include <stm32f10x_nvic.h>
- #include "sys.h"
- #include "usart.h"
- #include "delay.h"
- #include "led.h"
- #include "key.h"
- #include "exti.h"
- #include "wdg.h"
- #include "timer.h"
- #include "lcd.h"
- #include "rtc.h"
- #include "wkup.h"
- #include "adc.h"
- #include "dma.h"
- #include "24cxx.h"
- #include "flash.h"
- #include "touch.h"
- #include "24l01.h"
- #include "mmc_sd.h"
- #include "remote.h"
- #include "ds18b20.h"
- #include "mouse.h"
- #include "text.h"
- #include "fat.h"
- #include "fontupd.h"
- //添加的頭文件
- #include "rc522.h"
- #include "rc522_add.h"
- #include "my_GUI.h"
- #include "my_GUI_TOUCH.h"
-
- /*************************************
- *硬件連接說明:
- *RCC522 <----->MINISTM32
- *
- *1--SDA <----->PB0
- *2--SCK <----->PB13
- *3--MOSI<----->PB15
- *4--MISO<----->PB14
- *5--懸空
- *6--GND <----->GND
- *7--RST <----->PB1
- *8--3.3V<----->3.3V
- *
- *DS18B20與MINISTM32開發(fā)板的PA0要連接上
- **************************************/
- // const u8 TEXT_Buffer[]={0};
- // #define SIZE sizeof(TEXT_Buffer)
- /****************************
- main()
- ****************************/
- int main(void)
- {
- u8 i;
- // u8 timer=0;
-
- /*************
- 各種初始化
- *************/
- Stm32_Clock_Init(9);//系統(tǒng)時鐘設置
- delay_init(72); //延時初始化
- uart_init(72,9600); //串口1初始化
- Timerx_Init(5000,7200-1);//定時器3初始化,定時500ms(在定時器中斷服務程序中,LED1閃爍指示程序正在運行)
- LED_Init(); //LED初始化
- AT24CXX_Init(); //IIC初始化(存儲:姓名、性別、卡號、余額)
- SPI_Flash_Init(); //SPI FLASH初始化(中文字庫)
- LCD_Init(); //LCD初始化
- Touch_Init(); //觸摸初始化(這里初始化了,在后面的觸摸函數(shù)里面就不要初始化了,屏幕的切換顯示會有沖突的)
- RTC_Init(); //實時時鐘初始化
- // RTC_Set(2014,4,10,12,2,30);//設置時間,只需設置一次就要屏蔽此函數(shù)
- DS18B20_Init(); //數(shù)字溫度傳感器DS18B20初始化
- InitAlldata(); //初始化所有讀卡相關數(shù)據(jù)的設置
-
- //AT24C02初始化(0-255個u8類型(8位二進制數(shù))的數(shù)據(jù))
- //因為觸摸屏要保存校準參數(shù),占用13個字節(jié),所以可用的就剩下243個字節(jié)了,最多可以存20張卡的卡號和密碼
- //(每張卡需11個字節(jié):卡號4個字節(jié),卡的狀態(tài)1個字節(jié),密碼6個字節(jié))
- while(AT24CXX_Check())//檢測不到AT24C02
- {
- LCD_ShowString(60,130,"24C02 Check Failed!");
- delay_ms(500);
- LCD_ShowString(60,130,"Please Check! ");
- delay_ms(500);
- LED0=!LED0;
- }
-
- // //AT24C02清零
- // for(timer=0;timer<240;timer++)
- // AT24CXX_Write(timer,(u8*)TEXT_Buffer,SIZE); //寫0到地址timer
- // while(1);
-
-
- //W25X16初始化
- //要執(zhí)行Font_Init();才能現(xiàn)顯示漢字
- if(Font_Init()) //字庫不存在,則更新字庫
- {
- POINT_COLOR=RED;
- LCD_Clear(WHITE);
- LCD_ShowString(60,50,"Mini STM32");
- LCD_ShowString(60,70,"Font Updating...");
- //字體更新
- SD_Initialize(); //初始化SD卡
- while(FAT_Init()) //FAT 錯誤
- {
- LCD_ShowString(60,90,"FAT SYS ERROR");
- i= SD_Initialize();
- if(i)//SD卡初始化
- {
- LCD_ShowString(60,110,"SD_CARD ERROR");
- }
- delay_ms(500);
- LCD_Fill(60,90,240,126,WHITE);//清除顯示
- delay_ms(500);
- LED0=!LED0;
- }
- LCD_Fill(60,90,240,126,WHITE);//清除顯示
- while(Update_Font()!=0)//字體更新出錯
- {
- LCD_ShowString(60,90,"SYSTEM FILE LOST");
- delay_ms(500);
- LCD_ShowString(60,90,"Please Check....");
- delay_ms(500);
- LED0=!LED0;
- };
- LCD_Clear(WHITE);
- }
-
-
- // //觸摸屏屏幕校準
- // LCD_Clear(WHITE);//清屏
- // Touch_Adjust(); //屏幕校準
- // Save_Adjdata();
-
-
-
- //RC522射頻卡模塊初始化,必須放在操作界面之后初始化才能正常讀卡
- InitRc522();
- while(1)
- {
- TOUCH_GUI_DISP_MENU();
- }
-
- }
復制代碼
部分操作界面圖:











 






功能演示視頻:
功能解析:
(1)充值 充值的前提是要管理員先刷卡才能進入充值界面,本設計的程序中設定藍色S50射頻卡為管理員身份(如需要可設定多張管理員身份的卡),若不是管理員刷卡則進入不了充值界面,此前提限制了消費者不能隨便進入充值模式,既方便了管理員對打卡機的管理,又增加了打卡機的安全性。進入了充值界面后,先由管理員輸入相應的充值金額,再到消費者刷卡即可成功充值并顯示充值后的余額。
(2)消費 進入消費界面后,管理員輸入相應的消費金額,然后消費者刷卡消費,系統(tǒng)先判斷此卡是否已解鎖,若是未解鎖(已掛失)則消費失敗返回菜單欄,若是已解鎖(已解掛)則進入余額判斷,若是余額足夠便能成功消費并顯示消費后的余額,若是余額不足則會消費失敗并顯示余額。
(3)查詢 查詢功能的作用是讓消費者查詢卡內的信息,包括:卡的身份、是否解鎖(掛失)、姓名、學會、卡號、卡內余額。消費者拿到卡后需要記住自己的卡號,因為若是自己的卡不慎丟失了需要輸入卡號和密碼才能掛失和解掛。
(4)掛失/解掛 消費者進入掛失/解掛界面,輸入卡號后按確定,再輸入6位密碼后按確定,接著選擇掛失或者解掛,若是掛失,輸入卡號和密碼正確即可成功掛失,否則掛失失敗;若是解掛,除了需要輸入卡號和密碼正確之外,還要再拿該卡刷卡進行卡號確認,就是說,消費者需要輸入和刷卡的卡號一致并且密碼正確才能解掛成功,否則解掛失敗。已掛失的卡是不能進行消費操作的。
原子的min板子 硬件連接:
/*************************************
*硬件連接說明:
*RC522 <----->MINISTM32
*
*1--SDA <----->B0
*2--SCK <----->B13
*3--MOSI<----->B15
*4--MISO<----->B14
*5--懸空
*6--GND <----->GND
*7--RST <----->B1
*8--3.3V<----->3.3V
*
*DS18B20與MINISTM32開發(fā)板的PA0要連接上
**************************************/
資料和程序:
MINISTM32 RFID程序.zip
(233.28 KB, 下載次數(shù): 198)
2016-4-13 02:31 上傳
點擊文件名下載附件
TJDZ-RC522射頻卡用戶使用手冊資料Ver_1.0.7z
(868.99 KB, 下載次數(shù): 86)
2021-11-13 00:13 上傳
點擊文件名下載附件
|