寄存器开发控制LED

利用STM32系列开发板与计算机Keil编程设计,载入程序以实现目标:

LED灯闪烁模式自动轮换------模式1:流水灯从左到右,从右到左依次闪烁三次

模式2:全部流水灯闪烁五次

模式3:流水灯编号1、3与流水灯编号2、4,依次闪烁三次

模式4:"流水灯1->流水灯4->流水灯2->流水灯3"依次点亮,循环四次

简单提供代码思路如下:

cpp 复制代码
#include "stm32f4xx.h" 

void delay_500ms(void)
{
       volatile unsigned int i, j;
    for(i = 0; i < 8400; i++)
    {
        for(j = 0; j < 1000; j++);
    }
}

void delay(void)
{
    unsigned int i,j=4000;
    while(j--)
    {
        for(i=0;i<200;i++);
    }
}

void LED_Init(void)
{
        RCC->AHB1ENR |= (1<<4);
    
        GPIOE->MODER &= ~(0xFF << (2*2));
    GPIOE->MODER |= (0x55 << (2*2));
    
       GPIOE->OTYPER &= ~(0x3C);
    
       GPIOE->OSPEEDR |= (0x55 << (2*2));
    
      GPIOE->PUPDR &= ~(0xFF << (2*2));
}

void LED_Set(unsigned char leds)
{
    GPIOE->ODR = (GPIOE->ODR & ~0x3C) | ((leds & 0x0F) << 2);
}

void mode_flow_light(void)
{
    unsigned char i, j;
    unsigned char led_pattern[4] = {0x1, 0x2, 0x4, 0x8};
    
    for(j=0; j<3; j++)
    {
               for(i=0; i<4; i++)
        {
            LED_Set(led_pattern[i]);
            delay_500ms();        }
        
             for(i=0; i<4; i++)
        {
            LED_Set(led_pattern[3-i]);
            delay_500ms();         }
    }
}

void mode_all_blink(void)
{
    unsigned char i;
    
    for(i=0; i<5; i++)
    {
        LED_Set(0x0F); 
        delay_500ms(); 
        LED_Set(0x00); 
        delay_500ms(); 
    }
}

void mode_13_24_blink(void)
{
    unsigned char i;
    
    for(i=0; i<3; i++)
    {
               LED_Set(0x05);
        delay_500ms(); 
        
              LED_Set(0x00);
        delay_500ms();
        
               LED_Set(0x0A);
        delay_500ms(); 
        
              LED_Set(0x00);
        delay_500ms(); 
    }
}

void mode_sequence_light(void)
{
    unsigned char i, j;
    unsigned char sequence[4] = {0x1, 0x8, 0x2, 0x4}; 
    
    for(j=0; j<4; j++)
    {
        for(i=0; i<4; i++)
        {
            LED_Set(sequence[i]);
            delay_500ms(); 
        }
        LED_Set(0x00);         delay_500ms();     }
}

int main(void)
{
    unsigned char current_mode = 0;
    
       LED_Init();
    
      LED_Set(0x00);
    
    while(1)
    {
        switch(current_mode)
        {
            case 0:
                mode_flow_light();                  
 break;
                
            case 1:
                mode_all_blink();                  
 break;
                
            case 2:
                mode_13_24_blink();                 
 break;
                
            case 3:
                mode_sequence_light();                
 break;
        }
        
        
        current_mode = (current_mode + 1) % 4;
        
        LED_Set(0x00); 
        delay_500ms(); 
        delay_500ms(); 
    }
}
相关推荐
清风66666621 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm1 天前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu1 天前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客1 天前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭1 天前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽1 天前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊1 天前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头1 天前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭1 天前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗1 天前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件