STM32F107磁卡刷卡器驱动
程序使用说明:
1、本例程通过4个led来指示usb鼠标的功能,仅为演示用,若用户要开发自己的usb鼠标程序,可以参考。
2、将usb鼠标接到J3上(或通过mini usb转接线接到J10上)将程序下载到开发板上,复位单片机,点击鼠标,则可以看到相应的led亮。
单片机源程序如下:
- /* Includes ------------------------------------------------------------------*/
- #include <includes.h>
- #include "LED.h"
- #include "usbh_usr.h"
- #include "usbh_core.h"
- #include "stmflash.h"
- #include "timer.h"
- #include "usart.h"
- #include "yx5200.h"
- #define _2ms 14400
- #define _20ms 144000
- #define _200ms 1440000
- #define _400ms 2880000
- #define _1s 7200000
- extern USBH_Status USBH_DeInit(void);
- extern void clear_buffer(void);
- extern HID_Machine_TypeDef HID_Machine;
- extern vu8 bDeviceState; //默认没有连接
- extern unsigned char BUFEER[PASSWORD_DIGITS + 1];
- extern unsigned char BUFEER_counter;
- extern unsigned char enter_complete;
- extern unsigned char _30s_config_count;
- void Compare_Process(void);
- void ConfigurationMode_judgment(void);
- void Password_judgment(void);
- unsigned char Judgment_password(unsigned char *buffer,unsigned char *password);
- unsigned char Active(void);
- unsigned char Setting(void);
- unsigned char PASSWORD1[PASSWORD_DIGITS + 1] = {0};
- unsigned char PASSWORD2[PASSWORD_DIGITS + 1] = {0};
- unsigned char PASSWORD3[PASSWORD_DIGITS + 1] = {0};
- unsigned char RESTWORD[PASSWORD_DIGITS + 1] = {0};
- unsigned char password1_count;
- unsigned char Configuration_mode = 0;
- unsigned char active_falg = 0;
- unsigned char _30s_flag = 0;
- unsigned char ResetMode = 0;
- static void LED_Delay(uint32_t nCount)
- {
- while(nCount > 0)
- {
- nCount --;
- }
- }
- void Start_sound(void) {
- GPIO_SetBits(GPIOA , GPIO_Pin_9);
- LED_Delay(_400ms);
- GPIO_ResetBits(GPIOA , GPIO_Pin_9);
- }
- int main (void)
- {
- unsigned char i;
- LED_Configuration(); //初始化
- uart_init(9600);
- TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
- USBH_Init(&USB_OTG_FS_dev, &HID_cb , &USR_Callbacks);
- StartReadEeprom(); //读密码
- clear_buffer();
- Start_sound();
- LED_Delay(_1s);
- if(Setting() == 1) {
- Configuration_mode = MODE1;
- Uart_SendCMD(0x0F , 0 , 0x0202) ;
- } else {
- Uart_SendCMD(0x0F , 0 , 0x0201) ;
- }
- LED_Delay(_200ms);
- for(i = 0;i < 50;i ++) {
- while(!yx5200_play_finish_statu()) {LED_Delay(_2ms);} //检测是不是播完了
- }
- Uart_SendCMD(0x06 , 0 , 0x0000) ;
- LED_Delay(_200ms);
- Uart_SendCMD(0x0F , 0 , 0x0463) ;
- LED_Delay(_400ms);
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 0) {
- LED_Delay(_20ms);
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 0) {
- Uart_SendCMD(0x0E , 0 , 0x0000) ;
- LED_Delay(_200ms);
- ResetMode = 1;
- }
- }
- Uart_SendCMD(0x06 , 0 , 0x001E) ;
- LED_Delay(_200ms);
- active_falg = 1;
- while(1) {
- // if(active_falg == 0) {
- // if(Active() == 1) {
- // active_falg = 1;
- // Uart_SendCMD(0x0F , 0 , 0x0301) ;
- // LED_Delay(_200ms);
- // for(i = 0;i < 50;i ++) {
- // while(!yx5200_play_finish_statu()) {LED_Delay(_2ms);} //检测是不是播完了
- // }
- // }
- // }
- USBH_Process(); //USB处理流程
- Compare_Process(); //密码比较流程
- }
- }
- //////////////////////////////激活接口/////////////////////////////////
- unsigned char Setting(void) {
- if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7) == 0) {//C7
- LED_Delay(_200ms);
- if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7) == 0) {
- return 1;
- }
- }
- return 0;
- }
- unsigned char Active(void) {
- if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6) == 0) {//C6
- LED_Delay(_200ms);
- if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6) == 0) {
- return 1;
- }
- }
- return 0;
- }
- ////////////////////////////////密码比较过程//////////////////////////////////
- void Compare_Process(void) {
-
- if(enter_complete == 1) { //如果按下了回车
- enter_complete = 0;
- if((active_falg) && (BUFEER_counter != 0)) {
- Password_judgment(); //正常密码比较
- }
- clear_buffer(); //清buffer
- }
- }
- //////////////////////////////正常密码比较过程////////////////////////////////
- void Password_judgment(void) { //正常密码的比较
- /////////////////////////////密码1/////////////////////////////////
- if(BUFEER_counter == password1_count) {
- if(Judgment_password(BUFEER,PASSWORD1)) {
- _30s_flag = 1;
- _30s_config_count = 0;
- GPIO_SetBits(GPIOA , GPIO_Pin_8);
- Uart_SendCMD(0x0F , 0 , 0x0101) ;
- LED_Delay(_200ms);
- return;
- }
- }
- Uart_SendCMD(0x0F , 0 , 0x0302) ;
- LED_Delay(_200ms);
- }
- unsigned char Judgment_password(unsigned char *buffer,unsigned char *password) {
- unsigned char i;
-
- for(i = 0;i < PASSWORD_DIGITS;i++) {
- if(buffer[i] != password[i]) {
- break;
- }
- }
- if(i == PASSWORD_DIGITS) {
- return 1;
- } else {
- return 0;
- }
- }
- #ifdef USE_FULL_ASSERT
- /**
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
STM32F107磁卡刷卡器驱动.rar
(688.12 KB, 下载次数: 15)
|