【蓝桥杯05】——PWM脉宽调制信号

利用PWM脉宽信号实现独立按键S7控制对L1指示灯亮度变化的控制

  1. PWM脉宽信号的频率为100HZ
  2. 系统上电后L1处于熄灭状态
  3. L1上电有四种亮度模式,分别是完全熄灭、10%亮度、50%亮度、90%亮度
  4. 按下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--);
}

猜你喜欢

转载自blog.csdn.net/z3447643805/article/details/113762588