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

📄 lpld_breathing.c

📁 Kinetis_K60开源底层驱动开发包(20120328)
💻 C
字号:
/*
 * 测试硬件平台:  LPLD_K60 Card
 * 版权所有:      北京拉普兰德电子技术有限公司
 * 网络销售:      http://laplenden.taobao.com
 * 公司门户:      http://www.lpld.cn
 *
 * 说明:    本工程基于Kintis K60开源底层开发包开发,
 *          所有开源驱动代码均在"LPLD"文件夹下,调用说明见文档[#LPLD-003-N]
 *
 * File:		LPLD_Breathing.c
 * Purpose:		呼吸灯效果演示,PIT定时中断和GPIO模块综合例程
 *
 * LPLD_K60 Card 硬件配置说明:
 *                      LED:  D1~D8分别连接到PortD8~15
 *
 *
 */

#include "common.h"
#include "HAL_GPIO.h"
#include "HAL_PIT.h"

extern int periph_clk_khz;

uint16_t cnt=0;
uint16_t pit0cnt=0;
uint16_t pit0cnt2=0;
uint16_t led_ld[8]={0};
uint16_t led_lds[27]={0,0,5,10,20,30,50,80,130,200,130,80,50,30,20,10,5,0,0,5,10,20,30,50,80,130,200};

//函数声明
void init_gpio(void);
void pit_isr0();
void pit_isr1();

/********************************************************************/

void main (void)
{
  init_gpio();
  LPLD_PIT_Init(0, 100000, pit_isr0);
  LPLD_PIT_Init(1, 100, pit_isr1);
    
  while(1)
  {
  }
}


/*
 * 初始化LPLD_K60 Card上的GPIO
 *
 *   PTD8~PTD15 - D1~D8
 *
 */
void init_gpio()
{
  // 配置 PTD8~PTD15 为GPIO功能,方向为输出
  LPLD_GPIO_Init(PORTD_BASE_PTR, 8, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 9, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 10, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 11, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 12, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 13, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 14, 1, 1, 0);
  LPLD_GPIO_Init(PORTD_BASE_PTR, 15, 1, 1, 0);
}

/*
 * PIT0中断服务子程序
 *
 * 该程序每100毫秒触发一次,不用清标志位,因为已经在底层处理了。
 *
 */
void pit_isr0()
{
  uint8_t i;
  int16_t lds;
  
  if(pit0cnt==10)
  {
    if(pit0cnt2<1)
    {
      pit0cnt2++;
      return;
    }else{
      pit0cnt2=0;
    }
  }
  else if(pit0cnt>17 && pit0cnt<25)
  {
    pit0cnt++;
    return;
  }else if(pit0cnt==25)
  {
    pit0cnt=0;  
  }
  
  for(i=0;i<8;i++)
  {
    lds = led_lds[pit0cnt]-25*i;
    if(lds<0)
      lds=0;
    led_ld[i] = lds;
  }
  pit0cnt++;
}

/*
 * PIT1中断服务子程序
 *
 * 该程序每1毫秒触发一次,不用清标志位,因为已经在底层处理了。
 *
 */
void pit_isr1()
{
  uint8_t i;
  
  for(i=0;i<8;i++)
  {
    if(cnt>=led_ld[i])
      LPLD_GPIO_Set_b(PTD_BASE_PTR, i+8, 1); 
    else
      LPLD_GPIO_Set_b(PTD_BASE_PTR, i+8, 0); 
    cnt++;
  }
  if(cnt==200)
    cnt=0;
}


/********************************************************************/

⌨️ 快捷键说明

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