標(biāo)題:
STM32F107單片機(jī)USB驅(qū)動(dòng)磁卡刷卡器的驅(qū)動(dòng)源程序
[打印本頁(yè)]
作者:
寂蔚藍(lán)
時(shí)間:
2018-5-18 11:47
標(biāo)題:
STM32F107單片機(jī)USB驅(qū)動(dòng)磁卡刷卡器的驅(qū)動(dòng)源程序
STM32F107磁卡刷卡器驅(qū)動(dòng)
程序使用說(shuō)明:
1、本例程通過(guò)4個(gè)led來(lái)指示usb鼠標(biāo)的功能,僅為演示用,若用戶要開(kāi)發(fā)自己的usb鼠標(biāo)程序,可以參考。
2、將usb鼠標(biāo)接到J3上(或通過(guò)mini usb轉(zhuǎn)接線接到J10上)將程序下載到開(kāi)發(fā)板上,復(fù)位單片機(jī),點(diǎn)擊鼠標(biāo),則可以看到相應(yīng)的led亮。
單片機(jī)源程序如下:
/* 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; //默認(rèn)沒(méi)有連接
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的計(jì)數(shù)頻率,計(jì)數(shù)到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);} //檢測(cè)是不是播完了
}
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);} //檢測(cè)是不是播完了
// }
// }
// }
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;
}
////////////////////////////////密碼比較過(guò)程//////////////////////////////////
void Compare_Process(void) {
if(enter_complete == 1) { //如果按下了回車
enter_complete = 0;
if((active_falg) && (BUFEER_counter != 0)) {
Password_judgment(); //正常密碼比較
}
clear_buffer(); //清buffer
}
}
//////////////////////////////正常密碼比較過(guò)程////////////////////////////////
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
/**
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
STM32F107磁卡刷卡器驅(qū)動(dòng).rar
(688.12 KB, 下載次數(shù): 15)
2018-5-19 01:34 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1