реклама на сайте
подробности

 
 
> 4 нажатия - 4 действия. STM32F1. CMSIS.
EpoLLIa
сообщение Apr 22 2015, 13:19
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 22-04-15
Пользователь №: 86 341



Здравствуйте. Помогите решить проблему, есть задание, по каждому нажатию кнопки выполнять разную комбинацию миганий светодиодами.
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] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KnightIgor
сообщение Apr 23 2015, 06:35
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(EpoLLIa @ Apr 22 2015, 14:19) *
Здравствуйте. Помогите решить проблему, есть задание, по каждому нажатию кнопки выполнять разную комбинацию миганий светодиодами.
1 нажатие - горит первый светодиод
2 нажатие - гаснет первый, загорается второй
3 нажатие - горят оба
4 нажатие - гаснут оба

Имеется ввиду ПЕРВОЕ нажатие, потом последующее (ВТОРОЕ) нажатиЕ или ОДНОКРАТНОЕ нажатие, ДВУХКРАТНОЕ (тип-тип) нажатие, ТРОЙНОЕ и т.д.?
Go to the top of the page
 
+Quote Post
EpoLLIa
сообщение Apr 23 2015, 08:17
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 22-04-15
Пользователь №: 86 341



Цитата(KnightIgor @ Apr 23 2015, 00:35) *
Имеется ввиду ПЕРВОЕ нажатие, потом последующее (ВТОРОЕ) нажатиЕ или ОДНОКРАТНОЕ нажатие, ДВУХКРАТНОЕ (тип-тип) нажатие, ТРОЙНОЕ и т.д.?

Первое, последующее (второе), и т.д. С этой задачей я уже справился, всё работает. Теперь хочу мигание светодиода сделать через SysTick.
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 23 2015, 08:20
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(EpoLLIa @ Apr 23 2015, 12:17) *
Первое, последующее (второе), и т.д. С этой задачей я уже справился, всё работает. Теперь хочу мигание светодиода сделать через SysTick.


Так расскажите сообществу как побороли дребезг


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016