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

📄 key.c

📁 M200一个与单片机通信的C语言软件源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date:  2008-06-24
** Descriptions: KEY Transaction Primary Process Functions
**--------------------------------------------------------------------------------------------
** Created By:  	Kelven
** Created Date:	2007-04-17
**--------------------------------------------------------------------------------------------
** Modified by: 	Kelven
** Modified date:	2007-09-04
** Version:		V4.0.0
** Descriptions:
**--------------------------------------------------------------------------------------------
** Modified by: 	Kelven
** Modified date:	2008-06-24
** Version:		V4.0.1
** Descriptions:	Updating Key Configrating Function, Added PLC Chip Register Value Setting Module
***********************************************************************************/

 #include "..\inc\Key.h"

extern bit g_bRecv_Pkg_Flag;
extern bit g_bError_Pkg_Flag;
extern bit g_bRefresh_DSP_Flag;
extern bit INT_ON_OFF;

extern BYTE cSend_Timeout_Cnt;
extern BYTE g_cKey_Value;
extern BYTE g_cMenu_Value;

extern BYTE xdata g_cUart_Rate;
extern BYTE xdata g_cNode_Address;

extern BYTE xdata g_cWRACD;
extern BYTE xdata g_cWRTDR;
extern BYTE xdata g_cWRTH0;
extern BYTE xdata g_cWRTH1;
extern BYTE xdata g_cDebug;

extern BYTE bdata g_cModCfgReg;
extern bit bMI200_RX_TXn;
extern bit bMI200_Freq1;
extern bit bMI200_Freq0;

extern WORD data g_wTotal_Pkg;
extern  FLAG_YES_NO Config_Param_Completed;

/*------------------------------------Global Value Definition------------------------------------*/
bit g_bInteract_Bit;
bit g_bESC_Bit;

BYTE g_cTrans_Step;
BYTE g_cRecv_Step;
BYTE g_cRecByte_H;
BYTE g_cRecByte_L;
BYTE g_cSend_Data_Length;
BYTE g_cSend_Byte_Cnt;		
BYTE g_cRecv_Byte_Cnt;

BYTE xdata g_Send_Buf[128];
BYTE xdata g_Recv_Buf[128];

KEY  xdata g_Key;

BYTE code ST_info[17]	= {"Better PLC World"};
BYTE code ST_sending[9] = {"Sending:"};

WORD data g_wInter_Corr_Num;
WORD data g_wRecv_Pkgs_Num;
WORD data g_wError_Pkgs_Num;
WORD data g_wCurrent_Pkg;
/*------------------------------------------------------------------------------------------*/

/***********************************************************************************
** Function Name:	Init_Key
** Input Parameters:None
** Output Parameters:None
** Implement:Initialization The Value of Key Struct
***********************************************************************************/
void Init_Key(void)
{
	g_Key.Key_Value = FALSE;
	g_Key.Key_Vibration_Delay = 0;
	g_Key.Key_Push_Down = FALSE;
}


/***********************************************************************************
** Function Name:	Set_Recv_Param
** Input Parameters:cFreq_Select:The Selected Communication Frequency
** Output Parameters:None
** Implement:Configurate The Communication Frequency to The Register of Receiver
***********************************************************************************/
void Set_Recv_Param(BYTE cFreq_Select)
{	
	switch (cFreq_Select)
	{	
		case 0:		//--Frequency is 57.6K
		{	
			FreqCtrol_1 = 0;		
			FreqCtrol_0 = 1;	
		}	
		break;
		case 1:		//--Frequency is 76.8K	
		{	
			FreqCtrol_1 = 1;		
			FreqCtrol_0 = 0;	
		}	
		break;
		default:		//--Frequency is 115.2K
		{	
			FreqCtrol_1 = 1;		
			FreqCtrol_0 = 1;	
		}	
		break;
	}
}

