如何编写STM32控制LED反转C程序

如题所述

第1个回答  2015-02-25
先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;
第2个回答  2015-02-24
流水灯?
第3个回答  推荐于2016-11-06
/*****************主要的用户自己编写的文件*********************/
/**
***********************************************************************
* @file : main.c
* @author : xr
* @date : 2014年5月14日08:23:25
* @version : V1.0
* @brief : 采用轮询方式检测按键 STM32F103VE T6 MCU
***********************************************************************
* @attention
* 实验平台 : 野火ISO-MINI-STM32开发板
* 实验现象 : 按下按键K2,实现LED1小灯的亮灭反转
* 按下按键K3,实现LED2小灯的亮灭反转
***********************************************************************
*/
#include "stm32f10x.h" /* 上帝之手 STM32库头文件 */
#include "led.h"
#include "key.h"

/**
* @brief : 主函数
* @param : 无
* @retval : 无
*/
int main(void)
{
ConfigLed(); /* 初始化LED控制端口 */
ConfigKey(); /* 初始化按键控制端口 */

LED1( ON ); /* 开始时点亮LED1 */
LED2( ON ); /* 开始时点亮LED2 */

while (1)
{
/* add your codes ^_^ */
/* 检测按键K2是否按下 */
if ( KeyScan( GPIOA, GPIO_Pin_0 ) == KEY_ON )
{
/* LED1反转 读取GPIOB 0端口位的值并用1减去之后再写入此位即LED1的控制位 */
GPIO_WriteBit( GPIOB, GPIO_Pin_0, (BitAction)(1 - GPIO_ReadOutputDataBit( GPIOB, GPIO_Pin_0 )));
}
/* 检测按键K3是否按下 */
if ( KeyScan( GPIOC, GPIO_Pin_13 ) == KEY_ON )
{
/* LED2反转 */
GPIO_WriteBit( GPIOC, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit( GPIOC, GPIO_Pin_4 )));
}
}
}

/**********************************************END OF FILE******************/

/**
***************************************************************
* @file led.h
* @author xr
* @date 2014年5月17日13:00:58
* @brief LED小灯驱动头文件
***************************************************************
* @attention
* 实验平台 : 野火ISO-MINI开发板
* LED小灯硬件连接 : -------------------
* | LED1 ---- PB0 |
* | LED2 ---- PC4 |
* | LED3 ---- PC3 |
* -------------------
***************************************************************
*/
#ifndef _LED_H_
#define _LED_H_

#include "stm32f10x.h" /* 使用stm32库 */

/* 控制小灯: 1 灭 0 亮 */
#define ON 0
#define OFF 1

/* 带参宏 */
#define LED1(a) if (a) \
GPIO_SetBits( GPIOB, GPIO_Pin_0 ); \
else \
GPIO_ResetBits( GPIOB, GPIO_Pin_0 )
#define LED2(a) if (a) \
GPIO_SetBits( GPIOC, GPIO_Pin_4 ); \
else \
GPIO_ResetBits( GPIOC, GPIO_Pin_4 )
#define LED3(a) if (a) \
GPIO_SetBits( GPIOC, GPIO_Pin_3 ); \
else \
GPIO_ResetBits( GPIOC, GPIO_Pin_3 )

void ConfigLed(void);

#endif /* _LED_H_ */
/*******************************************************END OF FILE*****/
/**
***************************************************************
* @file led.c
* @author xr
* @date 2014年5月17日13:00:58
* @brief LED小灯驱动
***************************************************************
* @attention
* 实验平台 : 野火ISO-MINI开发板
* LED小灯硬件连接 : -------------------
* | LED1 ---- PB0 |
* | LED2 ---- PC4 |
* | LED3 ---- PC3 |
* -------------------
***************************************************************
*/
#include "led.h"

/**
* @brief : 配置LED小灯的GPIO端口
* @param : 无
* @retval : 无
*/
void ConfigLed(void)
{
GPIO_InitTypeDef GPIO_InitStruct; /* 定义GPIO_InitTyPeDef结构体变量 */

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE ); /* 开启APB2总线上的GPIOB和GPIOC时钟 */

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; /* 设置引脚为通用强推挽输出 */
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; /* 设置输出为50MHZ */

/* 调用库函数初始化GPIOB端口 */
GPIO_Init ( GPIOB, &GPIO_InitStruct );
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; /* 选择3,4引脚 */
/* 调用库函数初始化GPIOC的34引脚 */
GPIO_Init (GPIOC, &GPIO_InitStruct );

