找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机PWM调试LED灯显示经典例程源代码

[复制链接]
跳转到指定楼层
楼主
ID:315677 发表于 2018-5-10 12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pwm调试led灯显示单片机源程序如下:
  1. /**************************************************************************/

  2.           //-----------------直流电机PWM调速实验程序----------------//

  3. //测试单片机:STC89C52RC

  4. //晶振:11.0592M (外部)

  5. //复位方式:内部复位
  6.                    
  7. //调试环境:KEIL4

  8. //硬件测试环境:使用“清翔电子”单片机开发板测试通过

  9. //程序功能: PWM也就是脉宽调制,是指在周期脉冲信号频率不变的情况下,改变高电平
  10. //
  11. //                         和低电平的比例,也就是改变占空比。PWM在灯具调光,直流电机调速方面
  12. //
  13. //                         有着广泛的应用。程序使用定时器0中断模拟PWM定时,S2、S3 两个独立按
  14. //
  15. //                         键控制电机速度,为使演示结果明显,PWM输出
  16. //
  17. //                     到整个P1接口,通过板上的LED灯可以看到亮度的变化。
  18. //
  19. /****************************************************************************/       

  20. #include <reg51.h>

  21. typedef unsigned char uint8;
  22. typedef unsigned int  uint16;

  23. sbit down = P3^0;
  24. sbit up = P3^1;

  25. uint8 t = 0;
  26. uint8 PWM_T = 0;   //占空比控制变

  27. void delay_1ms(uint16 t)
  28. {
  29.         uint16 x,y;
  30.         for(x=t;x>0;x--)
  31.                 for(y=120;y>0;y--);
  32. }


  33.          
  34. /****************************************************
  35.                   主程序
  36. ****************************************************/
  37. void main(void)      
  38. {

  39.         TMOD = 0x02;   //定时器0,工作模式2,8位定时模式
  40.         TH0=210;     //写入预置初值(取值1-255,数越大PWM频率越高)
  41.         TL0=210;     //写入预置值 (取值1-255,数越大PWM频率越高)
  42.         TR0=1;       //启动定时器
  43.         ET0=1;       //允许定时器0中断
  44.         EA=1;        //允许总中断
  45.         P1=0xff;          //初始化P1,输出端口
  46.         PWM_T=30;
  47.          while(1)      
  48.        
  49.          {   
  50.                    if(!up)
  51.                          {
  52.                                 if(PWM_T<250)
  53.                                         {
  54.                                           PWM_T++;
  55.                                         }
  56.                                
  57.                                 delay_1ms(10);
  58.                         }
  59.                  if(!down)
  60.                          {
  61.                                 if(PWM_T>0)
  62.                                         {
  63.                                           PWM_T--;
  64.                                         }
  65.                                
  66.                                 delay_1ms(10);
  67.                         }

  68.        
  69.          }      
  70. }
  71. /****************************************************
  72.                /定时器0中断模拟PWM
  73. ****************************************************/
  74. timer0() interrupt 1  
  75. {
  76.          t++;    //每次定时器溢出加1
  77.          
  78.          if(t==250)   //PWM周期 100个单位
  79.                  {
  80.                           t=0;  //使t=0,开始新的PWM周期
  81.                           P1=0x00;  //输出端口
  82.                  }
  83.          
  84.          if(PWM_T==t)  //按照当前占空比切换输出为高电平
  85.                  {  
  86.                          P1=0xff;        //  
  87.                  }
  88. }
复制代码

所有资料51hei提供下载:
PWM调试LED灯显示.rar (794.62 KB, 下载次数: 32)


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

使用道具 举报

沙发
ID:441403 发表于 2019-4-22 17:30 | 只看该作者
少东西的吗 执行起来 没反应
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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