#include
bit flay;
sbit led=P1^1;
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^1;
uchar pwm=0,aa=0;
void delay(uint);
void delays();
main()
{
TMOD|=0x01; // 定时器初始化
TH0=(65536-100)/256;// 给定时器赋值
TL0=(65536-100)%256;//给定时器赋值
EA=1; // 开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器 开始计数
while(1)
{
while(!flay)
{
pwm++; //pwm表示占空比
delay(20);//延时大约20毫秒 保证pwm每增加一次都会进入中断
if(pwm==100)
flay=1;
}
//上面这段代码 占空比增加
//下面这段代码 占空比减少
while(flay)
{
pwm--;
delay(20);
if(pwm==1)
flay=0;
}
}
}
void delay(uint m) //大概延时m毫秒
{
uint i,j;
for(i=0;i
for(j=0;j<110;j++);
}
void delays() //延时函数
{
uint i,j;
for(i=0;i<1;i++)
for(j=0;j<1;j++);
}
void time() interrupt 1
{
//每100微秒进入一次中断
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if(aa==pwm)
{
led=1; //熄灭8个led灯
} aa++;
if(aa==100) //周期为10毫秒
{
aa=0;
if(pwm!=0)
led=0; //点亮8个了的等
}
}
这是我以前写的用PWM调节led等的亮度的程序 中断服务程序里面的代码就是用来产生pWM波
你可以参考一下 对照写出自己的程序
取消
评论