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

📄 button.c

📁 butterfly MP3源代码
💻 C
字号:
/**////  @file	 		button.c//  @author 		ATMEL Norway//  @brief 			AVR Butterfly button handling routines////  Target(s)...: ATmega169////  Compiler....: AVR-GCC 3.3.1; avr-libc 1.0////  Revisions...: 1.2////  YYYYMMDD - VER. - COMMENT                                       - SIGN.////  20030116 - 1.0  - Created                                       - KS//  20031009          port to avr-gcc/avr-libc                      - M.Thomas//  20041105 - 1.2	  Altered for Butterfly MP3 use					- N.Lott	// **///mtA//#include <inavr.h>//#include "iom169.h"#include <avr/io.h>#include <avr/interrupt.h>#include <avr/signal.h>#include <inttypes.h>//mtE#include "main.h"#include "types.h"#include "button.h"#include "timer0.h"#include "vs1001.h"#include "mmc.h"#include "uart.h"extern volatile uint8_t gPowerSaveTimer;extern volatile uint16	gPlayTimeSeconds;extern volatile uint8 	gMode;		// mode of player, idle, playing, off, etc// mt  unsigned char gButtonTimeout = FALSE;volatile uint16 gButtonTimeout = FALSE;volatile uint8 gButtonLongTimeout =FALSE; // this is to detect long presses on the button//mtA//char KEY = NULL;//char KEY_VALID = FALSE;volatile uint8 KEY = NULL;volatile uint8 KEY_VALID = FALSE;volatile uint8 KEY_SHIFT = FALSE;//mtE//char CountdownTimerHandle;int long_timeout_count=0;void ButtonTimer(void);/*******************************************************************************   Function name : Button_Init**   Returns :       None**   Parameters :    None**   Purpose :       Initializes the five button pin******************************************************************************/void Button_Init(void){    // Init port pins    DDRB &= ~PINB_MASK;    PORTB |= PINB_MASK;    	DDRE &= ~PINE_MASK;    PORTE |= PINE_MASK;    // Enable pin change interrupt on PORTB and PORTE	PCMSK0 = PINE_MASK; 	PCMSK1 = PINB_MASK;	EIFR = (1<<PCIF0)|(1<<PCIF1);	EIMSK = (1<<PCIE0)|(1<<PCIE1);//	CountdownTimerHandle = Timer0_AllocateCountdownTimer();}// #pragma vector = PCINT0_vect// __interrupt void PCINT0_interrupt(void)SIGNAL(SIG_PIN_CHANGE0)// mtE{    PinChangeInterrupt();}// mtA// #pragma vector = PCINT1_vect// __interrupt void PCINT1_interrupt(void)// mtESIGNAL(SIG_PIN_CHANGE1){    PinChangeInterrupt();}/*******************************************************************************   Function name : PinChangeInterrupt**   Returns :       None**   Parameters :    None**   Purpose :       Check status on the joystick******************************************************************************/void PinChangeInterrupt(void){    uint8 buttons;    uint8 key;/*    Read the buttons:    Bit             7   6   5   4   3   2   1   0    ---------------------------------------------    PORTB           B   A       O    PORTE                           D   C    ---------------------------------------------    PORTB | PORTE   B   A       O   D   C    =============================================*/    buttons = (~PINB) & PINB_MASK;    buttons |= (~PINE) & PINE_MASK;    // Output virtual keys    if (buttons & (1<<BUTTON_A))        key = KEY_PLUS;    else if (buttons & (1<<BUTTON_B))        key = KEY_MINUS;    else if (buttons & (1<<BUTTON_C))        key = KEY_PREV;    else if (buttons & (1<<BUTTON_D))        key = KEY_NEXT;    else if (buttons & (1<<BUTTON_O))        key = KEY_ENTER;    else        key = KEY_NULL;    	    if(key != KEY_NULL)    {        if(gButtonTimeout)  // gButtonTimeout is set in the LCD_SOF_interrupt in LCD_driver.c        {			//gButtonLongTimeout = FALSE; // clear the hold down timer			//long_timeout_count=0;			            if (!KEY_VALID)            {                KEY = key;          // Store key in global key buffer				KEY_VALID = TRUE;            }						gButtonTimeout = FALSE;			        }    }else/*{ // make key only valid when released.	    if(gButtonTimeout)  // gButtonTimeout is set in the LCD_SOF_interrupt in LCD_driver.c        {	            if (!KEY_VALID)            {                KEY_VALID = TRUE;				KEY_SHIFT = FALSE;            }						gButtonTimeout = FALSE;			        }				}*/        EIFR = (1<<PCIF1) | (1<<PCIF0);     // Delete pin change interrupt flags   gPowerSaveTimer = 0;                // Reset the Auto Power Down timer    }/*******************************************************************************   Function name : getkey**   Returns :       The valid key**   Parameters :    None**   Purpose :       Get the valid key ******************************************************************************/char getkey(void){    uint8 k;    cli(); // mt: __disable_interrupt();    if (KEY_VALID)              // Check for unread key in buffer    {		k=KEY;        KEY_VALID = FALSE;		//if (KEY_SHIFT){		//	k += 8;		//	KEY_SHIFT = FALSE;	//	}		gButtonTimeout = FALSE;	//	gButtonLongTimeout = TRUE;    }    else        k = KEY_NULL;           // No key stroke available    sei(); // mt: __enable_interrupt();    return k;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -