|
新手仿照網(wǎng)上教程寫了個(gè)PWM點(diǎn)亮一個(gè)LED小燈(sbit led = P1^2)程序。當(dāng)我把一個(gè)LED小燈換成直接換成整個(gè)P1(連接8個(gè)led小燈)口,結(jié)果只有P1.0口的小燈由暗到亮,再從亮到暗,其余7個(gè)燈常亮,PWM一次只能驅(qū)動(dòng)一位嗎?還望高手指教。
單片機(jī)源程序如下:
/***********************
PWM-呼吸燈
*************************/
#include<reg52.h>
//sbit led = P1^2;
unsigned char t_count ; //累計(jì)每個(gè)周期中斷次數(shù)的個(gè)數(shù),滿20清零,20*100us=2ms(pwm的周期)
unsigned int count ; //累計(jì)占空比需要修改(增加還是減少)的中斷次數(shù)的個(gè)數(shù) 1200*100us=120ms
unsigned char t ; //累計(jì)高電平的個(gè)數(shù)
bit flag ; //標(biāo)志位 0增加,1減少
void timer0init(void)
{
EA = 1;
TMOD = 0X02;
TH0 = 0Xa3;
TL0 = 0Xa3;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
t_count = 0;
count = 0;
t =10; //占空比總50%開始
// led = 1;
timer0init();
while(1);
}
/*每100us進(jìn)入一次中斷*/
void timer0() interrupt 1
{
t_count++;
count++;
if(t_count == t)
{
P1 = 0;
}
if(t_count == 19)
{
t_count = 0;
P1 = 1;
}
if((count == 1200)&&(flag == 0))
{
count = 0;
t++;
if(t == 19) //增加最大占空比 95%
{
flag = 1;
}
}
if((count ==1200)&&(flag == 1))
{
count = 0;
t--;
if(t ==10) //減小到最低占空比 50%
{
flag = 0;
}
}
}
|
|