找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8746|回复: 10
收起左侧

STM32 RFID开源设计的充值消费一体机 白屏?

  [复制链接]
ID:113472 发表于 2016-4-13 03:02 | 显示全部楼层 |阅读模式
先简单的介绍下程序功能:
本实验将实现如下功能:开机的时候先检测W25X16中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNI2GBK.SYS和GBK16.FON(这两个文件是由我们自己生成的UNICODE转GBK码表文件和GBK字库(16*16)文件)。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。同样我们也是用LED0来指示程序正在运行。同时,可以按KEY0来强制更新字库.


注意:
1,本实验可以SWD下载仿真.但是下载完了,请拔掉JLINK.
2,不要把1820和PA0的跳线帽跳上,否则可能导致按键"不灵".

  1. // #include <stm32f10x_lib.h>
  2. #include <stm32f10x_map.h>
  3. #include <stm32f10x_nvic.h>

  4. #include "sys.h"
  5. #include "usart.h"               
  6. #include "delay.h"        
  7. #include "led.h"
  8. #include "key.h"
  9. #include "exti.h"
  10. #include "wdg.h"
  11. #include "timer.h"
  12. #include "lcd.h"           
  13. #include "rtc.h"
  14. #include "wkup.h"
  15. #include "adc.h"
  16. #include "dma.h"
  17. #include "24cxx.h"
  18. #include "flash.h"
  19. #include "touch.h"
  20. #include "24l01.h"
  21. #include "mmc_sd.h"
  22. #include "remote.h"
  23. #include "ds18b20.h"
  24. #include "mouse.h"
  25. #include "text.h"
  26. #include "fat.h"
  27. #include "fontupd.h"


  28. //添加的头文件
  29. #include "rc522.h"
  30. #include "rc522_add.h"
  31. #include "my_GUI.h"
  32. #include "my_GUI_TOUCH.h"


  33.                                  
  34. /*************************************
  35. *硬件连接说明:
  36. *RCC522 <----->MINISTM32
  37. *
  38. *1--SDA <----->PB0
  39. *2--SCK <----->PB13
  40. *3--MOSI<----->PB15
  41. *4--MISO<----->PB14
  42. *5--悬空
  43. *6--GND <----->GND
  44. *7--RST <----->PB1
  45. *8--3.3V<----->3.3V
  46. *
  47. *DS18B20与MINISTM32开发板的PA0要连接上
  48. **************************************/




  49. // const u8 TEXT_Buffer[]={0};
  50. // #define SIZE sizeof(TEXT_Buffer)   



  51. /****************************
  52.            main()
  53. ****************************/
  54. int main(void)
  55. {               
  56.         u8 i;
  57. //         u8 timer=0;

  58.         
  59.   /*************
  60.                 各种初始化
  61.         *************/
  62.   Stm32_Clock_Init(9);//系统时钟设置
  63.         delay_init(72);                  //延时初始化
  64.         uart_init(72,9600); //串口1初始化  
  65.         Timerx_Init(5000,7200-1);//定时器3初始化,定时500ms(在定时器中断服务程序中,LED1闪烁指示程序正在运行)
  66.         LED_Init();         //LED初始化
  67.         AT24CXX_Init();     //IIC初始化(存储:姓名、性别、卡号、余额)        
  68.         SPI_Flash_Init();          //SPI FLASH初始化(中文字库)                                 
  69.         LCD_Init();                //LCD初始化
  70.         Touch_Init();              //触摸初始化(这里初始化了,在后面的触摸函数里面就不要初始化了,屏幕的切换显示会有冲突的)
  71.         RTC_Init();                                        //实时时钟初始化
  72. //         RTC_Set(2014,4,10,12,2,30);//设置时间,只需设置一次就要屏蔽此函数
  73.         DS18B20_Init();                        //数字温度传感器DS18B20初始化
  74.         InitAlldata();                        //初始化所有读卡相关数据的设置

  75.         
  76.         //AT24C02初始化(0-255个u8类型(8位二进制数)的数据)
  77.         //因为触摸屏要保存校准参数,占用13个字节,所以可用的就剩下243个字节了,最多可以存20张卡的卡号和密码
  78.         //(每张卡需11个字节:卡号4个字节,卡的状态1个字节,密码6个字节)                                
  79.         while(AT24CXX_Check())//检测不到AT24C02
  80.         {
  81.                 LCD_ShowString(60,130,"24C02 Check Failed!");
  82.                 delay_ms(500);
  83.                 LCD_ShowString(60,130,"Please Check!       ");
  84.                 delay_ms(500);
  85.                 LED0=!LED0;
  86.         }
  87.         
  88. //         //AT24C02清零
  89. //         for(timer=0;timer<240;timer++)
  90. //                 AT24CXX_Write(timer,(u8*)TEXT_Buffer,SIZE);        //写0到地址timer
  91. //         while(1);
  92.         

  93.         
  94.         //W25X16初始化
  95.         //要执行Font_Init();才能现显示汉字
  96.         if(Font_Init())     //字库不存在,则更新字库
  97.         {        
  98.                 POINT_COLOR=RED;      
  99.                 LCD_Clear(WHITE);
  100.                 LCD_ShowString(60,50,"Mini STM32");        
  101.                 LCD_ShowString(60,70,"Font Updating...");                  
  102.                 //字体更新
  103.                 SD_Initialize();                        //初始化SD卡                                                
  104.                  while(FAT_Init())                        //FAT 错误
  105.                 {
  106.                         LCD_ShowString(60,90,"FAT SYS ERROR");  
  107.                         i= SD_Initialize();
  108.                         if(i)//SD卡初始化
  109.                         {                                                  
  110.                                 LCD_ShowString(60,110,"SD_CARD ERROR");
  111.                         }         
  112.                         delay_ms(500);
  113.                         LCD_Fill(60,90,240,126,WHITE);//清除显示                          
  114.                         delay_ms(500);
  115.                         LED0=!LED0;           
  116.                 }         
  117.                 LCD_Fill(60,90,240,126,WHITE);//清除显示                          
  118.                  while(Update_Font()!=0)//字体更新出错
  119.                 {                                                  
  120.                         LCD_ShowString(60,90,"SYSTEM FILE LOST");                  
  121.                         delay_ms(500);   
  122.                         LCD_ShowString(60,90,"Please Check....");
  123.                         delay_ms(500);   
  124.                         LED0=!LED0;        
  125.                 };                        
  126.                 LCD_Clear(WHITE);
  127.         }  
  128.         
  129.         
  130. //         //触摸屏屏幕校准
  131. //         LCD_Clear(WHITE);//清屏
  132. //         Touch_Adjust();  //屏幕校准
  133. //         Save_Adjdata();         
  134.                
  135.         
  136.         
  137.         //RC522射频卡模块初始化,必须放在操作界面之后初始化才能正常读卡
  138.         InitRc522();        

  139.         while(1)
  140.         {
  141.                 TOUCH_GUI_DISP_MENU();
  142.         }
  143.         
  144. }









