找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机LED PWM调光程序

[复制链接]
跳转到指定楼层
楼主
ID:137190 发表于 2016-9-9 23:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机的对LEDPWM调光程序.zip (7.51 KB, 下载次数: 66)

  1. 用STC12C5624AD写的PWM可调C程序
  2. //本程序用占空比可调节的PWM方波来控制大功率LED的亮度,PWM波占空比可从0到100
  3. // PWM 控制 LED 灯渐亮渐灭程序
  4. // 晶振为12M
  5. // 利用STC12C5624AD单片机的PWM功能产生占空比可变的 PWM 方波
  6. // 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
  7. // 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
  8. // 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
  9. //…..安徽师范大学物理与电子信息学院07级电子信息工程专业   曾祥…………..//
  10. #include<reg52.h>
  11. sfr CCON=0xD8;
  12. sfr CMOD=0xD9;
  13. sfr CL=0xE9;
  14. sfr CH=0xD8;
  15. sfr CCAP0L=0xEA;
  16. sfr CCAP0H=0xFA;
  17. sfr CCAPM0=0xDA;
  18. unsigned char PWM=0x7f;                           //PWM初值
  19. unsigned char flag=0;                                
  20. sbit K1 =P2^6 ;                    //增加键
  21. sbit K2 =P2^7 ;                                           //减少键
  22. sbit BEEP=P2^5;                                           //蜂鸣器
  23. sbit CR=0xDE;
  24. void Beep();
  25. void delayms(unsigned char ms);
  26. void delay(unsigned char t);
  27. void main(void)
  28. {
  29.   CMOD=0x02;                //PCA计数脉冲选择为fos/2
  30.   CL=0x00;
  31.   CH=0x00;
  32.   CCAP0L=0xC0;
  33.   CCAP0H=PWM;
  34.   CCAPM0=0x42;
  35.   CR=1;
  36.   
  37.   while(1)
  38.   {
  39.   if(K1==1&&K2==1)
  40.    flag=0;
  41.   if(K1==0)
  42.         {
  43.                 delay(50);
  44.                if(K1==0&&flag==0)        
  45.                         {        
  46.                                 if(PWM<0xf5)
  47.                                 {  
  48.                                 CR=0;        PWM+=10; delayms(10); CR=1;
  49.                                  }
  50.                                   else
  51.                                   { PWM=0xff;Beep();}
  52.                                   flag=1;
  53.                     }
  54.      }
  55.     if(K2==0)
  56.          {
  57.                 delay(50);
  58.               if(K2==0&&flag==0)
  59.            {
  60.                  if(PWM>0x0a)
  61.               {
  62.                            CR=0;   PWM-=10 ;delayms(10); CR=1;  }
  63.                       else {PWM=0x00;Beep();}
  64.                           
  65.                     }
  66.                         flag=1;        
  67.       }

  68.      CCAP0H=PWM;
  69.     }
  70.   }

  71. /*********************************************************/
  72. //蜂鸣器子程序
  73. /*********************************************************/
  74. void Beep()     
  75. {
  76.       unsigned char i ;
  77.       for (i=0 ;i<100 ;i++)
  78.         {
  79.           delayms(3) ;
  80.          BEEP=0 ;                //Beep取反
  81.         }
  82.     BEEP=1 ;                            //关闭蜂鸣器
  83.     delayms(100);
  84. }
  85. /*********************************************************/
  86. // 延时子程序1
  87. /*********************************************************/
  88. void delay(unsigned char t)
  89. {
  90.     while(t--)   ;
  91. }
  92. /*********************************************************/
  93. // 延时子程序2
  94. /*********************************************************/
  95. void delayms(unsigned char ms)
  96. {
  97.     unsigned char i ;
  98.     while(ms--)
  99.      {
  100.         for(i = 0 ; i < 120 ; i++)         ;
  101.      }
  102. }

  103.   
复制代码


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

使用道具 举报

沙发
ID:138282 发表于 2016-9-10 15:25 来自手机 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

板凳
ID:139028 发表于 2016-9-11 07:39 | 只看该作者
本帖最后由 lele4608 于 2016-9-11 08:48 编辑

能把当前的分级值,用2位数码管显示出来吗,不需要太多的分级?有其他可以替换的芯片吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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