单片机模拟pwm调速或调光

本文介绍了一个基于51单片机的PWM信号控制程序。通过调节按键可以动态改变PWM信号的占空比,利用定时器0以方式2进行PWM信号的周期控制,并通过外部I/O口输出PWM信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<reg52.h>

typedef unsigned char uint8	;
typedef unsigned int  uint16 ;
sbit up=P3^0;
sbit down=P3^1;
sbit in_1=P1^0;
uint8 pwm_t=0;
uint8 t=0;
void delay_1ms(uint16 tt)
{
	uint16 x,y;
	for(x=tt;x>0;x--)
		for(y=120;y>0;y--);
}
void main()
{
       TMOD=0x02;//自动重装初值的定时器0的方式2 ,这种方式应用于定时精度略高的情况
	   TH0=240;	//取1-255之间的数,数值越大pwm的频率越高
	   TL0=240;	//预置初值,即对当第8位溢出,高八位给低八位装个1这里就是240个2^8;
	   pwm_t=25;//我的理解是,这是一种程度,就是说当计数单位是输出的电平改变到达的快慢,数字越大,需要的时间就越久。
	   //就是说在相同的时间,pwm_t越大,高低电平的切换需按下按键的次数越多。
	   TR0=1;
	   ET0=1;
	   EA=1;
	 	 in_1=1;
	   while(1)
	   { 
	     if(!up)
		    {
			  if(pwm_t<250)
			   pwm_t++;
			  delay_1ms(5);
		   }
		  if(!down)
		    {
			    if(pwm_t>0)
				  pwm_t--;
				delay_1ms(5);
				}
		
		}
}
timer_0() interrupt  1 			  
{
     t++;
	 if(t==250)
	 {
	     t=0;
		 in_1=1;
	}
	if(pwm_t==t) //电平的切换
	    in_1=0;
	
}                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值