单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10556|回复: 18
打印 上一主题 下一主题
收起左侧

51单片机成功产生PWM波的方法 含源代码

  [复制链接]
PWM 是“脉冲宽度调制”的意思。
PWM 实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时间,是可以受控调整的。
高电平与周期占用的时间之比,称为占空比,其值为0~1之间。
PWM 的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。
新型的单片机,往往都含有硬件的 PWM 模块,编写程序就很简单;而老式的MCS-51系列,就不具备这个条件。
其实,在没有 PWM 硬件的单片机上实现 PWM,也并不难,只需一个定时器,令其工作在中断方式即可。

题目:AT89C52单片机输出可调 PWM 波。
要求:
1。单片机的晶振是12MHz,输出周期为1s。
2。用两个开关控制占空比的增加和减少,分20等级。
针对这个题目,做而论道设计了一个简单的实验电路:
 在 P2 口的 8 条线输出 PWM 波形;
 在 /INT1、/INT0 外接了两个按键,用来调整占空比;
 在 P0 口外接了两个 BCD 数码显示器,用来显示当前的占空比的等级。
 实验的时候,可以使用示波器来观察 P2 口输出的波形。
 如果把 PWM 波形的频率提高,也可以用 LED 观察到渐亮渐暗的效果,目前看,只是闪烁的时间发生变化。

电路以及仿真效果如下图:



//程序如下:
  1. #include<reg52.h>
  2. unsigned int a, b;
  3. //------------------------------------------
  4. void main()
  5. {
  6.          TMOD = 0x01;                 //T0定时方式1
  7.          TH0 = (65536-50000) / 256;   //50ms@12MHz
  8.          TL0 = (65536-50000) % 256;
  9.          TR0 = 1;

  10.          ET0 = 1;
  11.          EX0 = 1; EX1 = 1;
  12.          IT0 = 1; IT1 = 1;
  13.          EA = 1;

  14.          a = 0;
  15.          b = 10;
  16.          while(1);
  17. }
  18. //------------------------------------------
  19. void time0() interrupt 1
  20. {
  21.          TL0 = (65536-50000) % 256;
  22.          TH0 = (65536-50000) / 256;   //50ms@12MHz
  23.          a++;
  24.          if(a == 20) a = 0;           //在这里调整周期.
  25.          if(a < b) P2 = 0xff;        //在这里调整占空比.
  26.          else   P2 = 0x00;
  27.          P0 = ((b / 10) << 4) + b % 10; //显示占空比等级
  28. }
  29. //------------------------------------------
  30. void X0_INT() interrupt 0
  31. {
  32.          b++;
  33.          if(b > 19) b = 19;           //占空比等级最大为19
  34. }
  35. //------------------------------------------
  36. void X1_INT() interrupt 2


  37. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
代码.rar (516 Bytes, 下载次数: 266)


评分

参与人数 1黑币 +1 收起 理由
siya42 + 1 淡定

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 转播转播 分享分享 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
925302604 发表于 2017-4-4 11:03 | 只看该作者
看了帖子有点启发,感谢分享
回复

使用道具 举报

板凳
浅忆,汐辰! 发表于 2017-9-27 14:19 | 只看该作者
能不能把所有的代码发给我看看
回复

使用道具 举报

地板
buck198 发表于 2018-1-24 19:12 | 只看该作者
第一次,多谢啦
回复

使用道具 举报

5#
buck198 发表于 2018-1-24 20:43 | 只看该作者
哥,代码不全啊,附件
回复

使用道具 举报

6#
Toda 发表于 2018-3-9 10:39 | 只看该作者
附件的代码不全啊
回复

使用道具 举报

7#
December 发表于 2018-3-28 15:15 | 只看该作者
感谢楼主
回复

使用道具 举报

8#
December 发表于 2018-4-3 16:56 | 只看该作者
请问为什么我生成的方波是斜的?

回复

使用道具 举报

9#
无效楼层,该帖已经被删除
10#
hellopp2008 发表于 2018-6-12 13:30 | 只看该作者
不错学习了呀
回复

使用道具 举报

11#
萌木头 发表于 2018-7-2 10:56 | 只看该作者
这b太黑了就差两行
回复

使用道具 举报

12#
mhxbyl 发表于 2018-7-6 19:28 来自手机 | 只看该作者
楼主请问怎么把占空比的值显示在液晶屏内
回复

使用道具 举报

13#
mhxbyl 发表于 2018-7-6 21:28 来自手机 | 只看该作者
萌木头 发表于 2018-7-2 10:56
这b太黑了就差两行

就差一黑币,难受
回复

使用道具 举报

14#
mhxbyl 发表于 2018-7-6 22:46 来自手机 | 只看该作者
楼主,占空比等级怎么显示到1602里?求教。。
回复

使用道具 举报

15#
mhxbyl 发表于 2018-7-8 15:28 来自手机 | 只看该作者
若改成lcd显示欲望比什么
回复

使用道具 举报

16#
无效楼层,该帖已经被删除
17#
赵逗逗 发表于 2018-10-31 09:33 | 只看该作者
看了帖子有点启发,感谢分享
回复

使用道具 举报

18#
无效楼层,该帖已经被删除
19#
无效楼层,该帖已经被删除
20#
套你猴子 发表于 2018-12-5 09:02 | 只看该作者
stc89c51
回复

使用道具 举报

21#
Marlboro 发表于 2019-1-22 00:15 | 只看该作者
你好,在仿真电机在最大的占空时的速度看起来有点慢,怎样可以调快点
回复

使用道具 举报

22#
Duo2048 发表于 2019-4-15 22:16 | 只看该作者
看看看看,嘿嘿  不错哦
回复

使用道具 举报

23#
懒惰的家伙 发表于 2019-7-8 19:23 | 只看该作者
请问接lcd又该如何接呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表