标题:
51单片机FM1702SL读卡器控制程序
[打印本页]
作者:
kiritol
时间:
2017-11-13 19:06
标题:
51单片机FM1702SL读卡器控制程序
该程序为51单片机的FM1702代码
0.png
(8.08 KB, 下载次数: 79)
下载附件
2017-11-13 21:12 上传
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#include <FM1702.h>
#include <STDIO.H>
#define PAUSE_INT EA=0;
#define START_INT EA=1;
#define uchar unsigned char
#define uint unsigned int
#define TRUE 1
#define FALSE 0
sbit rst =P0^7;
sbit cs =P0^6;
sbit si =P0^5;
sbit sck =P0^4;
sbit so =P0^3;
sbit led =P1^3;
sbit beep=P3^7;
sbit K1=P1^0;
sbit K2=P1^1;
uchar flag=0;
unsigned char date;
unsigned char TxData[5];
void UART_Init();
uchar Receive();
void Send(unsigned char back);
void send_char_com(uchar ch);
void send_string_com(uchar *str, uchar strlen);
/////变量定义///////////////
uchar RevBuffer[24]; /* FM1702命令发送接收缓冲区 */
uchar UID[5]; /* 序列号 */
uchar Secnr; /* 块号 */
#define m1erea 0x01 //要操作的扇区号
uint pay=1; //刷卡扣取的金额,2个字节,65535
uint put=100; //刷卡充值的金额,每刷一次充值100元
uint ctime,cctime;
uchar ctimeH,ctimeL;
uchar lcd[5];
bit ICValueFlag=1; //IC卡分值为0标志位
bit payflag=0;
/////变量定义///////////////
////////////////////// 子函声明 /////////////////////////////
uchar SPIRead(char reg_ad);
void SPIWrite(char reg_ad,char reg_data);
void Write_FIFO(uchar count, uchar *buff);
uchar Clear_FIFO(void);
uchar Judge_Req(uchar *buff);
uchar Command_Send(uchar count, uchar *buff, uchar Comm_Set);
uchar Request(uchar mode);
void delay(uint x);
uchar Read_FIFO(uchar *buff);
//void Save_UID(uchar row, uchar col, uchar length);
uchar AntiColl();
uchar Check_UID();
//void Set_BitFraming(uchar row, uchar col);
uchar Select_Card();
char M500HostCodeKey( uchar *uncoded, uchar *coded);
uchar Load_key_CPY(uchar *buff);
void keyto();
uchar block_numset(uchar block_num);
uchar MIF_Write(uchar *buff, uchar Block_Adr);
uchar Read_E2(uchar lsb, uchar msb, uchar count, uchar *buff);
uchar CRCrdadandset(uchar * buff,uchar RW);
void initial_LCD();
void DispalyLcd();
void LCD_Data(uchar LCDbyte );
void WriteCommand(uchar a);
void displayUid();
void displaymun(uchar temp1,uchar temp2,uchar temp3,uchar temp5,uchar buff1,uchar buff2,uchar buff3);
void dis_Request1();
void dis_Request2();
void dis_Request3();
void LCD_PutString(unsigned char x,unsigned char y,uchar *s);
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void Init_FM1702()
{
uchar temp;
uint i;
sck = 1;
so = 1;
si = 1;
rst = 1; /* FM1702复位 */
for(i = 0; i < 0xff; i++)
{
_nop_(); /*等待约140ms, 11.0592*/
}
rst = 0;
for(i = 0; i < 0xff; i++)
{
_nop_();
}
/////////// init_spi ///////////////////////////////////////////////
while(temp = SPIRead(Command) != 0) /* 等待Command = 0,FM1702复位成功 */
{
_nop_();
}
////////////////////////////////////////////////////////////////////////////
SPIWrite(Page_Sel,0x80); //往PAG里面写0X80初始化SPI接口
for(i = 0; i < 0xff; i++) /* 延时 */
{
if(temp=SPIRead(Command) == 0x00) //如果Command为0表示初始化SPI接口成功
{
SPIWrite(Page_Sel,0x00); //往PAG里面写0开使用SPI接口
}
}
////////// init_FM1702 ///////////////////////////////////////
SPIWrite(InterruptEn,0x7f); //address 06H /* 中断使能/禁止寄存器 */off
SPIWrite(Int_Req,0x7f); //address 07H /* 中断请求标识寄存器 */清0
SPIWrite(TxControl,0x5b); //address 11H /* 发送控制寄存器 */
SPIWrite(RxControl2,0x01); //address 1EH 设置接收控制寄存器
SPIWrite(RxWait,0x07); //address 21H 设置接收和发送之间的时间间隔
SPIWrite(TypeSH,0x00); //0:TYPEA模式*//* 1:TYPEB模式*//* 2:上海模式*/
}
////////////////////////////////////////////////////////////////////////////
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//名称: spi_byte_transceive //
//功能: 该函数实现SPI通讯的数据收发 //
// //
//输入: //
// 发送数据 //
// //
//输出: //
// 接收数据 //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
char spi_byte_transceive(char sendbyte)
{
char i,temp;
for(i=0;i<8;i++)
{
sck=0;
if(sendbyte & 0x80) //位运算,判断最高位是否为1
{
si=1;
}
else
{
si=0;
}
sendbyte <<= 1;
sck=1;
temp <<= 1;
if(so)
temp |= 0x01;
}
sck=0;
_nop_();
_nop_();
si=0;
return (temp);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//名称: rc531_register_write //
//功能: 该函数实现通过SPI接口对RC531中一个寄存器写入值 //
// //
//输入: //
// RC531目标寄存器地址和写入值 //
// //
//输出: //
// N/A //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void SPIWrite(char reg_ad,char reg_data)
{
sck=0; //时钟
reg_ad <<= 1;
cs=0; //接口选通
reg_ad &= 0x7F; //最高位为0表示写
spi_byte_transceive(reg_ad); //写地址
spi_byte_transceive(reg_data); //写数据
cs=1;
return;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//名称: rc531_register_read //
//功能: 该函数实现通过SPI接口读取RC531中一个寄存器的值 //
// //
//输入: //
// RC531目标寄存器地址 //
// //
//输出: //
// 目标寄存器的值 //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
uchar SPIRead(char reg_ad)
{ char temp;
sck=0; //时钟
_nop_();
_nop_();
cs=0; //接口选通开
reg_ad <<= 1; //reg_ad左移一位付值给reg_ad
reg_ad |= 0x80; //reg_ad跟“0X80”或运算后付值给reg_ad 最高位为1表示读
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
读卡器程序.zip
(91.34 KB, 下载次数: 118)
2017-11-13 19:06 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
1018954083
时间:
2017-12-26 15:52
很好刷刷刷
作者:
jjfzdnsjg
时间:
2018-1-4 21:42
支持下楼主 小弟刚来 多给几分让我好试试程序
作者:
liuzclzc
时间:
2018-1-21 22:38
单片机要学习的内容还是比较多的。
作者:
ZuiTengLI
时间:
2018-6-14 16:14
不错不错。。。
作者:
treewei
时间:
2018-8-7 14:57
需要多交流学习啊
作者:
lihanjunw
时间:
2020-5-10 21:24
感谢分享,正需要
作者:
zkele
时间:
2021-10-10 15:14
感谢分享,下载一份研究研究
作者:
wzswp
时间:
2022-8-19 14:13
谢谢分享!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1