蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

简介: 蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

一、训练任务


在CT107D单片机综合训练平台上,利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制。


1.1 具体要求


1.PWM脉宽信号的频率为100Hz

2.系统上电后L1指示灯处在熄灭状态

3.L1指示灯有4中亮度模式,分别是完全熄灭,10%的亮度、50%的亮度和90%的亮度。

4.按下S7按键,循环切换L1指示灯的四种亮度模式

0a2653c851af460fa595bd959398a8f1.png


二、代码展示


#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit L1 = P0^0;
sbit S7 = P3^0;
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:    //蜂鸣器和继电器
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:    //位码
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:    //段码
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  }
}
//*********定时相关函数*********
uchar count = 0;
uchar pwm_duty = 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;
  }
  else if(count == 100)
  {
  L1 = 0;
  count = 0;
  }
}
//*******按键相关函数********
uchar stat = 0;
void Delay(uint t)
{
  while(t--);
}
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 Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void main()
{
  InitTimer0();
  Initsys();
  SelectHC138(4);
  while(1)
  {
  ScanKeys();
  }
}


三、一些介绍


占空比:在一个周期里面,高电平所占的比率


相关文章
|
6月前
|
传感器 芯片
毕业设计 基于51单片机霍尔电机转速测量温度PWM调速设计
毕业设计 基于51单片机霍尔电机转速测量温度PWM调速设计
100 0
|
4月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
4月前
单片机课程设计——PWM电机调速
单片机课程设计——PWM电机调速
|
5月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
136 4
|
6月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
6月前
|
存储 搜索推荐 IDE
新手如何快速上手学习单片机?
新手如何快速上手学习单片机?
121 0
|
6月前
|
存储 编译器 C语言
单片机学习之路一些常见的疑问也是我的个人学习总结
单片机学习之路一些常见的疑问也是我的个人学习总结
129 0
|
6月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
270 0