复制代码




部分操作界面图:







































功能演示视频:





功能解析:

        (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, 下载次数: 191)

评分

参与人数 1黑币 +5 收起 理由
Edwardlaughing + 5 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:170610 发表于 2017-3-14 14:43 | 显示全部楼层
不错的资料
回复

使用道具 举报

ID:280082 发表于 2018-1-26 21:11 | 显示全部楼层
不错的资料!
回复

使用道具 举报

ID:79006 发表于 2018-12-14 10:52 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:413838 发表于 2019-2-26 19:15 | 显示全部楼层
嗯哼,英文的手册
回复

使用道具 举报

ID:477334 发表于 2019-11-21 00:06 | 显示全部楼层
下载了之后是白屏啊
回复

使用道具 举报

ID:620993 发表于 2019-11-22 11:33 | 显示全部楼层
学习一下,谢谢贡献
回复

使用道具 举报

ID:570357 发表于 2021-5-11 23:16 | 显示全部楼层
天铭 发表于 2019-11-21 00:06
下载了之后是白屏啊

试了一下,确实是白屏。
回复

使用道具 举报

ID:81196 发表于 2021-5-18 08:49 | 显示全部楼层
好项目,值得拥有
回复

使用道具 举报

ID:951660 发表于 2021-10-28 01:00 | 显示全部楼层
皮囊之下 发表于 2021-5-11 23:16
试了一下,确实是白屏。

解决了吗,我也白屏,应该是没有哪几个文件夹
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表