如何利用单片机控制一颗LED 灯闪烁

    点亮一颗LED灯是我们学习单片机入门的开始,今天的目标是利用单片机控制LED灯闪烁,下图是protues 仿真电路图,图中单片机左边为系统的时钟电路和复位电路,右边是LED 灯电路。

 下面是实现程序:首先定义了led=P2^0口为输出端口,用来控制LED 灯,LED 灯的阴极是与单片机连接的,因此引脚必须输出低电平才能点亮LED 灯。在主函数main 的while循环体中,我们先把输出引脚设置为低电平,即led=0;点亮LED 灯,然后调用延时函数delay();对亮灯进行延时,然后再把输出引脚置为高电平,即led=1;熄灭LED灯,调用延时函数对熄灯延时。由于while语句的条件为1,即判断条件永远为真,所以程序会不停的循环执行while语句,这样就可以实现LED灯的闪烁。

#include<reg51.h>//包含头文件
sbit led=P2^0;//定义引脚,用来连接LED灯
void delay()//延时函数,实现对LED 灯的亮灭延时控制
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j<5;j++);
}
void main(void)
{
while(1){
led=0;//点亮LED 灯
delay();//延时
led=1;//熄灭LED灯
delay();//延时
}
}

  • 15
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
使用 STM32G431 单片机通过 PWM 模块来控制 LED 闪烁,可以按照以下步骤进行: 1.连接 LED 单片机的 GPIO 引脚上。需要注意,STM32G431 单片机的 GPIO 引脚具有多种复用功能,需要在代码中设置引脚复用功能为 PWM 输出模式。 2.初始化 PWM 模块。可以使用 STM32G431 的 CubeMX 软件生成初始化代码,或者手动编写初始化代码。需要设置 PWM 的时钟源、分频系数、定时器计数模式、PWM 模式、PWM 通道等参数。 3.设置 PWM 输出信号的占空比和周期。可以根据需要设置不同的占空比和周期来控制 LED 的亮度和闪烁频率。在代码中可以使用 TIM_SetCompare 函数来更新 PWM 的占空比。 4.在主循环中更新 PWM 的占空比,以实现 LED 闪烁效果。可以使用 delay 函数或者定时器中断来控制闪烁频率。 下面是一个简单的代码示例,用于控制 LED 闪烁: ```c #include "stm32g4xx.h" void PWM_Init(void) { TIM_HandleTypeDef htim; TIM_OC_InitTypeDef sConfigOC; htim.Instance = TIM1; htim.Init.Prescaler = 0; htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = 9999; htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 5000; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1); } int main(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO 初始化 */ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* PWM 初始化 */ PWM_Init(); while (1) { for (int i = 0; i < 10000; i++) { TIM1->CCR1 = i; //更新 PWM 占空比 HAL_Delay(10); //延时 } for (int i = 10000; i > 0; i--) { TIM1->CCR1 = i; //更新 PWM 占空比 HAL_Delay(10); //延时 } } return 0; } ``` 在这个示例中,我们使用了 STM32G431 单片机的 TIM1 PWM 模块来控制 LED 闪烁。我们设置了 PWM 的周期为 10000,占空比从 0 到 10000,以 10ms 的间隔逐渐增加和减少。这样 LED 就会以一定的频率闪烁,并且亮度也会随着占空比的改变而发生变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值