先简单的介绍下程序功能:
本实验将实现如下功能:开机的时候先检测W25X16中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测SD卡和文件系统,并查找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开发板的PA0要连接上
- **************************************/
- // const u8 TEXT_Buffer[]={0};
- // #define SIZE sizeof(TEXT_Buffer)
- /****************************
- main()
- ****************************/
- int main(void)
- {
- u8 i;
- // u8 timer=0;
-
- /*************
- 各种初始化
- *************/
- Stm32_Clock_Init(9);//系统时钟设置
- 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(); //触摸初始化(这里初始化了,在后面的触摸函数里面就不要初始化了,屏幕的切换显示会有冲突的)
- RTC_Init(); //实时时钟初始化
- // RTC_Set(2014,4,10,12,2,30);//设置时间,只需设置一次就要屏蔽此函数
- DS18B20_Init(); //数字温度传感器DS18B20初始化
- InitAlldata(); //初始化所有读卡相关数据的设置
-
- //AT24C02初始化(0-255个u8类型(8位二进制数)的数据)
- //因为触摸屏要保存校准参数,占用13个字节,所以可用的就剩下243个字节了,最多可以存20张卡的卡号和密码
- //(每张卡需11个字节:卡号4个字节,卡的状态1个字节,密码6个字节)
- 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初始化
- //要执行Font_Init();才能现显示汉字
- 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)消费 进入消费界面后,管理员输入相应的消费金额,然后消费者刷卡消费,系统先判断此卡是否已解锁,若是未解锁(已挂失)则消费失败返回菜单栏,若是已解锁(已解挂)则进入余额判断,若是余额足够便能成功消费并显示消费后的余额,若是余额不足则会消费失败并显示余额。
(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开发板的PA0要连接上
**************************************/
资料和程序:
MINISTM32 RFID程序.zip
(233.28 KB, 下载次数: 198)
TJDZ-RC522射频卡用户使用手册资料Ver_1.0.7z
(868.99 KB, 下载次数: 86)
|