📄 button.c
字号:
// Button.C
// handles button IO routine.
#include <p33FJ64GP306.h>
#include "integer.h" //BYTE etc
#include "button.h" //function, ENUM prototype
//Current value, Prev Value for buttons
BYTE ButtonStatus_Stop;
BYTE ButtonPrev_Stop;
BYTE ButtonStatus_Pause;
BYTE ButtonPrev_Pause;
BYTE ButtonStatus_Play;
BYTE ButtonPrev_Play;
BYTE ButtonStatus_FF;
BYTE ButtonPrev_FF;
BYTE ButtonStatus_Prev;
BYTE ButtonPrev_Prev;
//PORT B Connection
// 7:
// 6:
// 5:PLAY
// 4:PAUSE
// 3:STOP
// 2:
// 1:FF
// 0:PREV
void init_button(void)
{
// Set B0,1,2,3,4,5 as input
// This is initial condition but make it sure.
TRISB = TRISB | 0x003F;
// AD1PCFGL: Change A/D Port.
// AN15 - AN0 is not used, connected to AVss.
// Digital Port use these pins.
AD1PCFGL = 0xFFFF;
// Initialize button variables
ButtonStatus_Stop = 0;
ButtonPrev_Stop = 0;
ButtonStatus_Pause = 0;
ButtonPrev_Pause = 0;
ButtonStatus_Play = 0;
ButtonPrev_Play = 0;
ButtonStatus_FF = 0;
ButtonPrev_FF = 0;
ButtonStatus_Prev = 0;
ButtonPrev_Prev = 0;
}
void Read_Buttons(void)
{
// called by timer function, _T2Interrupt
BYTE StopBtn;
BYTE PauseBtn;
BYTE PlayBtn;
BYTE FFBtn;
BYTE PrevBtn;
StopBtn = PORTBbits.RB3;
PauseBtn = PORTBbits.RB4;
PlayBtn = PORTBbits.RB5;
FFBtn = PORTBbits.RB1;
PrevBtn = PORTBbits.RB0;
if (StopBtn == ButtonPrev_Stop)
// When "Same as before" value sampled, to avoid < 10ms noise
{
ButtonStatus_Stop = StopBtn; //store into current value.
}
//save 'value got now' as Prev value, to compare at next timer cycle.
ButtonPrev_Stop = StopBtn;
if (PauseBtn == ButtonPrev_Pause)
{
ButtonStatus_Pause = PauseBtn;
}
ButtonPrev_Pause = PauseBtn;
if (PlayBtn == ButtonPrev_Play)
{
ButtonStatus_Play = PlayBtn;
}
ButtonPrev_Play = PlayBtn;
if (FFBtn == ButtonPrev_FF)
{
ButtonStatus_FF = FFBtn;
}
ButtonPrev_FF = FFBtn;
if (PrevBtn == ButtonPrev_Prev)
{
ButtonStatus_Prev = PrevBtn;
}
ButtonPrev_Prev = PrevBtn;
}
BYTE Read_Command()
{
//will be called from main().
//return button code with priority.
BYTE retval;
retval = BTN_NONE;
// Priority high to low.
if (ButtonStatus_Stop)
{
retval = BTN_STOP;
}
if ( ( retval == BTN_NONE ) && ButtonStatus_Pause)
{
retval = BTN_PAUSE;
}
if ( ( retval == BTN_NONE ) && ButtonStatus_Play)
{
retval = BTN_PLAY;
}
if ( ( retval == BTN_NONE ) && ButtonStatus_FF)
{
retval = BTN_FF;
}
if ( ( retval == BTN_NONE ) && ButtonStatus_Prev)
{
retval = BTN_PREV;
}
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -