PWM即为“脉冲宽度调制”

脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中

使用定时器0做为PWM波的一个周期,然后改变一个周期的高电平和低电平时间,高低电平时间加起来就是一个周期,周期一旦固定好是恒定不变的,改变脉宽宽度(占空比)

GPIO初始化,单片机系统时钟为11.0592MHZ

#include <STC8G.h>//系统时钟为11.0592MHZ#define DOW   P32
#define UP    P33
#define PWM   P54//引脚初始化
void GPIO_Init(void)
{P3M0 &= ~(1<<2);P3M1 &= ~(1<<2);P3M0 &= ~(1<<3);P3M1 &= ~(1<<3);P5M0 |= 1<<4;P5M1 &= ~(1<<4);
}

定时器0初始化函数,定时器时间为10us中断一次,中断100次则1ms,即周期是1KHZ

//定时器0初始化
void Time0_Init(void)
{TMOD &= 0xF0;TMOD |= 0x00; //配置定时器0为16位自动重装模式
//  TH0 = 0xFC; //1ms
//  TL0 = 0x66;TH0 = 0xFF;   //10usTL0 = 0xF7;TR0 = 1;      //定时器0运行使能ET0 = 1;      //使能定时器0中断EA = 1;       //开启总中断
}

按键调节占空比需要定义一个变量,占空比上电默认为10%

//PWM占空比调整
unsigned char Dut=10;

按键调整占空比函数

//PWM占空比调节按键扫描函数
void Key_Scan(void)
{static bit Keyup_Flag=1,Keydow_Flag=1;if(UP != Keyup_Flag){if(Keyup_Flag == 0){Dut += 5;            //按键按下每次增加5if(Dut >= 100)Dut = 100;}Keyup_Flag = UP;}if(DOW != Keydow_Flag){if(Keydow_Flag == 0){if(Dut != 10)Dut -= 5;      //按键按下每次减少5}Keydow_Flag = DOW;}
}

已下是定时器0中断函数,即PWM输出

void main(void)
{GPIO_Init();    //引脚配置初始化Time0_Init();   //定时器0初始化while(1){Key_Scan();}
}//定时器0中断服务函数
void Time0_ISR(void) interrupt 1
{static unsigned char PWM_CNT=0;static bit PWM_Out=0;  //此变量为在Debug中使用,在实际中是不需要的PWM_CNT++;if(PWM_CNT > Dut){PWM = 0;PWM_Out = 0;}else{PWM = 1;PWM_Out = 1;}if(PWM_CNT >= 100)PWM_CNT = 0;
}

keil仿真输出波形图

占空比:10%

占空比:50%

占空比:95%

压缩文件下载链接:https://download.csdn.net/download/qq_43265868/86339425?spm=1001.2014.3001.5501

利用51单片机定时器模拟输出PWM波相关推荐

  1. 【51MCU】51单片机定时器中断写MIDI音乐(按键可切换音乐)

    Author: Manba Cople 专业:IOT 说明:记录和输出学习内容 文章目录 前言 定时器 音乐播放 音乐库 总结和展望 前言 程序思路:该程序是利用51单片机的定时器中断,另外根据音符的 ...

  2. 【51单片机学习】PWM电机调速

    简单的PWM电机调速--基于51单片机 (一)51单片机需要用到的寄存器 (二)PWM波的产生及调速原理 (三)电机调速的实现 (一)51单片机需要用到的寄存器 中断允许寄存器,详情可以看STC51单 ...

  3. 基于51单片机可调PWM发生器

    源码:基于51单片机可调PWM发生器 一.设计任务 PWM信号频率范围为20Hz ~ 100kHz 占空比为5%~95% 键盘设置PWM频率和占空比 液晶模块显示输出频率和占空比 二.硬件设计 1.硬 ...

  4. 利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇“显示贪吃蛇”

    利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇"显示贪吃蛇" 完整的项目链接: https://github.com/linxinloningg/51_chip_ ...

  5. 51单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)

    设计思路 直流电机PWM控制系统的主要功能包括:很实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部 ...

  6. STM32f103C8定时器输出PWM波信号

    利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...

  7. 利用51单片机演奏《猪猪侠》

    今天的目标很明确,那就是我们如何使用51单片机演奏一首音乐. 先听一下演奏效果: 51单片机播放<猪猪侠>音乐(音频) 1.有一个很重要的问题,那就是如何将乐谱转换51单片机的16进制或十 ...

  8. 利用51单片机制作一个秒表的详细过程

    利用51单片机制作一个秒表的详细过程 前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大 ...

  9. c51单片机秒表程序c语言,利用51单片机制作秒表的详细过程

    前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才 ...

  10. 51单片机定时器频率计算

    频率是周期的倒数 51单片机定时器中TH与TL可以改变周期来改变频率. 举例如下 3000us=3ms=0.003s   T=0.003s频率=333HZ    2000us=2ms=0.002s   ...

最新文章

  1. turtlebot雷达模块
  2. visual studio code 调试ROS的插件
  3. EEPROM存储器--AT24CXX
  4. 一起学nRF51xx 2 - clock
  5. c++-内存管理-debug_allocator
  6. 从头开始敲代码之《从BaseApplication/Activity开始(二)》
  7. Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
  8. macos安装python3.6_在CentOS 7/Ubuntu 16.04/Debian 9/macOS上安装Python 3.6的方法
  9. 风控报表大全(全面触及)
  10. btoa java,JavaScript用btoa和atob来编码解码Base64
  11. java B2B2C 仿淘宝电子商城系统-基于Rabbitmq实现延迟消息
  12. 贴张我家养的狗狗们的照片!
  13. Go语言-测试与性能分析
  14. 在线人民币数字金额转成美元金额大写工具
  15. Windows系统下的Git安装教程
  16. Ogre引擎渲染系列之Normal Specular Mapping
  17. 计算机 蓝牙鼠标卡顿,无线蓝牙鼠标为什么有时会卡顿发飘,不稳定?
  18. 世界卫生组织0-10岁儿童体格心智发育评价标准(女)
  19. 开发微信小程序所需要的http服务器搭建
  20. idea windows找不到文件chrome

热门文章

  1. 【养眼美女win7主题】主题世界
  2. SQLAPI++ Library 4.2.1 VS2010破解版
  3. 易语言c盘搜索文件,易语言遍历搜索目录指定文件
  4. 深度Linux挂载盘
  5. html小说站源码,读取本地HTML的小说阅读器应用源码项目
  6. ZUCC_计算机网络实验_实验11 Wireshark抓包软件高级
  7. 【EDA技术】 实验一 利用半减器设计一位全减器
  8. Unity人物动画扩展
  9. 【Opencv综合应用】自制训练集的人脸识别1——拍摄10张人脸图片
  10. 【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)