/* 关闭LED */
GPIO_SetBits ( GPIOB, GPIO_Pin_0 );
GPIO_SetBits ( GPIOC, GPIO_Pin_4 | GPIO_Pin_3 );
}
/*************************************************END OF FILE***********/
/**本回答被网友采纳

如何编写STM32控制LED反转C程序
先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;

利用stm32的单片机完成下面的要求,程序该怎么写,用C语言
用两个定时器分别对两个LED灯闪烁,KEY1和KEY2要设置为外部中断输入,当进入中断时KEY1_DANG或KEY2_DANG指向下一个档位,并且发送串口。给你提供点思路。void main(){ while(1){ if(key1_dang==0x01)中断定时1设置为0.2秒 if(key1_dang==0x02)中断定时1设置为0.4秒 if(key1_dang==0x...

用单片机控制LED灯的亮灭,怎么写程序?
1.准备材料:您需要准备以下材料:单片机(如Arduino、STM32等)LED灯 电阻(用于限流,防止LED过电流损坏)连接线 2.连接电路:将LED灯与单片机连接起来。一般情况下,将LED的正极连接到单片机的一个GPIO引脚,将LED的负极连接到电阻,然后将电阻的另一端连接到单片机的地(GND)引脚。确保连接牢固。3....

stm32输出pwm,怎么控制直流电机的正反转?
反转时,情形相反,一个输出端口保持低电平,另一个端口控制PWM信号的高电平。通过将PWM信号设置为复用IO口,可以视为普通IO口输出低电平。调节PWM的占空比能够控制IO口电压的持续变化,进而控制外设的功率,实现对直流电机转速的快慢调节。注意事项:1、STM32具有多路PWM信号输出能力。每个定时器的输出引脚...

这一段程序想实现一个按键按一下,LED就常亮,再按一下,LED就常灭。可以...
你好,上述程序可以满足你说的要求,按键按下抬起的操作可以触发一次 GPIO Pin_1 的状态的读取,你的程序其实就是将此口的状态反转。读取之后用了一个if else 的判断,其实这四行可以直接用一句取反的函数代替,估计是叫invert或者switch或者toggle之类的。望采纳。

stm32输出pwm,怎么控制直流电机的正反转?
PWM信号只是控制信号,想要控制电机驱动,还需要驱动电路,比如H桥、驱动芯片等。正装是一个输出控制PWM信号,另一个输出低电平。反转是一个输出低电平,另一个输出控制PWM,设置成复用就当成普通的IO口,输出低电平。通过调节PWM的占空比就能调节IO口上电压的持续性变化,因此也能够控制外设的功率进行持续...

在一个 STM32 点亮 LED 的程序中,部分代码如下?
①配置所需的GPIO管脚,也就是PA2和PA3。②从程序来看,高电平点亮,低电平熄灭。

【代码】正点原子STM32F103ZET6开发板使用按键切换闪烁灯,附详细注释...
开发板选用正点原子精英STM32F103ZET6,搭配ST-LINK调试器,使用STM32 Cube IDE 1.8.0进行开发。程序设计基于C语言与HAL库。实现功能为:在主函数中初始化HAL库,启动B E组时钟,并对控制LED的PB5 PE5引脚进行初始化。观察MCU电路图,LED0与PB5引脚连接,LED1与PE5引脚连接,控制LED亮灭需调整PB...

stm32中源程序I\/o口接LED负极,如果我想要让I\/o接Led正极怎么改呢?
对于STM32来说,用KEIL开发工具,采用C语言编写源程序,找到控制LED的函数或语句,在函数或者语句中中增加取反操作,比如原来置1的,改为置0,原来置0的改为置1。把涉及到的所有端口逻辑修改正常,然后运行调试。另外,硬件设计上也要考虑端口带负载能力,当LED电流较大时,就不能直接用端口驱动,需要...

单片机的led灯一灭一亮,怎么实现?
1. 首先,连接 LED 灯到单片机的输出引脚上,确保连接正确。2. 编写控制 LED 灯的代码,可以使用 C 语言等编程语言。以下是一个示例代码,使用 Arduino IDE 编写:3. 在上述代码中,首先定义了 LED 连接的引脚(这里使用引脚 13),然后在 `setup()` 函数中将该引脚设置为输出模式。在 `loop()`...

相似回答