找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1851|回复: 0
打印 上一主题 下一主题
收起左侧

利用脉宽调制实现呼吸灯

[复制链接]
跳转到指定楼层
楼主
ID:369359 发表于 2018-7-11 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "ioCC2530.h"
#define  LED1   P1_0

unsigned char pwm_period = 100; //定义PWM的周期
unsigned char pwm_duy = 90;     //定义PWM的占空比
unsigned char t_count = 0;      //间隔定时次数累计

/*==================端口初始化函数======================
功能:初始化LED1和SW按键
      将P1_0设置为通用I/O端口的输出模式
      关闭LED1灯
设计:广东职业技术学院  欧浩源
时间:2017年10月19日
========================================================*/
void Init_Port()
{
  P1SEL &= ~0x01;  //将P1_0设置为通用I/O端口
  P1DIR |= 0x01;   //将P1_0设置为输出方式
  LED1 = 1;        //输出1--关灯,输出0--开灯
}

/*=================定时器1初始化函数=====================
功能:初始化定时器1
      使用内部16MHz晶振,定时周期1ms,
      使用模模式,开启通道0的输出比较模式,
      分频系数8,打开相应的定时中断
设计:广东职业技术学院  欧浩源
时间:2017年10月19日
========================================================*/
void Init_Timer1()
{
  /*=内部16MHz晶振8分频定时0.1ms的最大计数值为0x00c8=*/
  T1CC0L = 0xc8;    //设置最大计数值的低8位
  T1CC0H = 0x00;    //设置最大计数值的高8位
  T1CCTL0 |= 0x04;  //开启通道0的输出比较模式
  T1IE = 1;         //使能定时器1中断
  T1OVFIM = 1;      //使能定时器1溢出中断
  EA = 1;           //使能总中断
  T1CTL = 0x06;     //分频系数是8,模模式
}

/*================定时器1中断服务函数====================
功能:1ms间隔定时中断服务函数
      对间隔定时次数进行累加,即t_count++
      t_count < pwm_duy, 输出高电平
      pwm_duy < t_count < pwm_period, 输出低电平
      t_count = pwm_period,t_count清0,输出高电平
      每完成一个PWM改变一个占空比,实现呼吸灯
设计:广东职业技术学院  欧浩源
时间:2017年10月19日
========================================================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
  T1STAT &= ~0x01;        //清除定时器1通道0中断标志
  t_count++;              //对间隔定时次数进行累加
  if(t_count < pwm_duy)            //高电平周期到
  {
    LED1 = 1;                     
  }
  else if(t_count < pwm_period)   //低电平周期到
  {
    LED1 = 0;                     
  }
  else                  //准备开始下一个PWM输出
  {
    LED1 = 1;
    t_count = 0;        //间隔定时累加清0
    pwm_duy--;
    if(pwm_duy == 1)
    {
      pwm_duy = 90;
    }
  }
}

/*=====================主函数===========================*/
void main()
{
  Init_Port();        //初始化I/O端口
  Init_Timer1();      //初始化定时器1
  while(1);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表