STM32 LED循环点亮

本文介绍使用STM32F103芯片控制四个LED的不同编程方法,包括直接控制码操作、循环置位复位以及组合使用GPIO函数等技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4个LED采用共阳极接法,其阴极接在STM32F103芯片的PB8,PB9,PB10和PB11引脚上

 如图所示

下面是代码的实现,和数学一样实现一个目的代码可以有很多种编程方法,下面列举3个

第一种方法

#include "stm32f10x.h"
uint16_t temp,i;
void Delay(unsigned int count)               //延时函数
{
    unsigned int i;
    for(;count!=0;count--)
    {
        i=5000;
        while(i--);
    }
}
void main(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 		//使能GPIOB时钟
		GPIO_InitStructure.GPIO_Pin = 
        GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;              //PB8-PB11引脚配置
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
		GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB8-PB11
        while(1)                
        {
            temp=0x0100;                   //设置初始控制码
            for(i=0;i<4;i++)
            {
                GPIO_Write(GPIOB,~temp);       //向GPIOB口写点亮LED的控制码
                Delay(100);
                temp=temp<<1;           //上一位控制码左移一位,获得下一个控制码
            }                                 
        }
}

代码说明:“GPIO_Write(GPIOB,~temp);”语句将初始控制码取反后,从GPIOB口输出,使得PB8为低电平,点亮D1,其他点位为高电平;然后延时一段时间;让控制码左移一位,获取下一个控制码;以此类推,就实现了LED循环点亮的效果了

第二种方法

               //这一段程序与上面的while(1)实现的效果是一样的
while(1)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);      //PB8输出低电平,D1点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);      //PB9输出低电平,D2点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_10);     //PB10输出低电平,D3点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_11);     //PB11输出低电平,D4点亮
    Delay(100);
}

代码说明:GPIO_SetBits()函数可以同时对多个I/O口进行置位,这样也可以实现LED循环点亮 

第三种方法

             //这一段程序与上面的while(1)实现的效果是一样的
while(1)                
{
     temp=0x0100;                   //设置初始控制码
     for(i=0;i<4;i++)
     {
          GPIO_SetBits(GPIOB,0x0FFFF);       //GPIOB口输出高电平,4个LED熄灭
          GPIO_ResetBits(GPIOB,temp);        //控制码对应的GPIOB口引脚上的LED点亮
          Delay(100);
          temp=temp<<1;           //上一位控制码左移一位,获得下一个控制码
      }                                 
}

代码说明:使用for语句 ,比较简单,控制几个LED灯就让for循环几次即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值