📄 uart.c
字号:
#include<UART.H>
#include "config.h"
#include "lpclib.h"
/*********************************************************************
函数
void delay (unsigned char time)
功能:延时函数
**********************************************************************/
void delay (unsigned char time)
{
unsigned int j;
while(time--)
{
for(j=0;j<6000;j++);
}
}
/***********************************************************
函数:刷卡错误时执行此函数表示读卡错误
void card_err(void)
功能:如果刷卡错误执行此函数
************************************************************/
void card_err (void)
{
GLED1;
RLED0;
BEEP0;
delay (50);
BEEP1;
RLED1;
delay (100);
RLED0;
BEEP0;
delay (50);
BEEP1;
RLED1;
}
/***********************************************************
函数:读卡正确函数
void card_ok(void)
功能:如果刷卡正确执行此函数
************************************************************/
void card_ok (void)
{
GLED0;
BEEP0;
delay (50);
BEEP1;
GLED1;
GLED1;
}
/************************************************************************
函数原型:void send_byte (byte tx_buf)
功能:发送一个字节并计算BCC
*************************************************************************/
void send_byte(unsigned char tx_buf)
{
U1THR = tx_buf;
BCC^=tx_buf;
while ((U1LSR & 0x20) == 0); // 等待数据发送完毕
}
/***********************************************************************
函数原型:void send_command_err(unsigned char CM,unsigned char PM,bit P)
功能:非正常返回返回设置状态
************************************************************************/
void send_command_yes(void)
{
ES0;
BCC=0x00;
send_byte(STX);
send_byte(0x00);
send_byte(0x03);
send_byte(CM);
send_byte(PM);
send_byte('Y');
send_byte(ETX);
send_byte(BCC);
ES1;
}
/***********************************************************************
函数原型:void send_command_err(unsigned char CM,unsigned char PM,bit P)
功能:非正常返回返回设置状态
************************************************************************/
void send_command_no(void)
{
ES0;
BCC=0x00;
send_byte(STX);
send_byte(0x00);
send_byte(0x03);
send_byte(CM);
send_byte(PM);
send_byte('N');
send_byte(ETX);
send_byte(BCC);
ES1;
}
/***********************************************************************
函数原型:void send_ver(void)
功能: 复位成功向上位机发送版板信息
************************************************************************/
void send_ver(void)
{
unsigned char i;
ES0;
BCC=0x00;
send_byte(STX);
send_byte(0x00);
send_byte(0x0e);//12byte
send_byte(0x30);
send_byte(0x30);
for(i=0;i<0x0c;i++)
{
send_byte(ver[i]);
}
send_byte(ETX);
send_byte(BCC);
ES1;
}
/************************************************************************
函数原型:void reset_cmd(void)
功能:执行RESET命令
*************************************************************************/
void reset_cmd(void)
{
ES0;
BPS=9600;
FLAG_TRACK1=0; //1轨无效
FLAG_TRACK2=1; //2轨有效
FLAG_TRACK3=1; //3轨有效
FLAG_INCODE='a';//解码方式为ASCLL方式
RLED1; //关红灯
GLED1; //关绿灯
BEEP1; //蜂鸣关
FLAG_RSEND=0; //禁止重传数据//
Disable(); //模式为Disable();
send_ver(); //发送版本号
ES1;
UART1_Init (BPS);
}
/************************************************************************
函数原型:void chenk_kaji (void)
功能:查状态命令
*************************************************************************/
void chenk_kaji (void)
{
ES0;
BCC=0x00;
send_byte(STX);
send_byte(0x00);
send_byte(0x05); //5byte
send_byte(CM);
send_byte(PM);
if(FLAG_INCODE=='a') //发送编译方式解码方式为ASCLL方式
{
send_byte(0x30);
}
else if(FLAG_INCODE=='b')//发送编译方式b为二进制方式
{
send_byte(0x31);
}
if((FLAG_TRACK1==0)&&(FLAG_TRACK2==0)&&(FLAG_TRACK3==0))//发送要读的轨道号要读三轨
{
send_byte(0x30);
}
else if((FLAG_TRACK1==1)&&(FLAG_TRACK2==0)&&(FLAG_TRACK3==0))//发送要读的轨道号要读一轨
{
send_byte(0x31);
}
else if((FLAG_TRACK1==0)&&(FLAG_TRACK2==1)&&(FLAG_TRACK3==0))//发送要读的轨道号要读二轨
{
send_byte(0x32);
}
else if((FLAG_TRACK1==0)&&(FLAG_TRACK2==0)&&(FLAG_TRACK3==1))//发送要读的轨道号要读三轨
{
send_byte(0x33);
}
else if((FLAG_TRACK1==1)&&(FLAG_TRACK2==1)&&(FLAG_TRACK3==0))//发送要读的轨道号要读一二轨
{
send_byte(0x34);
}
else if((FLAG_TRACK1==0)&&(FLAG_TRACK2==1)&&(FLAG_TRACK3==1))//发送要读的轨道号要读二三轨
{
send_byte(0x35);
}
else if((FLAG_TRACK1==1)&&(FLAG_TRACK2==0)&&(FLAG_TRACK3==1))//发送要读的轨道号要读一三轨
{
send_byte(0x36);
}
else if((FLAG_TRACK1==1)&&(FLAG_TRACK2==1)&&(FLAG_TRACK3==1))//发送要读的轨道号要读一二三轨
{
send_byte(0x37);
}
if(FLAG_MCARD==1) //ENABLE 指令有效
{
if(SAVPM==0X30)send_byte(0x31);//有效状态0X30
if(SAVPM==0X31)send_byte(0x32);//有效状态0X31//
}
else
{
send_byte(0x30);
}
send_byte(ETX);
send_byte(BCC);
ES1;
}
/**************************************************************************
函数原型void Enable(void)
功能:查状态命令 如果P=0;执行刷卡有效一次错误关闭等于时错误则永远开启
*****************************************************************************/
void Enable(void)
{
unsigned char shuaka_ok;
shuaka_ok=0;
FLAG_EXIT_R=0;
FLAG_MCARD=1;//读卡有效为1//
loop:
ES1;
read_card_star(); //开读卡所需的中断
clruartbuf(); //首先清除数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -