STC15W4K58S4 PWM波输出实验4

               STC15W4K58S4 PWM波输出实验4     呼吸灯

如果在每个PWM周期中改变翻转点T2的值,就可以改变PWM波的占空比。在输出端口连接电阻和LED灯就可以看到LED的呼吸灯效果。

程序中PWM计数器使用默认值,即系统时钟频率SYSclk,设置PWM周期为3000,起始电平为低电平,翻转点T1为0,翻转点T2的值从1开始不断增加,当到达最大值3000时,再逐渐减小,减小到0后再增加,从而可以平滑地改变占空比,调节输出平均电压,实现LED呼吸灯效果。注意输出端口一定要串联上电阻。

翻转点T2在PWM计数器溢出中断服务程序中修改,PWM计数溢出标志CBIF,每当PWM计数器的值达到设定的周期,例如3000时产生溢出,中断标志置位。在中断服务程序中需软件清除中断标志位。

程序代码

#include "STC15W4K.H"

#define uchar unsigned char
#define uint  unsigned int

void PWM_CBIF() interrupt 22
{
  static uint idata a=1;
  static uint idata b=0;

  if(a==1)
  {
   b++;
   if(b==3000) 
     a=0; 
  }
  if(a==0)
  {
   b--;
   if(b==0)
   { a=1; b++; }
  }

  P_SW2|=0x80;
  PWM2T2=b; 
  P_SW2&=0x0F;

  PWMIF=0;
}

void main()
{

 P2M0=0;
 P2M1=0;  //设置P2端口为准双向弱上拉
          //因系统上电后,与PWM有关的端口均为高阻态
          //所以,这里要设置为弱上拉状态
 P_SW2|=0x80;

 PWMCFG=0x00;    //配置PWM初始输出为低电平
 PWMCKS=0x03;    //PWM使用系统时钟
 PWMCR=0x01;     //PWM通道2输出使能
 PWM2CR=0x08;    //PWM输出为P2.7

 
 PWMC=3000;   

 PWM2T1=0;   //第一次翻转的PWM计数值
 PWM2T2=0;  //第二次翻转的PWM计数值
 
 P_SW2&=0x0F;

 PWMCR=0xC1;        //PWM计数器开始	   ECBIF

 EA=1;


 while(1)
 {
  ;
 }
  
}

实验结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值