Привожу куски кода:
stm8_tsl_conf.h
Код
#define LOADREF_PORT_ADDR (GPIOC_BaseAddress) /**< LOADREF pin GPIO base address */
#define LOADREF_BIT (0x04) /**< LOADREF pin mask */
//==============================================================================
//
// 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1
//
// Set the number of keys
// Set the port
// Set the pins mask
//
// Warning: This port is mandatory and one key at least must be defined.
//
//==============================================================================
#define SCKEY_P1_KEY_COUNT (4) /**< Single channel key Port 1: Number of keys used (value from 1 to 8) */
#define SCKEY_P1_PORT_ADDR (GPIOC_BaseAddress) /**< Single channel key Port 1: GPIO base address */
#define SCKEY_P1_A (0x02) /**< Single channel key Port 1: 1st key mask */
#define SCKEY_P1_B (0x40) /**< Single channel key Port 1: 2nd key mask */
#define SCKEY_P1_C (0x20) /**< Single channel key Port 1: 3rd key mask */
#define SCKEY_P1_D (0x10) /**< Single channel key Port 1: 4th key mask */
#define SCKEY_P1_E (0) /**< Single channel key Port 1: 5th key mask */
#define SCKEY_P1_F (0) /**< Single channel key Port 1: 6th key mask */
#define SCKEY_P1_G (0) /**< Single channel key Port 1: 7th key mask */
#define SCKEY_P1_H (0) /**< Single channel key Port 1: 8th key mask */
#define SCKEY_P1_DRIVEN_SHIELD_MASK (0)//(0x08)
#define LOADREF_BIT (0x04) /**< LOADREF pin mask */
//==============================================================================
//
// 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1
//
// Set the number of keys
// Set the port
// Set the pins mask
//
// Warning: This port is mandatory and one key at least must be defined.
//
//==============================================================================
#define SCKEY_P1_KEY_COUNT (4) /**< Single channel key Port 1: Number of keys used (value from 1 to 8) */
#define SCKEY_P1_PORT_ADDR (GPIOC_BaseAddress) /**< Single channel key Port 1: GPIO base address */
#define SCKEY_P1_A (0x02) /**< Single channel key Port 1: 1st key mask */
#define SCKEY_P1_B (0x40) /**< Single channel key Port 1: 2nd key mask */
#define SCKEY_P1_C (0x20) /**< Single channel key Port 1: 3rd key mask */
#define SCKEY_P1_D (0x10) /**< Single channel key Port 1: 4th key mask */
#define SCKEY_P1_E (0) /**< Single channel key Port 1: 5th key mask */
#define SCKEY_P1_F (0) /**< Single channel key Port 1: 6th key mask */
#define SCKEY_P1_G (0) /**< Single channel key Port 1: 7th key mask */
#define SCKEY_P1_H (0) /**< Single channel key Port 1: 8th key mask */
#define SCKEY_P1_DRIVEN_SHIELD_MASK (0)//(0x08)
Настройки библиотеки
main.h
Код
if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))
{
TSL_GlobalSetting.b.CHANGED = 0;
if (sSCKeyInfo[3].Setting.b.DETECTED) /* KEY 1 touched */
{
Keys|=Key1;
return;
}
if (sSCKeyInfo[2].Setting.b.DETECTED) /* KEY 2 touched */
{
Keys|=Key2;
return;
}
}
Опрос кнопок.
Сделал такой финт ушами
Код
if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 3 touched */
{
if ((sSCKeyInfo[0].Setting.b.DETECTED)||(sSCKeyInfo[0].State.b.DETECTED))
{
Keys|=KeyD; //Нажаты две кнопки
return;
}
else
{
Keys|=Key3;
return;
}
}
if (sSCKeyInfo[0].Setting.b.DETECTED) /* KEY 4 touched */
{
if ((sSCKeyInfo[1].Setting.b.DETECTED)||(sSCKeyInfo[1].State.b.DETECTED))
{
Keys|=KeyD;//Нажаты две кнопки
return;
}
else
{
Keys|=Key4;
return;
}
}
Нашел методом тыка - иногда в переменной второй из пары нажатых кнопок sSCKeyInfo[х].State.b.DETECTED появляется 1 но срабатывает 2 двух случаях из 3 то есть нестабильно. Помогите советом как мне отработать двойное нажатие?