寄存器开发控制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(); 
    }
}
相关推荐
FreakStudio9 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484914 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼14 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi14 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展14 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司14 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑14 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习