找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3732|回复: 1
收起左侧

如何使用pwm的原理,设计两个按键,来控制一个led亮度的加减(单片机C语言) 求帮助

[复制链接]
ID:424795 发表于 2019-3-3 14:28 | 显示全部楼层 |阅读模式
10黑币
如题

最佳答案

查看完整内容

用STC12C5624AD写的PWM可调C程序 //本程序用占空比可调节的PWM方波来控制大功率LED的亮度,PWM波占空比可从0到100 // PWM 控制 LED 灯渐亮渐灭程序 // 晶振为12M // 利用STC12C5624AD单片机的PWM功能产生占空比可变的 PWM 方波 // 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 // 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 // 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。 //…..安徽师范大学物理与电子信息学 ...
回复

使用道具 举报

ID:407374 发表于 2019-3-3 14:29 | 显示全部楼层
用STC12C5624AD写的PWM可调C程序
//本程序用占空比可调节的PWM方波来控制大功率LED的亮度,PWM波占空比可从0到100
// PWM 控制 LED 灯渐亮渐灭程序
// 晶振为12M
// 利用STC12C5624AD单片机的PWM功能产生占空比可变的 PWM 方波
// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
//…..安徽师范大学物理与电子信息学院07级电子信息工程专业   曾祥…………..//
#include<reg52.h>
sfr CCON=0xD8;
sfr CMOD=0xD9;
sfr CL=0xE9;
sfr CH=0xD8;
sfr CCAP0L=0xEA;
sfr CCAP0H=0xFA;
sfr CCAPM0=0xDA;
unsigned char PWM=0x7f;                           //PWM初值
unsigned char flag=0;                                
sbit K1 =P2^6 ;                    //增加键
sbit K2 =P2^7 ;                                           //减少键
sbit BEEP=P2^5;                                           //蜂鸣器
sbit CR=0xDE;
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
void main(void)
{
  CMOD=0x02;                //PCA计数脉冲选择为fos/2
  CL=0x00;
  CH=0x00;
  CCAP0L=0xC0;
  CCAP0H=PWM;
  CCAPM0=0x42;
  CR=1;
  
  while(1)
  {
  if(K1==1&&K2==1)
   flag=0;
  if(K1==0)
        {
                delay(50);
               if(K1==0&&flag==0)        
                        {        
                                if(PWM<0xf5)
                                {  
                                CR=0;        PWM+=10; delayms(10); CR=1;
                                 }
                                  else
                                  { PWM=0xff;Beep();}
                                  flag=1;
                    }
     }
    if(K2==0)
         {
                delay(50);
              if(K2==0&&flag==0)
           {
                 if(PWM>0x0a)
              {
                           CR=0;   PWM-=10 ;delayms(10); CR=1;  }
                      else {PWM=0x00;Beep();}
                          
                    }
                        flag=1;        
      }

     CCAP0H=PWM;
    }
  }

/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()     
{
      unsigned char i ;
      for (i=0 ;i<100 ;i++)
        {
          delayms(3) ;
         BEEP=0 ;                //Beep取反
        }
    BEEP=1 ;                            //关闭蜂鸣器
    delayms(100);
}
/*********************************************************/
// 延时子程序1
/*********************************************************/
void delay(unsigned char t)
{
    while(t--)   ;
}
/*********************************************************/
// 延时子程序2
/*********************************************************/
void delayms(unsigned char ms)
{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++)         ;
     }
}

  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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