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

📄 pwm.c

📁 在自动控制系统中
💻 C
字号:
/*
   
   名词解释:1、PWM(Pulse Width Modulation,脉宽调制)
				
			 2、占空比(Duty Cycle)
				即:  在一串理想的脉冲序列中(如方波),
				      正脉冲的持续时间与脉冲总周期的比值。
                例如:脉冲宽度为1s,信号周期为4s的脉冲序
				      列的占空比为0.25。
  
   程序说明:通过调整单位时间内I/O口输出高电平持续的时间,
             即可达到对占空比的调节,也即PWM,本程序即是
			 PWM的一个应用。
			 
   应用说明:图示仅画标出了占空比的几个特殊值可以适当调
             整各个变量的初值,从而控制LED对应输出几个不
			 同的亮度级别。通过把周期设置的更小--频率
			 提高就可以达到0%--100%之间任意的亮度级别。
			 并且由于人眼的视觉暂留,看到的不是亮、灭的
			 跳变,而是明暗的均匀过渡。

(C)西安电子科技大学    测控技术与仪器    编写:郭世忠  日期:2008-04-04
 */


///////////////////////////////////////////////////////////////////////////
//								 脉冲宽度								 //
//								 |	   |								 //
//	      0%      25%      50%   |75% |  	 100% --->占空比	    	 //
//              __	  	  ____	   _____    ________   ___1	(高电平)	 //
//	  |        | |       |    |   |	    |  |		|					 //
//    |________| |_______|    |___|	    |__|		|  ___0 (低电平)	 //
//							   											 //
//    |   500  |   500   |   500  |  500   |  500   |					 //
/*        500是一次高低电平变化的周期,可根据需要自定     */			 //
//																		 //
// 注意:  我们的学习板中,P1口的LED是低电平有效。因此,	    		 //
//         占空比为0%时最亮,占空比为100%时熄灭,注意区别。				 //
///////////////////////////////////////////////////////////////////////////



/**************************************************************************
    
	功能:使P1口的八个LED发的光由暗到亮,再由亮到暗均匀过渡
               
/**************************************************************************/



#include<reg52.h>	 //51寄存器头文件 

void Delayms(int ms);//函数声明

void main(void)		 //主程序
{
  unsigned int i,t;	 //定义变量 

while(1)			 //主循环(死循环),单片机必须是死循环
 {					
   
/**************************这个for循环为由暗到亮的过程**********************/   
   for(t=0;t<=500;t++)  
   {  
    P1=0x00;              //P1口输出低电平	即P1.7-----P1.0依次对应 0000 0000
    for(i=0;i<t;i++);     //延时,保持低电平,LED为熄灭状态
   
    P1=0xff;              //P1口输出高电平	即P1.7-----P1.0依次对应 1111 1111
    for(i=0;i<500-t;i++); //延时,保持高电平,LED为发光状态
   }

	P1=0x00;			  //将P1口置低,防止跳变
    Delayms(500);		  //短暂延时,用于区分变化效果
/**************************这个for循环为由亮到暗的过程**********************/ 
  for(t=0;t<=500;t++)  
   {
    P1=0xff;              //P1口输出高电平	即P1.7-----P1.0依次对应 1111 1111  
    for(i=0;i<t;i++);     //延时,保持低电平,LED为熄灭状态
   
    P1=0x00;              //P1口输出低电平	即P1.7-----P1.0依次对应 0000 0000
    for(i=0;i<500-t;i++); //延时,保持高电平,LED为发光状态
    }

	P1=0xff;			  //将P1口置高,防止跳变
    Delayms(500);		  //短暂延时,用于区分变化效果
  
  }

}

/****************************************************************************
* 名    称:Delayms()
* 功    能:延迟1ms
* 入口参数:ms: 延迟毫秒数
* 出口参数:无
* 说    明: 11.0592MHz条件下
****************************************************************************/
void Delayms(int ms)
{
   unsigned int i;
   for(;ms>0;ms--)	      //循环ms次
   {
      for(i=0;i<113;i++); //每次1ms延迟@ 11.0592MHz
   }
}





















⌨️ 快捷键说明

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