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

📄 button.c

📁 WAV 数字输出播放器
💻 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 + -