点亮LED(跑马灯实验和流水灯实验)
2017-12-13 11:08
351 查看
先看看原理图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/05/b08d5bdbefceaba4ba72de10c83a9a35)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/05/bc53180de85d0838690c34235beb9c03)
分析:
①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);
}
分析:
①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);
}
相关文章推荐
- (一)GPIO 编程实验 LED 流水灯控制
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- tiny6410裸机实验第2章--------------点亮LED灯(原理和代码分析)
- 控制GPIO, 点亮led,实现跑马灯
- 【iCore1S 双核心板_ARM】例程十:SYSTICK定时器实验——定时点亮LED
- 第十九节:依次逐个点亮LED之后,再依次逐个熄灭LED的跑马灯程序。
- Tiny4412使用汇编点亮LED,实现流水灯效果
- mini2440 led流水灯实验
- 一步步点亮LED6_再难一点的流水灯效果
- NIOS II 学习第一天:LED流水灯实验中诸多困惑的解决方法
- [Embedded] [FL2440] ADS实验三:LED跑马灯:增加了一个程序启动声音 (运行程序时beep一声)
- 裸板点亮LED流水灯源代码分析(含启动代码和C文件)
- 1.2.第一个实验——点亮LED灯
- 2013-10-06 实验之Led跑马灯
- 【iCore3 双核心板】例程十二:通用定时器实验——定时点亮LED
- STM32_GPIO之点亮LED实验
- STM32F103C8T6点亮LED灯(流水灯)(IO口的初始复用功能)
- 【iCore1S 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- LED实验&&I/O口实验--将 P0 作为输出口,连接 8 个 LED,编写程序,使 LED 循环点亮。(LED1 亮,其余灭->ED2 亮,其余灭……,如此循环 5 次后,进行全灭-全亮