⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm控制灯的亮灭.c

📁 改程序是提供给初学51单片机的人们的
💻 C
字号:
										   /***********************************************************
实验名称:PWM控制LED渐亮渐灭示例程序
程序说明:利用定时器控制产生占空比可变的 PWM按S6,PWM值增加,则占空比减小,LED 灯渐暗。 按S3,PWM值减小,则占空比增加,LED 灯渐亮。
当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
作者:RF-X1开发板团队
日期:2008-08-01
***********************************************************/

#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;        //初始化P0口
    TMOD=0x21 ;   // TMOD用于选择定时/计数器的工作模式 高四位控制T1低四位控制T0  低四位被选为方式一 高四位被选为方式二
    TH0=0xfc ;             //1ms延时常数 12M
    TL0=0x18 ;            //频率调节

    TH1=PWM ;            //脉宽调节
    TL1=0 ;         //

     EA=1;            //     开总中断
     ET0=1;             //           开定时器计数器0 
     ET1=1;               //  开定时器计数器1

     TR0=1 ;                //  启动定时器计数器0

   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++) ;
     }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -