Разработка программы обработки событий
Автор: nisunka09 • Май 11, 2019 • Лабораторная работа • 1,051 Слов (5 Страниц) • 342 Просмотры
Разработка программы обработки событий
Рисунок заданного графа:
[pic 1]
[pic 2]
[pic 3][pic 4][pic 5][pic 6][pic 7][pic 8][pic 9][pic 10][pic 11][pic 12][pic 13][pic 14]
Листинг программы, реализующей алгоритм:
#include “stm32f10x.h”
#include “stm32f10x_gpio.h”
#include “stm32f10x_rcc.h”
int state=0;
int k=0;
int k_p=0;
int C_k=0;
int Q=0; //переменная, отвечает за кол-во нажатий кнопки
int V=0; //переменная, отвечает за кол-во секунд в течение горения светодиода
int i=0;
void TIM6_DAC_IRQHandler(void)
{
TIM->SR &=~ TIM_SR_UIF;
K=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
if (k= = 1 & k_p = = 0) Q=Q+1; момент нажатия кнопки. Сигнал сохраняется после ее отпускания. (Работа по принципу RS -триггера
k_p=k;
if (Q>0) C_k=C_k+1;
if (C_k= = 150)
{
if(Q = = 3)
{
state=1;
}
C_k=0;
Q=0;
}
Swith (state) // state - переменная состояния, нажатия кнопки
{
case 0; //светодиоды не горят
{
GPIO_WriteBit(GPIOC, GPIO_Pin_8, 0);
GPIO_WriteBit(GPIOC, GPIO_Pin_9, 0);
break;
}
case: 1 //PC8 и PC9 горят
{
GPIO_WriteBit(GPIOC, GPIO_Pin_9, 1);
GPIO_WriteBit(GPIOC, GPIO_Pin_8, 1);
V=V+1;
If (V = = 150) //период времени, в течение которого горят 3 секунды диоды
{
state = 2;
V=0;
}
break;
}
case 2: // PC8 мигает, PC9 не горит
{
GPIO_WriteBit(GPIOC, GPIO_Pin_8, 1);
GPIO_WriteBit(GPIOC, GPIO_Pin_9, 0);
for( i=0; i<0x10000; i++);
GPIO_WriteBit(GPIOC, GPIO_Pin_8, 0);
for( i=0; i<0x10000; i++);
V=V+1;
if( V = = 60) //период времен, в течение которого мигает 4 секунды Pin_8
{
state=3; //PC8 не мигает, PC9 мигает с частотой 2 раза меньшей
V=0;
}
break;
}
case 3;
}
GPIO_WriteBit(GPIOC, GPIO_Pin_9, 1);
GPIO_WriteBit(GPIOC, GPIO_Pin_9, 0);
...