资讯详情

【STM32学习笔记-LED呼吸灯】

STM学习笔记-点亮LED灯

文章目录

  • STM学习笔记-点亮LED灯
  • 一、呼吸灯原理
  • 二、呼吸灯代码
    • 1、main.c
    • 2、led.c
    • 3、led.h
  • 三、代码分析


一、呼吸灯原理

占空比:占空比是指高低电平所占时间的比LED照明和熄灭的时间比) 使用以下照明LED说明灯的原理

GPIO_SetBits(LEDPORT,LED1);  //LED高电平灯(1)delay_us(500);  GPIO_ResetBits(LEDPORT,LED1);  //LED灯为低电平(0)delay_us(500);  

上述代码的高低电平输出时间为500,占空比为1,输出结果为小灯常亮(见下图) 在这里插入图片描述 当我们将高电平输出时间降低到5时,代码如下:

GPIO_SetBits(LEDPORT,LED1);  //LED高电平灯(1)delay_us(5);  GPIO_ResetBits(LEDPORT,LED1);  //LED灯为低电平(0)delay_us(500);

此时占空比为1/100,小灯常亮,但输出亮度明显降低(见下图) 在这里插入图片描述 利用这个原理,我们可以在呼吸灯处制作一个呼吸灯

二、呼吸灯代码

1、main.c

#include  "stm32f10x.h"  //STM32头文件#include  "sys.h"#include  "delay.h"#include  "led.h"int  main  (void){     //主程序  //定义所需的变量  u8 MENU;  u16 t,i;  ///初始化程序  RCC_Configuration();  ///时钟设置  LED_Init();  //设置span>	MENU = 0;	t = 1;	//主循环	while(1){
     		//菜单0		if(MENU == 0){
      //变亮循环			for(i = 0; i < 40; i++){
     				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1				delay_us(t); //延时				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0				delay_us(501-t); //延时			}			t++;			if(t==500){
     				MENU = 1;			}		}		//菜单1		if(MENU == 1){
      //变暗循环			for(i = 0; i < 40; i++){
     				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1				delay_us(t); //延时				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0				delay_us(501-t); //延时			}			t--;			if(t==1){
     				MENU = 0;			}		}			}}

2、led.c

#include "led.h"void LED_Init(void){
      //LED灯的接口初始化	GPIO_InitTypeDef  GPIO_InitStructure; 	    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);           GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号(0~15或all)     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 	GPIO_Init(LEDPORT, &GPIO_InitStructure);			}

3、led.h

#ifndef __LED_H#define __LED_H #include "sys.h"//#define LED1 PBout(0)// PB0//#define LED2 PBout(1)// PB1 #define LEDPORT GPIOB //定义IO接口#define LED1 GPIO_Pin_0 //定义IO接口#define LED2 GPIO_Pin_1 //定义IO接口void LED_Init(void);//初始化 #endif

三、代码分析

	u8 MENU;	u16 t,i;

定义一个名为MUNE的8位无符号变量和分别名为t,i的16位无符号变量。变量含义详情如下:

数据类型 变量定义
u32 a 定义32位无符号变量a
u16 a 定义16位无符号变量a
u8 a 定义8位无符号变量a
vu32 a /定义易变的32位无符号变量a
vu16 a 定义易变的 16位无符号变量a
vu8 a 定义易变的 8位无符号变量a
uc32 a 定义只读的32位无符号变量a
uc16 a 定义只读 的16位无符号变量a
uc8 a 定义只读 的8位无符号变量a
if(MENU == 0){ //变亮循环	for(i = 0; i < 40; i++){		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1		delay_us(t); //延时		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0		delay_us(501-t); //延时	}	t++;	if(t==500){		MENU = 1;			}}

利用占空比让小灯变量(变暗则将变量t–)通过改变i小于的值控制呼吸灯的速度。

标签: 英国michell露点变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台