標(biāo)題:
51單片機(jī)的pwm呼吸燈
[打印本頁]
作者:
夢(mèng)醒了11
時(shí)間:
2020-8-31 14:26
標(biāo)題:
51單片機(jī)的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(); //定時(shí)器初始化
uchar zhongduan_count; //中斷次數(shù) 10次變化一次
uchar pwm_value; //當(dāng)前高電平對(duì)應(yīng)的定時(shí)次數(shù)
uint update_count; //占空比更新 中斷的次數(shù) 1000次增加5%
bit flag; // flag 0 增加 1減少
void timer0_init()
{
EA=1;
TMOD=0x02; //定時(shí)器0 方式2
TH0=0xA3; //100us
TL0=0xA3;
ET0=1; //中斷打開
TR0=1; //打開定時(shí)器
}
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 一個(gè)周期 不變
{
led=1;
zhongduan_count=0;
}
if(zhongduan_count==pwm_value)
{
led=0;
}
if(update_count==1000) //100ms更新一次占空比
{
if((flag==0)) //標(biāo)志為清0 說明我們現(xiàn)在為占空比增加模式
{
update_count=0; //占空比更新中斷的次數(shù)清0,記錄下一次到達(dá)100ms
pwm_value++; //占空比增加5% 因?yàn)?/20=0.05=5%
if(pwm_value==20) //如果占空比為100% 我們進(jìn)入到占空比減少模式
{
flag=1;
}
}
}
if(update_count==1000) //100ms更新一次占空比
{
if(flag==1) //標(biāo)志位置1 說明我們現(xiàn)在為真空比減少模式
{
update_count=0; //占空比更新中斷的次數(shù)清0,記錄下一次到達(dá)100ms
pwm_value--; //占空比減少5%
if(pwm_value==0) //如果占空比為0% 進(jìn)入到占空比增加模式
{
flag=0;
}
}
}
}
作者:
010706
時(shí)間:
2021-1-1 20:08
如何把速度調(diào)快啊
作者:
一人淺笑盡長(zhǎng)安
時(shí)間:
2021-7-8 16:09
這個(gè)定時(shí)如何改變呀
作者:
lsg0280
時(shí)間:
2022-1-20 07:12
下載了,可以呼吸。程序挺好的,學(xué)習(xí)中
作者:
lsg0280
時(shí)間:
2022-1-20 07:20
if(update_count==1000) ,改變這個(gè)參數(shù),就可以改變它的時(shí)間。如果(update_count==500)則效果更好。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1