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

📄 rs232.c

📁 LPC2103的绝大部分驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
			break;
			
		case CardreaderRawDataHandST_Addr:								//地址时
			
			DEBUG_PrintBuf(buf3,12);
			DEBUG_PrintByte16(FlashHead.Addr);
			DEBUG_PrintChar('\n');
			DEBUG_PrintBuf(buf4,14);
			DEBUG_PrintByte16(rcv_buf[rcv_buf_head]);//rcv_buf存放的是232接收到的信息
			DEBUG_PrintChar('\n');
			
			SetControllerAddr(rcv_buf[rcv_buf_head]);	//对FlashHead的Addr参数进行赋值,并将这个结构体中的数据存入FLASH
			
			if(FALSE == Read_Flash_Data(0,0,0,sizeof(FlashHead),(char*)(&FlashHead)))
			{
				DEBUG_PrintBuf(buf2,19);						//输出Set Address error.\n
			}
			else
			{
				DEBUG_PrintBuf(buf1,12);						//输出New Address:
				DEBUG_PrintByte16(FlashHead.Addr);
				DEBUG_PrintChar('\n');
			}

			Rcv_Buf_Head_Plus(1);
			CardreaderRawDataHandST = CardreaderRawDataHandST_Idle;
			break;
	
		case CardreaderRawDataHandST_DutyInfo:					//值班信息,这个信息是要求读出FLASH中存储的所有卡号和信息
			printIDPSWDutyInfo();								//打印值班信息
			CardreaderRawDataHandST = CardreaderRawDataHandST_Idle;
			Rcv_Buf_Head_Plus(1);
			break;
			
		case CardreaderRawDataHandST_Time:
		
			Rcv_Buf_Head_Plus(1);
			printCurrentDateTime();									//从串口打印当前时间
			CardreaderRawDataHandST = CardreaderRawDataHandST_Idle;
			break;
			
		case CardreaderRawDataHandST_SetTime:						//设置RTC,即设置当前的时间
			
			if(DataNuInbuf > 7)
			{
				Rcv_Buf_Head_Plus(1);
				Year1 = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);//这里的Year1,Year2,SetDT.Month等都是十进制
				Rcv_Buf_Head_Plus(1);
				Year2 = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
				SetDT.Year = Year1*100 + Year2;
				SetDT.Month = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
				SetDT.Day = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
				SetDT.Hour = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
				SetDT.Minit = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
				SetDT.Second = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);

				SetRTC(&SetDT);
				CardreaderRawDataHandST = CardreaderRawDataHandST_Idle;
			}
			break;

		case CardreaderRawDataHandST_SetShiftTime:					//设置交班时间

			if(DataNuInbuf > 2)
			{
				Rcv_Buf_Head_Plus(1);
				ShiftTime1 = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				UART0_SendByte16(ShiftTime1);
				DEBUG_PrintChar('\n');
				Rcv_Buf_Head_Plus(1);
				ShiftTime2 = Change_Hex_To_Dec(rcv_buf[rcv_buf_head]);
				UART0_SendByte16(ShiftTime2);
				DEBUG_PrintChar('\n');
				Rcv_Buf_Head_Plus(1);
				FlashHead.DutyShiftTime = ShiftTime1*100 + ShiftTime2;
				CardreaderRawDataHandST = CardreaderRawDataHandST_Idle;
			}
			break;
			
		case CardreaderRawDataHandST_VoiceType:

			if(DataNuInbuf > 2)
			{
				Rcv_Buf_Head_Plus(1);
				VoiceCtrl(rcv_buf[rcv_buf_head]);
//				UART0_PutChar(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
			}
		case CardreaderRawDataHandST_SetGroupNo:

			if(DataNuInbuf > 1)
			{
				Rcv_Buf_Head_Plus(1);
				SetGruopNo(rcv_buf[rcv_buf_head]);
				Rcv_Buf_Head_Plus(1);
			}
			
		default:
			break;
	}
}
*/
/********************************************************************************************************
*
* 函数名称:
*
* 功能描述:刷卡器操作提示
*
* 入口参数:
* 出口参数:
*
********************************************************************************************************/
/*
#define HINTTYPE_Select_operation				1
#define HINTTYPE_PSW							2
#define HINTTYPE_WrongPSW						3
#define HINTTYPE_InvalidCard					4
#define HINTTYPE_NotOnDuty						5

void HintCardReadorOperation(uint8 HintType)
{
#ifdef use_debugPrint
	uint8 buf1[] = "Please select operation!\n";
	uint8 buf2[] = "Please enter password.\n";
	uint8 buf3[] = "Wrong password.\n";
	uint8 buf4[] = "You are not on duty!\n";
	uint8 buf5[] = "Invalid card\n";
#endif
	
	switch(HintType)
	{
		case HINTTYPE_Select_operation:
			DEBUG_PrintBuf(buf1,25);
			break;
		case HINTTYPE_PSW:
			DEBUG_PrintBuf(buf2,23);
			break;
		case HINTTYPE_WrongPSW:
			DEBUG_PrintBuf(buf3,16);
			break;
		case HINTTYPE_InvalidCard:
			DEBUG_PrintBuf(buf5,13);
			break;
		case HINTTYPE_NotOnDuty:
			DEBUG_PrintBuf(buf4,21);
			break;
		default:
			break;
	}
}
*/
/********************************************************************************************************
*
* 函数名称:Data_Handle
*
* 功能描述:对RS232接收的刷卡器的信息进行处理
*
* 入口参数:RS232_state	  RS232数据处理的状态字
* 出口参数:
*
********************************************************************************************************/
/*
char MenaceCode[3] = {'1','1','0'};
char CardReaderPSW[10];
uint8 ReceivedPSWLength;						//用来存储接收到的密码
uint8 CardNoReceived[CARDNO_LENGTH];			//用来存储接收到的卡号
IDPSW IDPsw;
uint8 IDPswCheckResult;
extern uint8 CurrentOpraterID[4];

void CardNoKeyValueHandle(void)
{
#ifdef use_debugPrint
	uint8 buf1[] = "Open door.\n";
	uint8 buf2[] = "Close door.\n";
	uint8 buf3[] = "MenaceAlarm.\n";
	uint8 buf4[] = "check-passed.\n";
	uint8 buf5[] = "Anti-threaten-failed\n";
#endif

	uint8 iLoop;
	if(	CardReadorData.InputType == INPUTDATATYPE_INVALID)
		return;
		
	switch(CardReaderDataHandleSt)								//CardReaderDataHandleSt已经在UART0的初始化中作了定义
	{
		case CardReaderSt_Idle://空闲状态
			if(CardReadorData.InputType == INPUTDATATYPE_CARDNO)
			{//收到卡号,将卡号存储,并切换状态
				for(iLoop = 0;iLoop<CARDNO_LENGTH;iLoop++)
				{
					CardNoReceived[iLoop] = CardReadorData.CardNo_KeyValue[iLoop];
				}
				CardReaderDataHandleSt = CardReaderSt_CardIN;
				HintCardReadorOperation(HINTTYPE_Select_operation);
				VoiceCtrl(SelectOperation);
			}
			else
			{
				if(CardReadorData.CardNo_KeyValue[0] == '#')
				{
					printIDPSWDutyInfo();//从串口打印所有信息
				}
				if(CardReadorData.CardNo_KeyValue[0] == '*')
				{
					CloseAlarm();//打开报警器
				}
			}
			break;

		case CardReaderSt_CardIN://已读到卡号
			if(CardReadorData.InputType == INPUTDATATYPE_CARDNO)
			{//重新收到卡号,更新存储的卡号
				for(iLoop = 0;iLoop<CARDNO_LENGTH;iLoop++)
				{
					CardNoReceived[iLoop] = CardReadorData.CardNo_KeyValue[iLoop];
				}
				CardReaderDataHandleSt = CardReaderSt_CardIN;
				HintCardReadorOperation(HINTTYPE_Select_operation);//串口打印出提示语,提示用户选择操作
				VoiceCtrl(SelectOperation);
			}
			else
			{//收到按键
				if(CardReadorData.CardNo_KeyValue[0] == 'O')			//用户选择了开门命令
				{
					CardReaderDataHandleSt = CardReaderSt_OpenKey;
					ReceivedPSWLength = 0;
					HintCardReadorOperation(HINTTYPE_PSW);				//提示用户输入密码
					VoiceCtrl(EnterPassword);
				}
				else if(CardReadorData.CardNo_KeyValue[0] == 'C')		//如果用户选择了关门
				{
					if(CHECKIDPSW_IDINFLASH == CheckID(CardNoReceived))//判断FLASH中有没有此卡号
					{
						memcpy((char*)CurrentOpraterID,(char*)CardNoReceived,CARDNO_LENGTH);
						RS485_Door_Operate_Choose(RS485_Operate_Choose_Close);//进行Door_Command = CLOSE_OPERATE的赋值操作
						DEBUG_PrintBuf(buf2,12);						//打印"关门"
					}
					
					CardReaderDataHandleSt = CardReaderSt_Idle;
					break;
				}
				else
				{
					CardReaderDataHandleSt = CardReaderSt_Idle;
				}
			}
			break;
		case CardReaderSt_OpenKey://开门键已按,等待密码
			if(CardReadorData.InputType == INPUTDATATYPE_CARDNO)
			{//重新收到卡号,更新存储的卡号
				for(iLoop = 0;iLoop<CARDNO_LENGTH;iLoop++)
				{
					CardNoReceived[iLoop] = CardReadorData.CardNo_KeyValue[iLoop];
				}
				CardReaderDataHandleSt = CardReaderSt_CardIN;
			}
			else
			{
						if(CardReadorData.CardNo_KeyValue[0] == 'E')
						{//收到输入键
							if(ReceivedPSWLength < 6)
							{//密码长度不够
								HintCardReadorOperation(HINTTYPE_WrongPSW);//提示密码不对.退出
								VoiceCtrl(WrongPassword);
								CardReaderDataHandleSt = CardReaderSt_Idle;
								break;
							}
							else if(ReceivedPSWLength == 6)
							{//密码长度正确
								
								;//校验卡号和密码
							}
							else if(ReceivedPSWLength < 9)
							{//密码长度不正确
								HintCardReadorOperation(HINTTYPE_WrongPSW);//提示密码不对,退出
								VoiceCtrl(WrongPassword);
								CardReaderDataHandleSt = CardReaderSt_Idle;
								break;
							}
							else if(ReceivedPSWLength == 9)
							{//密码长度正确
								if(FALSE == memcompare(MenaceCode,CardReaderPSW+6,3))//只要看最后输入的字符是不是MenaceCode,CardReaderPSW里放着接收到的密码
								{//防胁迫码不正确
									DEBUG_PrintBuf(buf5,21);
									HintCardReadorOperation(HINTTYPE_WrongPSW);//提示密码错误
									VoiceCtrl(WrongPassword);
									CardReaderDataHandleSt = CardReaderSt_Idle;
									
									break;
								}
							}
							
							//校验卡号和密码
							memcpy((char*)(IDPsw.ID),(char*)CardNoReceived,CARDNO_LENGTH);//拷贝卡号到IDPsw.ID中
							memcpy(IDPsw.Psw,CardReaderPSW,PSW_LENGTH);//拷贝密码到IDPsw.Psw中
							IDPswCheckResult = CheckIDPswOnDuty(IDPsw);//校验卡号和密码,去值班信息中去校验
							
							
							///////////////////////////////////////////////
							//IDPswCheckResult = CHECKIDPSW_PASS;
							//memcpy((char*)CurrentOpraterID,(char*)CardNoReceived,CARDNO_LENGTH);
							//RS485_Door_Operate_Choose(RS485_Operate_Choose_Open);			//驱动电机正转
							///////////////////////////////////////
							switch (IDPswCheckResult)
							{
								case CHECKIDPSW_PASS://通过验证
									memcpy((char*)CurrentOpraterID,(char*)CardNoReceived,CARDNO_LENGTH);
									RS485_Door_Operate_Choose(RS485_Operate_Choose_Open);			//驱动电机正转.Door_Command = OPEN_OPERATE;
									DEBUG_PrintBuf(buf1,11);
									DEBUG_PrintBuf(buf4,14);
 								
									if(ReceivedPSWLength == 9)
									{
										DEBUG_PrintBuf(buf3,13);
										AddLog(EVENT_MenaceAlarm,(uint32)CurrentOpraterID);
									}
									break;
								case CHECKIDPSW_NO_EXIST://卡号不存在
									HintCardReadorOperation(HINTTYPE_InvalidCard);
									VoiceCtrl(InvalidCard);
									break;
								case CHECKIDPSW_WRONG_PSW://密码错误
									HintCardReadorOperation(HINTTYPE_WrongPSW);
									VoiceCtrl(WrongPassword);
									break;
								case CHECKIDPSW_NOT_ON_DUTY://不在值班时间内
									HintCardReadorOperation(HINTTYPE_NotOnDuty);
									VoiceCtrl(NotOnDuty);
									break;
								case CHECKIDPSW_IDINFLASH://
								default:
									break;
							}
							
							CardReaderDataHandleSt = CardReaderSt_Idle;
							break;
							}
							else if(CardReadorData.CardNo_KeyValue[0] == 'C')
							{//收到清除键
								ReceivedPSWLength = 0;
							}
							else if((CardReadorData.CardNo_KeyValue[0] < '0')||(CardReadorData.CardNo_KeyValue[0] > '9'))
							{//收到其他非密码键值
								CardReaderDataHandleSt = CardReaderSt_Idle;
								break;
							}
							else
							{
								if(ReceivedPSWLength == 9)//如果收到的密码数超过9个,以后收到的无效
									break;
								CardReaderPSW[ReceivedPSWLength++] = CardReadorData.CardNo_KeyValue[0];//收到一个储存一个
							}
						}
						break;
		case CardReaderSt_CloseKey://关门键已按
			if(CardReadorData.InputType == INPUTDATATYPE_CARDNO)
			{//收到卡号
				for(iLoop = 0;iLoop<CARDNO_LENGTH;iLoop++)
				{
					CardNoReceived[iLoop] = CardReadorData.CardNo_KeyValue[iLoop];
				}
				CardReaderDataHandleSt = CardReaderSt_CardIN;
			}
			break;
	}
	
	CardReadorData.InputType = INPUTDATATYPE_INVALID;

}

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -