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

📄 ledpmw.c

📁 51单片机PWM 控制 LED 灯渐亮渐灭程序 利用定时器控制产生占空比可变的 PWM 波 按K1
💻 C
字号:
/********************************************************************************
;*  标题:  xl系列单片机实验仪演示程序PWM 控制 LED 灯渐亮渐灭程序                *
;*  文件:                                                        		*
;*  日期:  2006-1-5                                                             *
;*  版本:  3.0 (试验通过版)可用xl600-xl1000单片机综合试验仪试验               *
;*  邮箱:  sxj1974@163.com                                                      *
;*  网站: http://www.51c51.com    www.8951.com                                 *
;********************************************************************************
; PWM 控制 LED 灯渐亮渐灭程序                                                   *
; 利用定时器控制产生占空比可变的 PWM 波                                         *
; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。                                    *
; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。                                    *
;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警                              *
;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警          *
;********************************************************************************
;* 【版权】 Copyright(C)深圳市学林电子有限公司 www.51c51.com                    *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;*  【技术支持】请访问http://www.51c51.com/bbs/index.asp  官方论坛              *
;********************************************************************************/
#include<reg51.h>
#include<intrins.h>
sbit  K1 =P1^4 ;           	//PWM值增加键
sbit  K2 =P1^5 ;           	//PWM值减少键
sbit  BEEP =P3^7 ;         	//蜂鸣器
unsigned char PWM=0x7f ;   	//赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{   
    P1=0xff;
    TMOD=0x21 ;
	TH0=0xfc ;           	//1ms延时常数
    TL0=0x66 ;           	//频率调节
    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!=0x02)
	    {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 + -