标题:
STM32F107单片机USB驱动磁卡刷卡器的驱动源程序
[打印本页]
作者:
寂蔚蓝
时间:
2018-5-18 11:47
标题:
STM32F107单片机USB驱动磁卡刷卡器的驱动源程序
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)
2018-5-19 01:34 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1