⑴ 單片機pwm控制LED程序的問題
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
sbit key2=P3^3;
uchar pwm;
uchar pwm2;
void keyscan();
void delay(uchar z);
void main()
{
pwm=100;
pwm2=100;
TMOD=0x11;
TH0=0xff; TL0=0x9c;
TH1=0xff; TL1=0x9c;
EA=1;
ET0=1; ET1=1;
TR0=1;
while(1)
{
keyscan();
}
}
void time0() interrupt 1
{
static uchar kk;
TH0=0xff;
TL0=0x9c;
TR1=1;
kk=pwm;
if(kk>=30)
{
TR1=0;
P1=0x00;
}
}
void time1() interrupt 3
{
static uchar tt;
TH1=0xff;
TL1=0x9c;
tt=pwm2;
if(tt>=50)
{
TR1=0;
P1=0xff;
}
}
void keyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
pwm2=pwm2-1;
pwm =pwm+1;
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
pwm2=pwm2+1;
pwm =pwm-1;
}
}
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
再把上面復制進去看一下!
⑵ 請教51單片機利用PWM控制燈的亮度的程序
第一,要理解中斷在這里的作用是固定的「一小段」時間進入一次。
第二,PWM_ON在程序中的作用很大,它會由0------>CYCLE------>0並且一直循環下去。可以把它看成一個有規律的變化的量。
第三,每進入中斷一次count++,滿足條件count==PWM_ON或count==CYCLE時改變LED的當前狀態。作用是給小燈亮或滅的時間不同。
第四,LED的亮度與其通電時間有關,也可以說成是占空比。上面的條件要理解成是呈線性增加或減小的頻率。可以理解成三角波,對應的面積就是通電時間。
不知能不能給你講明白!
⑶ 求助,51單片機用PWM的RGB呼吸燈程序怎麼寫
#include<reg52.h>
sbitLED0=P2^0;//解碼器控制端,低有效
voidDelay(unsignedintt);//函數聲明
voidmain(void)
{
unsignedintset=400,pwm=0;//定義周期並賦值
while(1)//主循環
{
LED0=0;
Delay(60000);//延時,可以看到熄滅的過程
for(pwm=1;pwm<set;pwm++){
LED0=1;//熄滅LED
Delay(pwm);//延時長度,600次循環中從1加至599
LED0=1;//點亮LED
Delay(set-pwm);//延時長度,600次循環中從599減至1
}
LED0=1;
for(pwm=set-1;pwm>0;pwm--){//與逐漸變亮相反的過程
LED0=1;
Delay(pwm);
LED0=0;
Delay(set-pwm);
}
//主循環中添加其他需要一直工作的程序
}
}
voidDelay(unsignedintt)
{
while(--t);
}