标题:
51单片机的pwm呼吸灯
[打印本页]
作者:
梦醒了11
时间:
2020-8-31 14:26
标题:
51单片机的pwm呼吸灯
/**********PWM呼吸灯**********************/
/**********100us中断一次*****************/
/**********100ms更新一次PWM*************/
/*************T=2000us*****************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led=P1^0;
void timer0_init(); //定时器初始化
uchar zhongduan_count; //中断次数 10次变化一次
uchar pwm_value; //当前高电平对应的定时次数
uint update_count; //占空比更新 中断的次数 1000次增加5%
bit flag; // flag 0 增加 1减少
void timer0_init()
{
EA=1;
TMOD=0x02; //定时器0 方式2
TH0=0xA3; //100us
TL0=0xA3;
ET0=1; //中断打开
TR0=1; //打开定时器
}
void main()
{
zhongduan_count=0;
update_count=0;
pwm_value=10;
flag=0;
timer0_init();
led=1;
while(1);
}
void time0() interrupt 1
{
zhongduan_count++;
update_count++;
if(zhongduan_count==20) //控制周期 20*100us=2ms 一个周期 不变
{
led=1;
zhongduan_count=0;
}
if(zhongduan_count==pwm_value)
{
led=0;
}
if(update_count==1000) //100ms更新一次占空比
{
if((flag==0)) //标志为清0 说明我们现在为占空比增加模式
{
update_count=0; //占空比更新中断的次数清0,记录下一次到达100ms
pwm_value++; //占空比增加5% 因为1/20=0.05=5%
if(pwm_value==20) //如果占空比为100% 我们进入到占空比减少模式
{
flag=1;
}
}
}
if(update_count==1000) //100ms更新一次占空比
{
if(flag==1) //标志位置1 说明我们现在为真空比减少模式
{
update_count=0; //占空比更新中断的次数清0,记录下一次到达100ms
pwm_value--; //占空比减少5%
if(pwm_value==0) //如果占空比为0% 进入到占空比增加模式
{
flag=0;
}
}
}
}
作者:
010706
时间:
2021-1-1 20:08
如何把速度调快啊
作者:
一人浅笑尽长安
时间:
2021-7-8 16:09
这个定时如何改变呀
作者:
lsg0280
时间:
2022-1-20 07:12
下载了,可以呼吸。程序挺好的,学习中
作者:
lsg0280
时间:
2022-1-20 07:20
if(update_count==1000) ,改变这个参数,就可以改变它的时间。如果(update_count==500)则效果更好。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1