📄 key.c
字号:
/***********************************************************************************
/----------------------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 + -