Здравствуйте. Помогите решить проблему, есть задание, по каждому нажатию кнопки выполнять разную комбинацию миганий светодиодами.
1 нажатие - горит первый светодиод
2 нажатие - гаснет первый, загорается второй
3 нажатие - горят оба
4 нажатие - гаснут оба
В голове вроде понимаю как, но реализовать не могу. В этом деле совсем новичок.
Вот что у меня получилось.
CODE
#include "stm32F10x.h"
uint8_t n=0;
uint8_t bc=0;
uint8_t bs=0;
void InitAll(void){
RCC ->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC ->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOC ->CRH &= ~GPIO_CRH_MODE8;
GPIOC ->CRH |= GPIO_CRH_MODE8_1;
GPIOC ->CRH &= ~GPIO_CRH_CNF8;
GPIOC ->CRH &= ~GPIO_CRH_MODE9;
GPIOC ->CRH |= GPIO_CRH_MODE9_1;
GPIOC ->CRH &= ~GPIO_CRH_CNF9;
GPIOA ->CRL &= ~GPIO_CRL_CNF0;
GPIOA ->CRL |= GPIO_CRL_CNF0_0;
GPIOA ->CRL &= ~GPIO_CRL_MODE0;
return;
}
void sys(void) // Вроде от дребезга
{
if ((GPIOA->IDR&0x01)==1)
{
if (bc <5)
{
bc++;
}
else
{
bs=1;
}
}
else {
if (bc > 0)
{
bc--;
}
else
{
bs=0;
}
}
}
int main(void){
sys();
InitAll();
while(1)
{
if (bs==1)
{
n++;
}
switch (n) {
case 1:
GPIOC->BSRR = GPIO_BSRR_BR9;
GPIOC->BSRR = GPIO_BSRR_BS8;
break;
case 2:
GPIOC->BSRR = GPIO_BSRR_BR8;
GPIOC->BSRR = GPIO_BSRR_BS9;
break;
case 3:
GPIOC->BSRR = GPIO_BSRR_BS8;
GPIOC->BSRR = GPIO_BSRR_BS9;
break;
case 4:
GPIOC->BSRR = GPIO_BSRR_BR8;
GPIOC->BSRR = GPIO_BSRR_BR9;
break;
default:
n=0;
break;
}
}
}
Выручите пожалуйста.
Повторюсь, до этого ни разу не сталкивался с программированием, тем более с программированием микроконтроллеров, сильно не ругайте, лучше помогите. Заранее спасибо.
Сообщение отредактировал IgorKossak - Apr 22 2015, 14:06
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!