/***********************************************************************************
** Function Name:	Read_Key
** Input Parameters:None
** Output Parameters:cValue:The Final Correct Key Value
** Implement:Read The The Final Correct Key Value After Key Vibration Reduction
***********************************************************************************/
BYTE Read_Key(void)
{ 
	BYTE Key_Final_Value = 0xff;
	//-----------------------------Read Key Pin Value-----------------------------------------//
	if((KBD_ESC)&&(!KBD_UP)&&(KBD_DOWN)&&(KBD_ENTER))			//Key UP is Pushed Down
   	{
		if(g_Key.Key_Value==FALSE)
		{
			g_Key.Key_Vibration_Delay++;
			if(g_Key.Key_Vibration_Delay >= Key_Vibration_Delay_Time)
			{
				g_Key.Key_Vibration_Delay = 0;
				g_Key.Key_Value = UP;
				g_Key.Key_Push_Down = TRUE;
			}
		}
	} 
	
	else  if((KBD_ESC)&&(KBD_UP)&&(!KBD_DOWN)&&(KBD_ENTER))		//Key DOWN is Pushed Down
   	{
		if(g_Key.Key_Value == FALSE)
	   	{
			g_Key.Key_Vibration_Delay++;
			if(g_Key.Key_Vibration_Delay >= Key_Vibration_Delay_Time)
			{
				g_Key.Key_Vibration_Delay = 0;
				g_Key.Key_Value = DOWN;
				g_Key.Key_Push_Down = TRUE;
			}
		}
	}
  	
   	else  if((KBD_ESC)&&(KBD_UP)&&(KBD_DOWN)&&(!KBD_ENTER))		//Key ENTER is Pushed Down
	{
		if(g_Key.Key_Value == FALSE)
		{
			g_Key.Key_Vibration_Delay++;
			if(g_Key.Key_Vibration_Delay >= Key_Vibration_Delay_Time)
			{
				g_Key.Key_Vibration_Delay = 0;
				g_Key.Key_Value = ENTER;
				g_Key.Key_Push_Down = TRUE;
			}
		}
	}  
   
	else  if((!KBD_ESC)&&(KBD_UP)&&(KBD_DOWN)&&(KBD_ENTER))		//Key ESC is Pushed Down
	{
		if(g_Key.Key_Value == FALSE)
		{
			g_Key.Key_Vibration_Delay++;
			if(g_Key.Key_Vibration_Delay >= Key_Vibration_Delay_Time)
			{
				g_Key.Key_Vibration_Delay = 0;
				g_Key.Key_Value = ESC;
				g_Key.Key_Push_Down = TRUE;
			}
		}
	}
	//------------------------------Key Vibration Reduction-------------------------------------//
	if( g_Key.Key_Push_Down == TRUE)
	{
		if((KBD_ESC)&&(KBD_UP)&&(KBD_DOWN)&&(KBD_ENTER))
		{
			Key_Final_Value = g_Key.Key_Value;
			g_Key.Key_Push_Down = FALSE;
			g_Key.Key_Value = FALSE;
			return(Key_Final_Value);
		}
		else
		{
			return(0xff);
		}
	}
	else
	{
		return(0xff);
	}
}

