恩智浦 飞思卡尔Freescale Kinetis KEA128学习笔记3--GPIO模块(二)

苏州大学资料KEIL模版

链接:https://pan.baidu.com/s/1e3g--GzvsU-lEIqy8WttGg 
提取码:qwik 
 

通过IO控制小灯亮灭。

//============================================================================
//文件名称:light.h
//功能概要:小灯构件头文件
//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
//版本更新:2014-12-10  V1.0
//芯片类型:KEA128
//============================================================================

#ifndef _LIGHT_H     //防止重复定义(_LIGHT_H  开头)
#define _LIGHT_H

//头文件包含
#include "common.h"    //包含公共要素头文件
#include "gpio.h"      //用到gpio构件

//指示灯端口及引脚定义
#define LIGHT_0       (PORTC|0)    //灯0使用的端口/引脚
#define LIGHT_1       (PORTC|1)    //灯1使用的端口/引脚
#define LIGHT_2       (PORTC|2)    //灯2使用的端口/引脚
#define LIGHT_3       (PORTC|3)    //灯3使用的端口/引脚

//灯状态宏定义(灯亮、灯暗对应的物理电平由硬件接法决定)
#define LIGHT_ON        1    //灯亮
#define LIGHT_OFF       0    //灯暗


//=================接口函数声明===============================================
//============================================================================
//函数名称:light_init
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//       state:设定小灯状态。由宏定义。
//函数返回:无
//功能概要:指示灯驱动初始化。
//============================================================================
void light_init(uint_16 port_pin, uint_8 state);

//============================================================================
//函数名称:light_control
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//       state:设定小灯状态。由宏定义。
//函数返回:无
//功能概要:控制指示灯亮暗。
//============================================================================
void light_control(uint_16 port_pin, uint_8 state);

//============================================================================
//函数名称:light_change
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//函数返回:无
//功能概要:切换指示灯亮暗。
//============================================================================
void light_change(uint_16 port_pin);

#endif    //防止重复定义(_LIGHT_H  结尾)


//===========================================================================
//声明:
//(1)我们开发的源代码,在本中心提供的硬件系统测试通过,真诚奉献给社会,不足之处,欢迎指正。
//(2)对于使用非本中心硬件系统的用户,移植代码时,请仔细根据自己的硬件匹配。
//
//苏州大学飞思卡尔嵌入式中心
//技术咨询:0512-65214835  http://sumcu.suda.edu.cn

 

//===========================================================================
//文件名称:light.c
//功能概要:小灯构件源文件
//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
//版本更新:2014-12-10  V1.0
//芯片类型:KEA128
//===========================================================================

#include "light.h"

//===========================================================================
//函数名称:light_init
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//       state:设定小灯状态。由light.h中宏定义。
//函数返回:无
//功能概要:指示灯驱动初始化。
//===========================================================================
void light_init(uint_16 port_pin, uint_8 state)
{
	gpio_init(port_pin, 1, state);
}

//===========================================================================
//函数名称:light_control
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//       state:设定小灯状态。由light.h中宏定义。
//函数返回:无
//功能概要:控制指示灯亮暗。
//===========================================================================
void light_control(uint_16 port_pin, uint_8 state)
{
	gpio_set(port_pin, state);
}

//===========================================================================
//函数名称:light_change
//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)
//函数返回:无
//功能概要:切换指示灯亮暗。
//===========================================================================
void light_change(uint_16 port_pin)
{
	gpio_reverse(port_pin);
}

主程序头文件

//============================================================================
//文件名称:includes.h
//功能概要:工程总头文件
//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
//版本更新:2014-12-10  V1.0
//芯片类型:KEA128
//============================================================================

#ifndef _INCLUDES_H  //防止重复定义(开头)
#define _INCLUDES_H

//包含使用到的构件头文件
#include "common.h"
#include "gpio.h"
#include "light.h"

//防止全局变量重复声明的前缀处理方法
#ifdef GLOBLE_VAR                 //GLOBLE_VAR在main.c文件中宏定义
#define G_VAR_PREFIX          //main.c文件中使用全局变量不加“extern”前缀
#else
#define G_VAR_PREFIX  extern  //其他文件中使用全局变量自动加“extern”前缀
#endif
//声明全局变量(全局变量类型前一律前缀G_VAR_PREFIX)
G_VAR_PREFIX char g_uart_num;

//定义宏常数
#define RUN_COUNTER_MAX   1500000ul   //小灯闪烁频率

#endif              //防止重复定义(结尾)

c文件

//说明见工程文件夹下的Doc文件夹内Readme.txt文件
#define GLOBLE_VAR  //只需在main.c中定义一次,用来防止全局变量的重复定义

#include "includes.h"

int main(void)
 {
    //1. 声明主函数使用的变量
    uint_32 mRuncount;     //主循环计数器
    //2. 关总中断
    DISABLE_INTERRUPTS;    //关总中断
    //3. 初始化外设模块
    light_init(LIGHT_0, LIGHT_OFF);     //初始化灯0
    light_init(LIGHT_1, LIGHT_OFF);     //初始化灯1
    light_init(LIGHT_2, LIGHT_OFF);     //初始化灯2
    light_init(LIGHT_3, LIGHT_OFF);     //初始化灯3
    //4. main中使用的局部变量初始化
    mRuncount = 0;            //主循环计数器
    //5. 全局变量初始化
    //6. 使能模块中断
    //7. 开总中断
    ENABLE_INTERRUPTS;   //开总中断

    //进入主循环
    //主循环开始==================================================================
    for (;;)
    {
        //运行指示灯闪烁----------------------------------------------------------
        mRuncount++;               //主循环次数计数器+1
        if (mRuncount >= RUN_COUNTER_MAX)  //主循环次数计数器大于设定的宏常数
        {
            mRuncount = 0;           //主循环次数计数器清零
            light_change(LIGHT_0);      //灯0(LIGHT_0)状态变化
            light_change(LIGHT_1);      //灯1(LIGHT_1)状态变化
            light_change(LIGHT_2);      //灯2(LIGHT_2)状态变化
            light_change(LIGHT_3);      //灯3(LIGHT_3)状态变化
        }
        //以下加入用户程序--------------------------------------------------------

    }  //主循环end_for

    //主循环结束==================================================================
    return 0;
}

 

你可能感兴趣的:(KEA128)