#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;
}
单片机模拟pwm调速或调光
最新推荐文章于 2025-07-05 16:04:49 发布