苏州大学资料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;
}