嵌入式进阶——LED灯

🎬 秋野酱:《个人主页》

🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

原理图

控制分析

S8550 PNP 特性

B: base, 基极。(理解:基于/根据 这个条件做什么事情)

E: emitter, 发射极。(理解:发射端)

C: collector, 集电极。(理解:收集电的区域,用电的器件在这个区域)

PNP型三极管,E极为输入端,C极为输出端,B极为控制端

B极 为高电平时,E极到C极的电路截止,无法导通。

B极 为低电平时,E极到C极的电路打开,正常导通。

开关控制

通过引脚 LED_SW来控制 B极是否为高低电平来控制是否导通

LED控制

通过LED的负极控制灯是否亮。如果负极为低则亮,负极为高则不亮。

功能设计

点亮LED

点亮灯泡1

几种GPIO模式

  1. 准双向口,也称为弱上拉模式,可做输入和输出操作,电流小,通常作为信号功能使用
  2. 推挽输出,也称为强上拉模式,作为输出操作,电流持续,作为功率输出
  3. 开漏输出,可做输入和输出操作,需要外部提供上拉电阻
  4. 高阻输入,电流无法输入,但是可以外部输入电平会拉高或拉低其位寄存器,用于数模转换

三极管特点

三极管是电流控制的器件,如果需要三极管导通或是关闭,需要持续给B极输入电流。(相对于mos管而言,三极管功耗较大,mos管耗电要少很多)

示例代码

csharp 复制代码
#include "config.h"
#include "GPIO.h"
#include "delay.h"

void	GPIO_config(void)
{
	GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义
	GPIO_InitStructure.Pin  = GPIO_Pin_7;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_PullUp;		//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);	//初始化
	
	GPIO_InitStructure.Pin  = GPIO_Pin_5;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_OUT_PP;		//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P4,&GPIO_InitStructure);	//初始化
}


int main() {
	//GPIO 初始化	
	GPIO_config();
	
	// led 开关打开
	P45 = 0;
	
	while(1) {
		P27 = 1;
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
		P27 = 0;
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
	}
	
	return 0;
}

走马灯

实现灯的顺序点亮

csharp 复制代码
#include "config.h"
#include "GPIO.h"
#include "delay.h"

#define LED1		P27
#define LED2		P26
#define LED3		P15
#define LED4		P14
#define LED5		P23
#define LED6		P22
#define LED7		P21
#define LED8		P20
#define LED_SW	P45

void GPIO_config(void) {
	GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义
	GPIO_InitStructure.Pin  = GPIO_Pin_5;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_OUT_PP;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P4, &GPIO_InitStructure);//初始化
	
	GPIO_InitStructure.Pin  = GPIO_Pin_4 | GPIO_Pin_5;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P1, &GPIO_InitStructure);//初始化
	
	GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P2, &GPIO_InitStructure);//初始化
}


int main() {
	int i;
	GPIO_config();
	
	EA = 1;
	
	LED_SW = 0;
	while(1) {
		for(i = 0;i < 8;i++) {
			LED1 = i == 0 ? 0 : 1;
			LED2 = i == 1 ? 0 : 1;
			LED3 = i == 2 ? 0 : 1;
			LED4 = i == 3 ? 0 : 1;
			LED5 = i == 4 ? 0 : 1;
			LED6 = i == 5 ? 0 : 1;
			LED7 = i == 6 ? 0 : 1;
			LED8 = i == 7 ? 0 : 1;
			delay_ms(100);
		}
		for(i = 7;i >= 0;i--) {
			LED1 = i == 0 ? 0 : 1;
			LED2 = i == 1 ? 0 : 1;
			LED3 = i == 2 ? 0 : 1;
			LED4 = i == 3 ? 0 : 1;
			LED5 = i == 4 ? 0 : 1;
			LED6 = i == 5 ? 0 : 1;
			LED7 = i == 6 ? 0 : 1;
			LED8 = i == 7 ? 0 : 1;
			delay_ms(100);
		}
	}
}
相关推荐
CODECOLLECT1 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen1 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠4 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_4 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技6 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计7 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报8 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业8 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能8 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn8 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件