标题:
51单片机基于esp8266 WIFI的刷卡器程序
[打印本页]
作者:
落叶因风起
时间:
2019-5-14 18:07
标题:
51单片机基于esp8266 WIFI的刷卡器程序
单片机源程序如下:
#include "reg52.h"
#include "rc522.h"
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "lcd1602.h"
#define RELOAD_COUNT 0xFA//宏定义波特率发生器的载入值
#define uchar unsigned char //对数据类型进行声明定义
#define uint unsigned int
sfr AUXR=0x8E;
sfr BRT=0x9C;
sfr AUXR1=0xA2;
sbit led=P2^7;
sbit BEEP=P2^6;
sbit TEST=P2^5;
uchar Receive,i;
uint n;
uchar s=0,c=0,h=0;
uchar Recive_table[15];
char status;//按键状态
unsigned char code CardKeyABuf[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
unsigned char CT[2];
unsigned char SN[4];//从卡片读取的卡号存放在这里
// 系统注册的卡号
unsigned char code card_1[4]={0XFD, 0X31, 0X9A, 0X15};
unsigned char code card_2[4]={0X84, 0X4D, 0XC3, 0XDB};
unsigned char code id_1[16]={"20150502310028"};
unsigned char code id_2[16]={"20150502310033"};
//WiFi模块设置
unsigned char LYMS[13]={0x41,0x54,0x2B,0x43,0x57,0x4D,0x4F,0x44,0x45,0x3D,0x32,0x0D,0x0A};//AT+CWMODE=2 设置成路由模式
unsigned char SZLY[38]={0x41,0x54,0x2B,0x43,0x57,0x53,0x41,0x50,0x3D,0x22,0x45,0x53,0x50,
0x38,0x32,0x36,0x36,0x22,0x2C,0x22,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x22,
0x2C,0x31,0x31,0x2C,0x33,0x0D,0x0A};//AT+CWSAP="ESP8266","0123456789",11,0 设置路由
unsigned char RST[8]={0x41,0x54,0x2B,0x52,0x53,0x54,0x0D,0x0A};//AT+RST 重启
unsigned char SZDLJ[13]={0x41,0x54,0x2B,0x43,0x49,0x50,0x4D,0x55,0x58,0x3D,0x31,0x0D,0x0A};//AT+CIPMUX=1 设置成多连接
unsigned char KQFU[21]={0x41,0x54,0x2B,0x43,0x49,0x50,0x53,0x45,0x52,0x56,0x45,0x52,0x3D,
0x31,0x2C,0x35,0x30,0x30,0x30,0x0D,0x0A};//AT+CIPSERVER=1,5000 开启TCP服务端口
unsigned char FSSJ[11]={0x41,0x54,0x2B,0x43,0x49,0x50,0x53,0x45,0x4E,0x44,0x3D};//AT+CIPSEND= 发送数据
/****************************************************
名称:延时函数
功能:精准延时
*****************************************************/
void usdelay(uint f)
{
while(f--);
}
/****************************************************
名称:读卡号函数
功能:读取测试卡号
*****************************************************/
void Display_ID( unsigned char * SrcBuf )
{
char xdata DisplayBuf[10];
char *pDisplayChar;
unsigned char Tmp, i;
pDisplayChar = DisplayBuf;
for( i = 0; i < 4; i++ )
{
Tmp = ( ( *SrcBuf ) >> 4 ) & 0x0F;
if( ( Tmp >=0 ) && ( Tmp <= 9 ) )
{
*pDisplayChar ++ = '0' + Tmp;
}
else
{
*pDisplayChar ++ = 'A' + Tmp - 10;
}
Tmp = ( *SrcBuf ) & 0x0F;
if( ( Tmp >=0 ) && ( Tmp <= 9 ) )
{
*pDisplayChar ++ = '0' + Tmp;
}
else
{
*pDisplayChar ++ = 'A' + Tmp - 10;
}
SrcBuf ++;
}
*pDisplayChar ++ = '\0';
writecom(0x80);
writestr(DisplayBuf);
}
/*******************************************************************************
* 函数名 :UsartInit()
* 函数功能 :设置串口
*******************************************************************************/
void Uart_Init()//使用定时器1作为波特率发生器
{
SCON=0x50;//设置为串行口以方式1工作,8位异步通讯,允许接收中断。//一帧信息为10位,1位起始位,8位数据位(低位在先),1位停止位。
PCON=0x80;//SMOD波特率选择位为1,SMOD=1.
TMOD=0x21;//设置定时器1为波特率发生器,工作在模式2,8位自动装载
TH1=RELOAD_COUNT;//波特率9600,TH1=256-FOSC/16/12/波特率
TL1=TH1;
EA=1;//总中断打开
ES=0;//关闭串口中断
TR1=1;//启动定时器1
}
/********************************************************************
名称:串口发送函数
功能:MCU向其他与其连接的设备发送数据(此处是无线WIFI模块ESP8266)
********************************************************************/
void Send_Uart (uchar value)
{
ES=0;//关闭串口中断
TI=0;//清发送完毕中断请求标志位
SBUF=value;//发送
while(TI==0);//等待发送完毕
TI=0;//清发送完毕中断请求标志位
ES=1;//允许串口中断
}
/********************************************************************
名称:WIFI模块设置函数
作用:启动模块,以便可以实现无线接入和控制
********************************************************************/
void ESP8266_Set(uchar *puf)//数组指针*puf指向字符串数组
{
while(*puf!='\0')//遇到空格跳出循环
{
Send_Uart(*puf);//向WIFI模块发送控制指令
usdelay(5);
puf++;
}
usdelay(5);
Send_Uart('\r');//回车
usdelay(5);
Send_Uart('\n');//换行
delayms(1000);
}
/****************************************************
名称:ESP8266发送数据函数
功能:用于与wifi模块相连的终端发送数据
*****************************************************/
void ESP8266_Sent(uchar *puf)//数组指针*puf指向字符串数组
{
ESP8266_Set(FSSJ);
while(*puf!='\0')//遇到空格跳出循环
{
Send_Uart(*puf);//向WIFI模块发送控制指令。
usdelay(5);
puf++;
}
usdelay(5);
Send_Uart('\n');//换行
delayms(10);
}
/*蜂鸣器滴响*/
void Beep(int a)
{ int i;
for(i=0;i<a;i++)
{
BEEP = 0;
delayms(100);
BEEP = 1;
}
}
/*******************************************************************************
* 函 数 名 : Timer0Init
* 函数功能 : 定时器0初始化
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void Timer0() interrupt 0
{
static uint i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
s++;
if(s>59)
{
c++;
}
if(c>59)
{
h++;
}
if(h>23)
{
h=0;
}
}
}
/*******************************************************************************
* 函数名 : Usart() interrupt 4
* 函数功能 : 串口通信中断函数
*******************************************************************************/
void Usart() interrupt 4
{
static uchar i=0;
if(RI==1)
{
RI=0;
Receive=SBUF;//MCU接收wifi模块反馈回来的据
Recive_table[i]=Receive;
i++;
if((Recive_table[i-1]=='\n'))i=0;//遇到换行重新装值
}
else TI=0;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
*******************************************************************************/
void main()
{
RC522_Init();//re522刷卡器初始化
Timer0Init();//定时器0中断初始化
lcdinit();
Uart_Init(); //串口初始化
ESP8266_Set(LYMS);//WiFi模块设置
ESP8266_Set(SZLY);
ESP8266_Set(RST);
ESP8266_Set(SZDLJ);
ESP8266_Set(KQFU);
while(1)
{ led=0;
status = PcdRequest(PICC_REQALL,CT);//向卡发送请求读取的信号,并且向CT数组内写入从卡片读取的数据
status = PcdAnticoll(SN);//防冲撞处理,防止读卡出现冲突 ,往SN写入4字节卡号
if(TEST==0)
{ delayms(20);
if(TEST==0)
{ Display_ID(SN);//按下按键读取卡号
delayms(3000);
}
}
if(status == MI_OK)
{
led=1;
Beep(5);
if(0 == memcmp(SN,card_1,4))
{
ESP8266_Sent(id_1);
Send_Uart(h);
Send_Uart(':');
Send_Uart(c);
Send_Uart(':');
Send_Uart(s);
Send_Uart('\n');//换行
writecom(0x80+0x42);
writedata(h);
writecom(0x80+0x44);
writedata(':');
writecom(0x80+0x45);
writedata(c);
writecom(0x80+0x47);
writedata(':');
writecom(0x80+0x48);
writedata(s);
}
if(0 == memcmp(SN,card_2,4))
{
ESP8266_Sent(id_2);
Send_Uart(h);
Send_Uart(':');
Send_Uart(c);
Send_Uart(':');
Send_Uart(s);
Send_Uart('\n');//换行
writecom(0x80+0x42);
writedata(h);
writecom(0x80+0x44);
writedata(':');
writecom(0x80+0x45);
writedata(c);
writecom(0x80+0x47);
writedata(':');
writecom(0x80+0x48);
writedata(s);
}
}
}
}
复制代码
所有资料51hei提供下载:
单片机课设程序.zip
(81.01 KB, 下载次数: 18)
2019-5-14 18:06 上传
点击文件名下载附件
51单片机基于WIF的刷卡器程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1