流水灯

–led.h

#ifndef __Led_h
#define __Led_h

#define  BITBANDADDR(addr,n)   ((addr & 0xF0000000) + 0x2000000 + ((addr & 0xFFFFF) << 5) + (n << 2))
#define  MEMACCESS(addr)         (*((volatile unsigned long *)addr))
#define  BIT_ADDR(addr,n)      (MEMACCESS(BITBANDADDR(addr,n)))
#define  GPIOE_ODR_ADDR        (GPIOE_BASE + 0x0C)
/*GPIOE 的 ODR 偏移量为 0x0c*/
#define  GPIOE_IDR_ADDR        (GPIOE_BASE + 0x08) 
/*GPIOE 的 IDR 偏移量为 0x08*/
#define  PEout(n)               BIT_ADDR(GPIOE_ODR_ADDR,n)
#define  PEin(n)                BIT_ADDR(GPIOE_IDR_ADDR,n)
//位代操作,直接操作位

#define  LED1_ON       (GPIOE->ODR &= 0xFEFF)   
//   GPIO_ResetBits(GPIOE,GPIO_Pin_8)
#define  LED1_OFF      (GPIOE->ODR |= 0x0100)  
//   GPIO_SetBits(GPIOE,GPIO_Pin_8)
#define  LED2_ON       (GPIOE->ODR &= 0xFDFF)  
//   GPIO_ResetBits(GPIOE,GPIO_Pin_9)
#define  LED2_OFF      (GPIOE->ODR |= 0x0200)   
//   GPIO_SetBits(GPIOE,GPIO_Pin_9)
#define  LED3_ON       (GPIOE->ODR &= 0xFBFF)   
//   GPIO_ResetBits(GPIOE,GPIO_Pin_10)
#define  LED3_OFF      (GPIOE->ODR |= 0x0400)   
//   GPIO_SetBits(GPIOE,GPIO_Pin_10)

#define  LED1         PEout(8)
#define  LED2         PEout(9)
#define  LED3         PEout(10)
#define  LED4         PEout(11)
#define  LED1_IN      PEin(8)
#define  LED2_IN      PEin(9)
#define  LED3_IN      PEin(10)
#define  LED4_IN      PEin(11)
//位代直接操作位上面的小灯泡

void Led_Init(void);
void Led_FlowWater(void);
void Led_breath(void);
void delay(int);
void Led_FlowWater_PEout(void);
#endif

–led.c

#include <stdio.h>
#include "stm32f10x.h"
#include "delay.h"
#include "Led.h"

#define  T  200

static  int i = 0;
static  int j = 0;
void Led_Init(void)
{
    RCC->APB2ENR |= 0x0040;  
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    GPIOE->CRH = (GPIOE->CRH&0xFFFF0000)|0x00003333;
    //GPIO_InitTypeDef  GPIO_InitStructure;
    //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  //GPIO_Init(GPIOE,&GPIO_InitStructure);
}

void Led_FlowWater(void) //流水灯
{
    LED1_ON   ;
    LED2_OFF  ;
    LED3_OFF  ;
    delay(5);

    LED1_OFF  ;     
    LED2_OFF  ;
    LED3_ON   ;
    delay(5);   

    LED1_OFF  ;
    LED2_ON   ; 
    LED3_OFF  ;
    delay(5);

}

void Led_breath(void)//呼吸灯
{
    int time;
    GPIOE->CRH = (GPIOE->CRH&0xFFFFF000)|0x00000003;
    //GPIOE的高8位的8、9、10端口置0,然后推挽输出频率为50HZ(3 : 0011);
    for( time = 1 ; time < T ; time += 1)
    {
      LED1_ON;
            delay(time);
          LED1_OFF;
            delay( T - time);
    }
    for( time = T ; time > 0 ; time -= 1)
    {
      LED1_ON;
            delay(time);
          LED1_OFF;
            delay( T - time);
    }
}

void delay(int ms)
{
    for( i = 0 ; i < 100 ; i++)
        for(j = 0 ; j < ms ; j++);
}

void Led_FlowWater_PEout(void)
{
    LED1 = 0 ;
    delay(5000);
    LED1 = 1 ;
    delay(5000);
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值