利用PWM脉宽信号实现独立按键S7控制对L1指示灯亮度变化的控制。
- PWM脉宽信号的频率为100HZ
- 系统上电后L1处于熄灭状态
- L1上电有四种亮度模式,分别是完全熄灭、10%亮度、50%亮度、90%亮度
- 按下S7按键,循环切换L1指示灯的四种亮度模式。
#include <STC15F2K60S2.H>
void selectHC(unsigned char n);
void rtemer0();
void delay(unsigned int i);
void keyscan();
/*
PWM脉宽信号的频率为100HZ
系统上电后L1处于熄灭状态
L1上电有四种亮度模式,分别是完全熄灭、10%亮度、50%亮度、90%亮度
按下S7按键,循环切换L1指示灯的四种亮度模式。
*/
sbit beer=P0^6;
sbit L1=P0^0;
sbit S7=P3^0;
void main()
{
selectHC(5);beer=0;P2&=0x1f;
selectHC(4);P0=0XFF;
rtemer0();
while(1)
{
keyscan();
}
}
unsigned char count=0;
unsigned char flag=0; //用于占空比表示 10,50,90
void temer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
count++; //频率100HZ,周期10ms=10000us;100个100us就是10ms
if(count==flag)
{
L1=1; //低电平达到了占空比就翻转为高电平,LED是高电平熄灭
}
if(count==100) //count计数到100时候说明一个周期结束,脉冲翻转为低电平
{
L1=0;
count=0;
}
}
int n=0;
void keyscan()
{
if(S7==0)
{
delay(500);
if(S7==0)
{
switch(n)
{
case 0:
L1=0;TR0=1;flag=10;n=1;break; //占空比为10
case 1:
flag=50;n=2;break;
case 2:
flag=90;n=3;break;
case 3:
L1=1;TR0=0;n=0;break;
}
while(S7==0);
}
}
}
void rtemer0()
{
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
EA=1;
}
void selectHC(unsigned char n)
{
switch(n)
{
case 4:P2=(P2&0x1f)|0x80;break; //LED
case 5:P2=(P2&0x1f)|0xA0;break; //蜂鸣器 继电器
case 6:P2=(P2&0x1f)|0xC0;break; //数码管位选
case 7:P2=(P2&0x1f)|0xE0;break; //数码管段选
}
}
void delay(unsigned int i)
{
while(i--);
}