寄存器开发控制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(); 
    }
}
相关推荐
sramdram2 小时前
MCU微控制器OA打印机方案
单片机·嵌入式硬件·mcu·mcu微控制器
天天爱吃肉82183 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
科芯创展7 小时前
3.5A,60VIN,异步降压芯片,XZ1815
单片机·嵌入式硬件
茯苓gao7 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
浅止菌8 小时前
海思回归第二弹:瑞芯微的隐忧与对手的反击
嵌入式硬件
Kuakewei8888 小时前
PW2609A在2.6A负载下压差0.14V,温升较3A工况低11°C
单片机·嵌入式硬件
Zyed8 小时前
[FreeRTOS]Day7项目介绍
stm32·单片机·嵌入式硬件
xuxie9910 小时前
start7 电机闭环控制
单片机·嵌入式硬件
嵌入式-老费10 小时前
esp32开发与应用(播放wav音频文件)
嵌入式硬件
LCG元10 小时前
嵌入式开发踩坑排查实战:从 STM32 外设初始化到 Linux SPI 驱动的 15 类硬件疑难故障深度复盘
linux·stm32·单片机