Загрузка данных


#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"

#define LED1          PORT_Pin_0
#define Button_select PORT_Pin_1

static PORT_InitTypeDef PortInit;

/* Светодиод PB0 */
void init_leds(void)
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);

    PORT_StructInit(&PortInit);
    PortInit.PORT_Pin   = LED1;
    PortInit.PORT_OE    = PORT_OE_OUT;
    PortInit.PORT_FUNC  = PORT_FUNC_PORT;
    PortInit.PORT_MODE  = PORT_MODE_DIGITAL;
    PortInit.PORT_SPEED = PORT_SPEED_FAST;

    PORT_Init(MDR_PORTB, &PortInit);
}

/* Кнопка PE1 */
void init_button(void)
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTE, ENABLE);

    PORT_StructInit(&PortInit);
    PortInit.PORT_Pin   = Button_select;
    PortInit.PORT_OE    = PORT_OE_IN;
    PortInit.PORT_FUNC  = PORT_FUNC_PORT;
    PortInit.PORT_MODE  = PORT_MODE_DIGITAL;
    PortInit.PORT_SPEED = PORT_SPEED_FAST;
    PortInit.PORT_PULL_UP = PORT_PULL_UP_ON;

    PORT_Init(MDR_PORTE, &PortInit);
}

/* Простая задержка */
void delay_loop(uint32_t t)
{
    while (t--)
    {
        __NOP();
    }
}

int main(void)
{
    uint8_t PWM_Counter = 0;
    uint8_t PWM_A = 0;
    uint8_t PWM_B = 40;

    uint8_t btn_old_state = 1;
    uint8_t btn_state = 1;

    init_leds();
    init_button();

    while (1)
    {
        btn_state = PORT_ReadInputDataBit(MDR_PORTE, Button_select);

        /* Для кнопки с подтяжкой вверх:
           не нажата = 1
           нажата = 0
        */
        if (btn_old_state == 1 && btn_state == 0)
        {
            PWM_A++;
            if (PWM_A >= PWM_B)
            {
                PWM_A = 0;
            }
        }

        btn_old_state = btn_state;

        if (PWM_Counter >= PWM_B)
        {
            PWM_Counter = 0;
            PORT_SetBits(MDR_PORTB, LED1);
        }
        else if (PWM_Counter == PWM_A)
        {
            PORT_ResetBits(MDR_PORTB, LED1);
            PWM_Counter++;
        }
        else
        {
            PWM_Counter++;
        }

        delay_loop(500);
    }
}