您的位置:首页 > 其它

点亮LED(跑马灯实验和流水灯实验)

2017-12-13 11:08 351 查看
先看看原理图:





分析:

①LED0和LED1分别连接的是PF9和PF10;

②这个第二幅图,电源接一个电阻和一个发光二极管链接到地上!假如我们的MCU输出一个低电平信号给LED灯,电路是导通的!!假如是高电平,电路截止,因为高电平下,LED的信号会与VCC的抵消吧(这点我不是非常确定),而二极管一般都是有一个导通电压的,如果电压不够大,是不可以导通的

实验代码:



#include "stm32f4xx.h"

#include "led.h"

int main()

{
LED_Init();
while(1)
{
LED_liushui();
//LED_paoma();
}

}

/******************************************************************/



#include "led.h"

/*

函数功能:初始化LED灯

备注:
PF9------LED0 
PF10------LED1

*/

void LED_Init(void)

{
RCC->AHB1ENR |= 1 << 5;  //初始化GPIOF时
GPIOF->MODER &= ~(0X3 << 18);   //进行PF9清零操作
GPIOF->MODER &= ~(0X3 << 20);
//进行PF10清零操作
GPIOF->MODER |= (0X1 << 18);   //将PF9设置为输出模式
GPIOF->MODER |= (0X1 << 20);
//将PF10设置为输出模式

//配置成推挽输出
GPIOF->OTYPER &= ~(0X1 << 9);   //PF9
GPIOF->OTYPER &= ~(0X1 << 10);
//PF10

//根据原理图,可以知道,LED为低电平的时候才会亮,高电平会熄灭
GPIOF->ODR |= 1 << 9; //熄灭LED0
GPIOF->ODR |= 1 << 10;   //熄灭LED1

}

/*

函数功能:实现延时

形参:计数值

备注:这里还没有学习到定时器,所以先利用这个函数进行延时

*/

static void delay(u32 n)

{
while(n--)
{
;
}

}

/*

函数功能:实现跑马灯

*/

void LED_paoma(void)

{
GPIOF->ODR &= ~(1 << 9);   //点亮LED0
delay(10000000);
//演延时作用
GPIOF->ODR |= 1 << 9;    //熄灭LED0
delay(10000000);
GPIOF->ODR &= ~(1 << 10);  //点亮LED0
delay(10000000);
GPIOF->ODR |= 1 << 10;     //熄灭LED1
delay(10000000);

}

/**

函数功能:流水灯

*/

void LED_liushui(void)

{
GPIOF->ODR &= ~(1 << 9);   //点亮LED0
delay(10000000);
GPIOF->ODR &= ~(1 << 10);  //点亮LED0
delay(10000000);
GPIOF->ODR |= 1 << 10;     //熄灭LED1
delay(10000000);
GPIOF->ODR |= 1 << 9;    //熄灭LED0
delay(10000000);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: