⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 基于LP22132 KELL下的磁卡写卡器
💻 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 + -