Skocz do zawartości

Przycisk z wykorzystaniem systicka


olek623

Pomocna odpowiedź

Witam, tak jak w temacie chcę wykorzystać systicka przy przycisku tzn. aby uniknąć w while zmiany kilka razy wartości (np przy funkcji toggle zmianna może nastąpić kilka razy przy jednym wciśnięciu). Dlatego robię zmienną buttonczas, którą w momencie wciśnięcia ustawiam na 50 i systick liczy, jak skoczy zmienną flagową a ustawi na 1. Niestety mój program od razu przypisuje a=1 i cały program działa nieprawidłowo. Proszę o pomoc

 #include <stm32f0xx_rcc.h>
#include "stm32f0xx_gpio.h"

uint8_t buttonczas;
uint32_t time;
int a=0;

void init(void)
{
SystemInit();
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/1000);

}

void SysTick_Handler(void)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
{
	buttonczas=50;
}

if (buttonczas>0)
{
	buttonczas--;
}
else
{
	a=1;
}

}


void LED()
{

	GPIO_InitTypeDef GPIO_InitStructure;

	  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  GPIO_Init(GPIOC, &GPIO_InitStructure);
}


void PRZYCISK()
{
	GPIO_InitTypeDef MGPIO;


	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	MGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	MGPIO.GPIO_Mode = GPIO_Mode_IN;
	MGPIO.GPIO_OType = GPIO_OType_PP;
	MGPIO.GPIO_Speed = GPIO_Speed_50MHz;
	MGPIO.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(GPIOA, &MGPIO);

}



int main(void)
{
PRZYCISK();
LED();
init();

while(1)
   {

	if(a==1)
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_8);
		GPIO_ResetBits(GPIOC, GPIO_Pin_9 );
	}
	else
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_9);
		GPIO_ResetBits(GPIOC, GPIO_Pin_8 );

	}


   }
}
Link do komentarza
Share on other sites

Twój kod potrzebuje przebudowy, w ten sposób nie ma prawa zadziałać.

 if (buttonczas>0) 
   { 
       buttonczas--; 
   } 
   else 
   { 
       a=1; 
   } 

W tym miejscu jest powód dla którego odrazu przypisywana jest wartość a=1. Nie przypisujesz wartości początkowej dla zmiennej buttonczas, a nawet jeśli byś to zrobił to by i tak po chwili się wyzerowała. Dziwi mnie trochę, że to wogóle coś robi skoro te zmienne nie są typu volatile.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.