配置独立按钮K1,不按下时LED P2_0灯暗,按下时更亮。
#include <REGX52.H>
unsigned char Counter,Compare; //两个篮子,一个Counter计数器,一个Compare比较值。
void main()
{
while(1) //大循环。
{
while(P3_1==1) //循环:独立按钮K1,没有按下的时候,在这里面循环。
{
Counter++; //计数器自增1.
Counter%=100; //当计数器增加到100时,变成0,赋值给计数器。(也可以设定其他值)
Compare=95; //自己设定的比较值。(设得高,不亮的时间越长,看起来就越暗。红色线)
if(Counter<Compare) //把两者作比较。当计数器值小于比较值时 执行。
{
P2_0=1; //设计:当计数器值小于比较值灯不亮。
}
else
{
P2_0=0; //反之:灯亮。
}
}
while(P3_1==0)
{
Counter++;
Counter%=100;
Compare=5;
if(Counter<Compare)
{
P2_0=1;
}
else
{
P2_0=0;
}
}
}
}
注意:
1. PWM控制灯亮度的方式是:将一个计数器从 0到设定的值(如:10,100等) 作为一个周期,计数器值在此周期内 从0自增到最大又变为0。
设定一个 比较值, 计数器值自增一次就和比较值 比较一次,从而设定,是大于亮灯还是小于时亮灯,等。 快速的循环这个过程,肉眼看起来就好像灯变亮或者变暗了。
2. 如果编写程序为: if (计数器值Counter < 比较值Compare) —— {执行P2_0不亮} —— else否则——{ P2_0亮 }。 才满足 红线 与 绿线交点 右边部分 灯亮,左边部分 灯熄灭(如上图图)。得到的结果是:比较值Compare越大 P2_0灯越暗,反之越亮。
如果编写程序为:if (计数器值Counter > 比较值Compare) —— 执行P2_0不亮 —— else否则—— P2_0亮。 或者为: if (计数器值Counter < 比较值Compare) —— 执行P2_0亮 —— else否则—— P2_0不亮。 那么 交点 左边部分 灯亮,右边部分 灯熄灭。
3. 如上图熄灭表示的部分就是所谓的 占空比