1、利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制。
具体要求如下:1.PWM脉宽信号的频率为100Hz。
2.系统上电后L1指示灯处在熄灭状态。
3.L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、50%的亮度和90%的亮度。
4.按下S7按键,循环切换L1指示灯的4种亮度(亮度的顺序为第3点的顺序)
#include<reg52.h>
sbit L1=P0^0;
sbit S7=P3^0;
void SelectHC573()
{
P2=(P2&0X1F)|0X80;
}
//=====定时器相关函数=====
unsigned char count=0;
unsigned char pwm_duty=0;//此时已设置脉冲初始值为0
void InitTimer0()
{
TMOD=0X01;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
ET0=1;
EA=1;
}
void ServiceTimer0() interrupt 1
{
TH0=(65535-100)/256;
TL0=(65535-100)%256;
count++;
if(count==pwm_duty)
{
L1=1;
}
if(count==100)
{
L1=0;
count=0;
}
// if(count<=pwm_duty)
// {
// L1=0;
// }
// else if(count<100)
// {
// L1=1;
// }
// else if(count==100)
// {
// L1=0;
// count=0;
// }
//
}
//========================
//=====按键相关的函数======
void Delay(unsigned int t)
{
while(t--);
}
unsigned char stat=0;
void ScanKeys()
{
if(S7==0)
{
Delay(100);
if(S7==0)
{
switch(stat)
{
case 0:
L1=0;
TR0=1;
pwm_duty=10;
stat=1;
break;
case 1:
pwm_duty=50;
stat=2;
break;
case 2:
pwm_duty=90;
stat=3;
break;
case 3:
L1=1;
TR0=0;
stat=0;
break;
}
while(S7==0);
}
}
}
//=========================
void main()
{
SelectHC573();
L1=1;
InitTimer0();
while(1)
{
ScanKeys();
}
}