明文作品,谢谢欣赏! 功能说明:PWM,通过改变占空比,PWM_T/100,这里100是周期,每个按键都会给PWM_T一个定值,这样就改变了输出波形。
- /****************************************************
- 6个按键决定6个亮度
- 占空比 :PWM_T/100,越大越亮
- ****************************************************/
- #include <reg51.h>
- #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灯灭
- }
- }
-
复制代码
完整资料下载:
PWM_按键控制灯亮度(改变占空比).doc
(193.5 KB, 下载次数: 42)
|