/***********************************************************************************
** Function Name:	KEY_Handle
** Input Parameters:None
** Output Parameters:None
** Implement:Read The Key Value & Handle Relative Transaction
***********************************************************************************/
void	KEY_Handle(void)
{	
	//BYTE cForCnt;
	BYTE cKey_Value;
	BYTE cTmpModeValue;
	BYTE cString_Cnt;
	WORD iCorret_pkg_Num;
	WORD iRec_pkg_Num;

	cKey_Value = Read_Key();
	
	if(cKey_Value != 0xff)
	{	
		switch(g_cMenu_Value)
		{	
			//-----------------------           Main Menu         -----------------------------------//
			//------------------------------------------------------------------------------//
			case DSP_SETTING:	//--Into Setting
			{	
				switch(cKey_Value)
				{	
					case ENTER:
						g_cMenu_Value = DSP_DATA_RATE;	
					break;								
					case ESC:
						g_cMenu_Value = DSP_SETTING;	
					break;	
					case UP:			
						g_cMenu_Value = DSP_COM_RECVING;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_TRANSMITTER:	//--Into Transmitter
			{	
				switch(cKey_Value)
				{	
					case ENTER:		
					{	
						g_bESC_Bit 		= 0;
						g_cMenu_Value	= ACTIVE_TRANS;
						g_cSend_Data_Length	= 16;
						for(cString_Cnt = 0;cString_Cnt < g_cSend_Data_Length;cString_Cnt ++)
						{	
							g_Send_Buf[cString_Cnt] = ST_info[cString_Cnt];
						}
						g_wCurrent_Pkg		= 0;
						g_cTrans_Step 	= 0;
						bMI200_RX_TXn	= Status_TRAN;
						PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);	
						TX_SWITH = 1;
					}	
					break;								
					case ESC:		
					{	
						g_cMenu_Value = DSP_TRANSMITTER;
						TX_SWITH = 0;
					}	
					break;
					case UP:			
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_RECEIVER:	//--Into Receiver	
			{	
				switch(cKey_Value)
				{	
					case ENTER:
					{	
						g_cMenu_Value 		= ACTIVE_RECEIVER;
						g_wRecv_Pkgs_Num	= 0;
						g_wError_Pkgs_Num	= 0;
						g_cRecByte_H		= 0;			
						g_cRecByte_L		= 0;	
						g_cRecv_Step		= 0x00;
						bMI200_RX_TXn	= Status_RECV;					//Change to Receiver Mode
						PLC_Write_Reg(PLCAddrWRMR,g_cModCfgReg|0x8c);	//Temp Change Data Rate to 200/400 bps;
					}	
					break;								
					case ESC:		
						g_cMenu_Value = DSP_RECEIVER;	
					break;
					case UP:		
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_INTER_TRANS:	//--Into Interactive Transmitter	
			{	
				switch(cKey_Value)
				{	
					case ENTER:		
					{	
						g_cMenu_Value 		= ACTIVE_INTER_TRANS;
						g_wRecv_Pkgs_Num	= 0;
						g_wError_Pkgs_Num	= 0;
						g_bInteract_Bit 		= 0;
						g_cSend_Data_Length 	= 12;
						for (cString_Cnt = 0;cString_Cnt < g_cSend_Data_Length;cString_Cnt ++)
						{	
							g_Send_Buf[cString_Cnt] = ST_info[cString_Cnt];
						}
						g_Send_Buf[0] 		= 'I';
						g_Send_Buf[1] 		= 'n';
						g_Send_Buf[2] 		= 't';
						g_Send_Buf[3] 		= 0x00;
						g_Send_Buf[4] 		= 0x01;	
						g_Send_Buf[5] 		= 45;
						g_Send_Buf[6] 		= 32;	
						g_wInter_Corr_Num	= 0;
						g_wCurrent_Pkg		= 0;
						g_cTrans_Step		= 0;
						iRec_pkg_Num	= 0;
						bMI200_RX_TXn	= Status_TRAN;
						PLC_Write_Reg(PLCAddrWRMR,g_cModCfgReg & 0x7f);	
					}	
					break;
					case ESC:		
						g_cMenu_Value = DSP_INTER_TRANS;	
					break;
					case UP:			
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_INTER_RECV:	//--Into Interactive Receiver
			{	
				switch(cKey_Value)
				{	
					case ENTER:
					{	
						g_cMenu_Value 		= ACTIVE_INTER_RECV;
						g_bInteract_Bit		= 0;
						g_wRecv_Pkgs_Num	= 0;
						g_wError_Pkgs_Num	= 0;
						g_cRecByte_H		= 0;			
						g_cRecByte_L		= 0;	
						g_cRecv_Step		= 0x00;
						bMI200_RX_TXn	= Status_RECV;					//Change to transmit mode
						PLC_Write_Reg(PLCAddrWRMR,g_cModCfgReg|0x8c) ;	//Write mode configuration, 
					}	
					break;								
					case ESC:		
						g_cMenu_Value = DSP_INTER_RECV;	
					break;
					case UP:		
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_COM_SETTING:	//--COM_Setting
			{	
				switch(cKey_Value)
				{	
					case ENTER:		
						g_cMenu_Value = ACTIVE_COM_SETTING;	
					break;								
					case ESC:		
						g_cMenu_Value = DSP_COM_SETTING;	
					break;
					case UP:			
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value ++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			//------------------------------------------------------------------------------//
			case DSP_COM_RECVING:	//--6.COM_Recving
			{	
				switch(cKey_Value)
				{	
					case ENTER:		
						g_cMenu_Value = ACTIVE_COM_RECVING;	
					break;								
					case ESC:		
						g_cMenu_Value = DSP_COM_RECVING;	
					break;
					case UP:			
						g_cMenu_Value --;	
					break;
					case DOWN:		
						g_cMenu_Value = DSP_SETTING;	
					break;
					default:	
					break;
				}
			}	
			break;
			
			//---------------------------        Setting Menu        -------------------------------//
			//------------------------------------------------------------------------------//
			case DSP_DATA_RATE:	//--Displaying Setting Data Rate
			{	
				switch(cKey_Value)
				{	
					case ENTER:
						g_cMenu_Value = ACTIVE_DATA_RATE;
					break;
					case ESC:		
						g_cMenu_Value = DSP_SETTING;	
					break;
					case UP:			
						g_cMenu_Value = DSP_DEBUG_MODE;
					break;
					case DOWN:		
						g_cMenu_Value++;	
					break;
					default:	
					break;
				}
			}	
			break;	
			case ACTIVE_DATA_RATE:	//--Into Setting Data Rate
			{	
				switch(cKey_Value)
				{	
					case ENTER:
					{
						EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);//Refresh Data Rate Value to EEPROM
						TOOL_Delay_MS(10);
						g_bRefresh_DSP_Flag = 1;
						g_cMenu_Value = DSP_DATA_RATE;	
					}
					break;
					case ESC:		
						g_cModCfgReg = g_cModCfgReg & 0xf3;
					break;
					case UP:			
					{	
						cTmpModeValue = (g_cModCfgReg & 0x0c);

⌨️ 快捷键说明

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