📄 shuttle_scan.c
字号:
/*
*******************************************************************************
* (c) Copyright 2008
* All Rights Reserved
*
* Version V1.00
*
* Product Number:
* Compiler Tool :
* MCU :
* File : Shuttle_Scan.c
* By : Tom.Yin
* Date :
*******************************************************************************
*/
/*
*******************************************************************************
* INCLUDE FILE
*******************************************************************************
*/
#include "Include.h"
/*
*******************************************************************************
* GLOBAL
*******************************************************************************
*/
unsigned char New_Shuttle_Flg;
signed char Shuttle_Code;
/*
*******************************************************************************
* LOCAL DEFINE
*******************************************************************************
*/
#define STATE_0_MASK (((INT32U)BIN(00000000) << 24) + ((INT32U)BIN(00000000) << 16) + ((INT32U)BIN(00000000) << 8) + BIN(00000000))
#define STATE_1_MASK (((INT32U)BIN(00000100) << 24) + ((INT32U)BIN(00000000) << 16) + ((INT32U)BIN(00000000) << 8) + BIN(00000000))
#define STATE_2_MASK (((INT32U)BIN(00000100) << 24) + ((INT32U)BIN(00010000) << 16) + ((INT32U)BIN(00000000) << 8) + BIN(00000000))
#define STATE_3_MASK (((INT32U)BIN(00000000) << 24) + ((INT32U)BIN(00010000) << 16) + ((INT32U)BIN(00000000) << 8) + BIN(00000000))
#define SHUTTLE_IO_MASK (((INT32U)BIN(00000100) << 24) + ((INT32U)BIN(00010000) << 16) + ((INT32U)BIN(00000000) << 8) + BIN(00000000))
#define STATE_MACHINE_CLOCKWISE_A (STATE_0 << 8 | STATE_1 << 4 | STATE_2)
#define STATE_MACHINE_CLOCKWISE_B (STATE_2 << 8 | STATE_3 << 4 | STATE_0)
#define STATE_MACHINE_ANTICLOCKWISE_A (STATE_0 << 8 | STATE_3 << 4 | STATE_2)
#define STATE_MACHINE_ANTICLOCKWISE_B (STATE_2 << 8 | STATE_1 << 4 | STATE_0)
enum
{
STATE_0,
STATE_1,
STATE_2,
STATE_3,
};
/*
*******************************************************************************
* LOCAL PARAMETER
*******************************************************************************
*/
static unsigned int Shuttle_State_Machine;
static unsigned char Actual_State;
static unsigned char Current_State;
/*
*******************************************************************************
* FUNCTION DECLARE
*******************************************************************************
*/
void Shuttle_IO_Config(void);
unsigned char Get_State(void);
void Init_Shuttle(void);
void Shuttle_Scan(void);
/*
*******************************************************************************
* Shuttle_IO_Config
* Description: Shuttle IO Config
*
* Arguments : None
*
* Returns : None
*
* Programers : Tom.Yin
*
* Date :
*
*******************************************************************************
*/
void Shuttle_IO_Config(void)
{
SET_PIN_DIR(GPIO_0_20, INPUT_ATTRIBUTE); //encoder pin1
SET_PIN_DIR(GPIO_0_26, INPUT_ATTRIBUTE); //encoder pin3
}
/*
*******************************************************************************
* Get_State
* Description: Get actual shuttle pin state
*
* Arguments : None
*
* Returns : shuttle state(STATE_0...STATE_3)
*
* Programers : Tom.Yin
*
* Date :
*
*******************************************************************************
*/
unsigned char Get_State(void)
{
unsigned int scan_dat;
scan_dat = IOPIN0 & SHUTTLE_IO_MASK;
if (scan_dat == STATE_0_MASK)
{
return STATE_0;
}
if (scan_dat == STATE_1_MASK)
{
return STATE_1;
}
if (scan_dat == STATE_2_MASK)
{
return STATE_2;
}
if (scan_dat == STATE_3_MASK)
{
return STATE_3;
}
else
{
return STATE_0;
}
}
/*
*******************************************************************************
* Init_Shuttle
* Description: Init Shuttle Module
*
* Arguments : None
*
* Returns : None
*
* Programers : Tom.Yin
*
* Date :
*
*******************************************************************************
*/
void Init_Shuttle(void)
{
unsigned char state;
Shuttle_IO_Config();
state = Get_State();
Shuttle_State_Machine = (state << 8) | (state << 4) | state;
Actual_State = state;
Current_State = state;
New_Shuttle_Flg = false;
Shuttle_Code = SHUTTLE_HOLDE_STILL;
}
/*
*******************************************************************************
* Shuttle_Scan
* Description: Shuttle Scan, this function will call by 1ms Interrutp
*
* Arguments : None
*
* Returns : None
*
* Programers : Tom.Yin
*
* Date :
*
*******************************************************************************
*/
void Shuttle_Scan(void)
{
if (New_Shuttle_Flg == false)
{
Shuttle_Code = SHUTTLE_HOLDE_STILL;
}
Actual_State = Get_State();
if (Actual_State != Current_State)
{
Current_State = Actual_State;
Shuttle_State_Machine = (Shuttle_State_Machine << 4) & 0xFFF;
Shuttle_State_Machine = Shuttle_State_Machine + Current_State;
if (Shuttle_State_Machine == STATE_MACHINE_CLOCKWISE_A || Shuttle_State_Machine == STATE_MACHINE_CLOCKWISE_B)
{
Shuttle_Code++;
New_Shuttle_Flg = true;
}
else if (Shuttle_State_Machine == STATE_MACHINE_ANTICLOCKWISE_A || Shuttle_State_Machine == STATE_MACHINE_ANTICLOCKWISE_B)
{
Shuttle_Code--;
New_Shuttle_Flg = true;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -