PWM_按键控制灯亮度(改变占空比)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PWM 按键控制灯亮度(改变占空比)
功能说明: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灯灭
} }