【蓝桥杯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--);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

root@z~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值