51单片机呼吸灯

利用定时器0实现脉冲产生,通过改变占空比来调节亮度的变化。代码大体思路没问题,可能局部小瑕疵。
#include “reg52.h”

typedef unsigned int u16;
typedef unsigned char u8;

#define LED P2

void delay(u16 i)
{
while(i–);
}

void Timer0Init()
{
TMOD|=0X01;
TH0=0XFC;
TL0=0X18;
ET0=1;
EA=1;
TR0=1;
}

void main()
{
Timer0Init();
while(1);
}

void Timer0() interrupt 1
{
static u16 out, light;
static u16 i;

TH0=0XFC;	  
TL0=0X18;
i++;
if(i==1000)    //1s
{
	 i=0;
	 
	 for(light=0;light<=500;light++)
	{  
	   
		out=500-light;
		
		LED=0xff;
		delay(out);
		
		LED=0x00;
		delay(light);
	}
	
	for(out=0;out<=500;out)
	{
	   
		bright_time=500-out;
		
		LED=0x00;
		delay(light);
		
		LED=0xff;
		delay(out);
	}
}	

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机呼吸灯的实现是通过PWM(脉宽调制)技术来实现的[^1]。下面是配置51单片机呼吸灯PWM的步骤: 1. 配置P_SW2寄存器:将最高位EAXFR置1,允许访问XFR寄存器。 2. 选择PWM0的时钟为系统时钟:通过设置PWM0T1寄存器的CLKDIV位来选择时钟源。 3. 初始化PWM0模块:设置PWM0T1寄存器的PWM0T1EN位为1,使得可以驱动PWM0模块。 4. 配置PWM0的工作模式:设置PWM0T1寄存器的PWM0T1MD位来选择工作模式,例如选择自动重载模式。 5. 配置PWM0的周期和占空比:设置PWM0T1寄存器的PWM0T1PR和PWM0T1DR位来设置周期和占空比的值。 6. 启动PWM0:设置PWM0T1寄存器的PWM0T1RUN位为1,启动PWM0。 下面是一个示例代码,演示了如何在51单片机上实现呼吸灯效果的PWM控制: ```c #include <reg52.h> sbit PWM0 = P1^0; // PWM0输出引脚 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i = 0; i < t; i++) for(j = 0; j < 125; j++); } void main() { unsigned int i; P_SW2 = 0x80; // 配置P_SW2寄存器,允许访问XFR寄存器 PWM0T1 = 0x00; // 选择PWM0的时钟为系统时钟 PWM0T1 |= 0x01; // 初始化PWM0模块 PWM0T1 |= 0x10; // 配置PWM0的工作模式为自动重载模式 while(1) { for(i = 0; i < 100; i++) // 呼吸灯效果,占空比从0增加到100 { PWM0T1DR = i; // 设置PWM0的占空比 delay(10); // 延时 } for(i = 100; i > 0; i--) // 呼吸灯效果,占空比从100减小到0 { PWM0T1DR = i; // 设置PWM0的占空比 delay(10); // 延时 } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值