PWM控制LED渐亮渐灭示例程序

发布时间:2012-7-14 18:38    发布者:枫101
关键词: LED , PWM , 渐亮 , 渐灭
/***********************************************************程序说明:利用定时器控制产生占空比可变的 PWM按S6,PWM值增加,则占空比减小,
LED 灯渐暗。 按S3,PWM值减小,则占空比增加,LED 灯渐亮。
当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
***********************************************************/#include < reg51.h >
#include < intrins.h >sbit  K1 =P3^2 ;                    //增加键
sbit  K2 =P3^3 ;                    //减少键
sbit  BEEP =P3^7 ;                //蜂鸣器
unsigned char PWM=0x7f ;   //赋初值void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);/*********************************************************/
void main()
{      P0=0xff;
    TMOD=0x21 ;
    TH0=0xfc ;             //1ms延时常数 12M
    TL0=0x18 ;            //频率调节    TH1=PWM ;            //脉宽调节
    TL1=0 ;     EA=1;
     ET0=1;
     ET1=1;
   
     TR0=1 ;   while(1)
   {
     do{
   if(PWM!=0xff)
           {
       PWM++ ;
    delayms(10);
   }
           else
    Beep();
       }while(K1==0);    do{
           if(PWM!=0x01)
          {
      PWM-- ;
    delayms(10);}
   else
    Beep() ;
      }while(K2==0);
   }
}/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1
{  
    TR1=0 ;
    TH0=0xfc ;
    TL0=0x66 ;
    TH1=PWM ;
    TR1=1 ;
    P0=0x00 ;      //启动输出
}/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3
{
    TR1=0 ;
    P0=0xff ;     //结束输出
}/*********************************************************/
//蜂鸣器子程序
/*********************************************************/void Beep()     
  {
      unsigned char i  ;
      for (i=0  ;i<100  ;i++)
        {
          delay(100)  ;
          BEEP=!BEEP  ;                //Beep取反
        }
     BEEP=1  ;                            //关闭蜂鸣器
     delayms(100);
  } /*********************************************************/
// 延时子程序
/*********************************************************/  
void delay(unsigned char t)
{
    while(t--)   ;
}/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms) {
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++) ;
     }
}
本文地址:https://www.eechina.com/thread-93925-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表