PWM 按键控制灯亮度(改变占空比)

PWM 按键控制灯亮度(改变占空比)
PWM 按键控制灯亮度(改变占空比)

PWM 按键控制灯亮度(改变占空比)

MCU 2010-04-05 20:32:09 阅读63 评论0字号:大中小

明文作品,谢谢欣赏!

功能说明:PWM,通过改变占空比,PWM_T/100,

这里100是周期,每个按键都会给PWM_T一个定值,这样就改变了输出波形。

仿真运行后,点击debug->4. digital oscillicope(最后一项) 就能够看到波形了。

观察低电平占的比例10% ,这里WPM-T=10 10/100=10%

观察低电平占的比例60% ,这里WPM-T=60

60/100=60%

/****************************************************

6个按键决定6个亮度

占空比:PWM_T/100,越大越亮

****************************************************/

#include

#define uInt unsigned int

#define uchar unsigned char

uchar PWM_T = 0; //占空比控制变量

sbit c7=P3^7; //6个按键,决定输出PWM_T值

sbit c6=P3^6;

sbit c5=P3^5;

sbit c4=P3^4;

sbit c3=P3^3;

sbit c2=P3^2;

/****************************************************

主程序

****************************************************/

void main(void)

{

uInt n;

TMOD=0x02; //定时器0,工作模式2,8位定时模式

TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高)

TL0=210; //写入预置值(取值1-255,数越大PWM频率越高)

TR0=1; //启动定时器

ET0=1; //允许定时器0中断

EA=1; //允许总中断

P1=0xff; //初始化P1,输出端口

P0=0xff; //初始化P0

while(1) //PWM周期100,高电平100- PWM_T,低电平PWM_T,低电平工作{

for(n=0;n<200;n++); //延时,取值0-65535,数字越大变化越慢

if(!c7||!c6||!c5||!c4||!c3||!c2) //通过按键改变占空比

{

if(!c7) PWM_T=0; //这些值可以改变else if(!c6) PWM_T=10;

else if(!c5) PWM_T=35;

else if(!c4) PWM_T=60;

else if(!c3) PWM_T=85;

else if(!c2) PWM_T=100;

}

}

}

/****************************************************

/定时器0中断模拟PWM

****************************************************/

timer0() interrupt 1 using 2

{

static uchar t ; //PWM计数

t++; //每次定时器溢出加1

if(t==100) //PWM周期100个单位

{

t=0; //使t=0,开始新的PWM周期

P1=0x00; //使LED灯亮,输出端口

P0=0x00; //使LED灯亮,输出端口

}

if(PWM_T==t) //按照当前占空比切换输出为高电平{ P1=0xff; //使LED灯灭

P0=0xff; //使LED灯灭

} }

相关主题
相关文档
最新文档