基于for循环的呼吸灯

 1 #include "stm32f10x.h"
 2 #include "stm32f10x_gpio.h"
 3 //#include "led.h"
 4 #include "Breath_led.h"
 5 #define bbb 5000 
 6 
 7 /*
 8 定义三个无符号变量:
 9 i控制亮灭的时间
10 j控制亮灭的亮度变化   控制低电平的时间
11 K控制整个呼吸灯的时间
12 
13 讲解:总的时间为5000us
14                              bbb-j                                bbb(bbb-j)
15 1、高电平的时间5000us   低电平的时间为0         红灯最亮
16 3、高电平的时间4000us   低电平的时间为1000
17 4、高电平的时间3000us   低电平的时间为2000
18 4、高电平的时间2000us   低电平的时间为3000
19 5、高电平的时间1000us   低电平的时间为4000
20 6、高电平的时间0000us   低电平的时间为5000  红灯熄灭
21     以上是从最亮到熄灭的过程
22     
23     下面是最暗到亮的过程
24 1、高电平的时间0000us   低电平的时间为5000 红灯最亮
25 3、高电平的时间1000us   低电平的时间为4000
26 4、高电平的时间2000us   低电平的时间为3000
27 4、高电平的时间3000us   低电平的时间为2000
28 5、高电平的时间4000us   低电平的时间为1000
29 6、高电平的时间5000us   低电平的时间为0000  红灯熄灭
30     
31 
32 
33 
34 */
35 void led_red_init();
36 
37 void Breath_led()
38     {
39         led_red_init();//GPIO初始化
40             unsigned int i=0,j=0,k;
41     for(k=0;k<bbb;k++)//控制整个呼吸灯的时间
42             {
43                 GPIO_ResetBits(GPIOB,GPIO_Pin_5);//点亮红灯
44                 for(i=0;i<bbb-j;i++);//高电平的时间  一开始最亮
45                 
46                 GPIO_SetBits(GPIOB,GPIO_Pin_5);//熄灭红灯
47                 for(i=0;i<bbb-(bbb-j);i++);//给低电平的时间
48                 
49                     j++;//控制亮度的变化
50                 if(j==bbb)//当j低电平的时间等于5000时,说明已经快熄灭了
51                 {        
52                     //j=0;     //从零开始 
53                     
54                     for(k=0;k<bbb;k++)
55                     {
56                     j--;
57                     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
58                     for(i=0;i<bbb-j;i++);
59                     GPIO_SetBits(GPIOB,GPIO_Pin_5);
60                     for(i=0;i<bbb-(bbb-j);i++);
61                     }
62     
63                         
64                 }
65             }    
66 
67 }
68 void led_red_init()
69 {
70 
71     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
72     GPIO_InitTypeDef gpio;
73     gpio.GPIO_Mode=GPIO_Mode_Out_PP;
74     gpio.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;
75     gpio.GPIO_Speed=GPIO_Speed_50MHz;
76     GPIO_Init(GPIOB,&gpio);
77     
78     GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1);//默认为低电平
79     
80 }

 

转载于:https://www.cnblogs.com/kinson/p/8358180.html

以下是基于STM32的呼吸灯的代码示例: ```c #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #define LED_PIN GPIO_Pin_13 #define LED_GPIO GPIOC #define LED_RCC_GPIO RCC_APB2Periph_GPIOC void delay(uint32_t ms) { uint32_t i, j; for (i = 0; i < ms; i++) for (j = 0; j < 7200; j++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(LED_RCC_GPIO, ENABLE); GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LED_GPIO, &GPIO_InitStructure); while(1) { int i; for (i = 0; i < 100; i++) { GPIO_SetBits(LED_GPIO, LED_PIN); delay(i); GPIO_ResetBits(LED_GPIO, LED_PIN); delay(100 - i); } for (i = 100; i > 0; i--) { GPIO_SetBits(LED_GPIO, LED_PIN); delay(i); GPIO_ResetBits(LED_GPIO, LED_PIN); delay(100 - i); } } } ``` 该代码使用GPIOC的第13个引脚(即PC13)作为LED的控制引脚。在主函数中,我们首先初始化GPIOC的时钟(即LED_RCC_GPIO),并将PC13设置为输出模式(GPIO_Mode_Out_PP)。然后在一个无限循环中,使用for循环模拟呼吸灯的效果。我们使用delay函数来实现延迟,其中i控制LED变亮的时间,而100-i控制LED变暗的时间。在一个完整的循环中,LED的亮度会先从0逐渐增加到100,然后再逐渐减小回到0,从而实现呼吸灯的效果。 请注意,这个代码示例仅供参考,实际使用时可能需要进行适当修改才能适应不同的硬件环境和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值