如何编写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***********/
/**本回答被网友采纳
相似回答