1262|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

LED PWM调光C程序 [复制链接]

#include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED1 = P2^0; 
sbit LED = P2^1;      //定义LED灯,通过LED显示调光效果 
sbit LED2 = P2^2;

unsigned char CYCLE;  //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms 
unsigned char PWM_ON ;//定义高电平时间 
/******************************************************************/ 
/*                    延时函数                           &nbs/******************************************************************/ 
void delay(unsigned int cnt) 

  while(--cnt); 

/******************************************************************/ 
/*                    主函数                                      */ 
/******************************************************************/ 
void main() 

 bit Flag; 
 TMOD |=0x01;              //定时器设置 0.1ms in 12M crystal 
 TH0=(65536-100)/256; 
 TL0=(65536-100)%256;      //定时0.1mS 
 IE= 0x82;                 //打开中断 
 TR0=1; 
 CYCLE = 50;               // 时间可以调整 这个是10调整 8位PWM就是256步 
 while(!Flag) 
  { 
   delay(20000);          //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果 
   PWM_ON++;              //这个使用较长延时,以便能看清楚变化过程 
   if(PWM_ON == CYCLE) 
    {                    //这个里可以添加其他程序 如到最亮时候控制设备 
      Flag=1; 
    } 
  } 
 while(Flag)              //亮度递减 同上,是个相反的过程 
  { 
   delay(20000);     //延迟时间为20000*0.4=8000us
   PWM_ON--; 
   if(PWM_ON == 0) 
    { 
      Flag=0; 
    } 
  } 

/******************************************************************/ 
/*                    定时器中断函数                              */ 
/******************************************************************/ 
void tim(void) interrupt 1 using 1 

 static unsigned char count; 
 TH0=(65536-100)/256; 
 TL0=(65536-100)%256;     //定时0.1mS 
 if (count==PWM_ON) 
  { 
     LED1 = 1; 
     LED = 1;            //灯灭 
     LED2 = 1; 
  } 
  count++; 
 if(count == CYCLE) 
  { 
    count=0; 
    if(PWM_ON!=0)        //如果开启时间是0 保持原来状态 
    {
       LED1 = 0; 
       LED = 0;          //灯亮 
       LED2 = 0; 
    }
  } 
}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表