金牌会员
- 积分
- 1056
- 威望
- 497
- 贡献
- 285
- 兑换币
- 278
- 注册时间
- 2014-7-23
- 在线时间
- 137 小时
- 毕业学校
- 辽宁科技大学
|
/***************************************************************
名称: 飞思卡尔 主文件
输入:
输出:
描述:
:
****************************************************************/
/***************************************************************
名称:宏包含语句
输入:
输出:
描述:
:
****************************************************************/
#include "common.h" //常用类型声明和宏定义
#include "include.h" //基本包含
/***************************************************************
名称:变量定义
输入:
输出:
描述:
:
****************************************************************/
uint8 SEND_time_count = 5; //车辆数据无线发送周期
uint8 SENSOR_time = 0; //传感器数据更新控制变量
uint8 CCD_time = 0; //CCD中断时间控制变量
uint8 CODE_time = 0; //编码器采集时间变量
uint8 SENSOR_get_time = 0; //获取传感器数据控制变量
uint8 CCD_get_time = 0; //获取CCD数据控制变量
uint8 CODE_get_time = 0; //获取编码器数据控制变量
uint8 CONTROL_time = 0; //控制计算时间变量
uint8 MOTOR_time = 0; //电机控制时间变量
uint8 LED_time = 0; //LED闪烁时间变量
uint8 INF_time = 0; //灯塔采集时间变量
uint8 KEY_time = 0; //按键采集时间变量
uint8 SEND_time = 0; //车辆信息发送时间变量
uint16 count_time = 0; //运行时间计数变量
char LED_change = 0;
uint16 SPEED_CODE[8] = {40,90,200,30,150,100,200,220};
char SPEED_change = 0;
/***************************************************************
名称:定时器中断初始化变量
输入:
输出:
描述:
:
****************************************************************/
void PIT0_IRQHandler(void);
/***************************************************************
名称:main函数
输入:
输出:
描述:
:
****************************************************************/
void main(void)
{
DisableInterrupts; //禁止总中断
NVIC_SetPriority(PIT0_IRQn,0); //配置优先级
/***************************************************************
名称:相关函数初始化
输入:
输出:
描述:
:
****************************************************************/
led_init(LED_MAX); //初始化LED0,PIT0中断用到LED0
led_turn(LED3);
pit_init_ms(PIT0, 1); //初始化PIT0,定时时间为: 1ms
LCD_init(); //初始化屏幕
CCD_init(); //初始化CCD
tsl1401_led_en(TSL1401_MAX); //开启补光灯
BAT_init(); //初始化电池采集AD
MMA8451_init(); //初始化加速度计
L3G4_init(); //初始化陀螺仪
CODE_Init(); //初始化编码器采集
MOTOR_init(); //初始化电机PWM
Key_Init(); //初始化按键扫描
/***************************************************************
名称:
输入:
输出:
描述:
:
****************************************************************/
set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断复位函数为 PIT0_IRQHandler
enable_irq (PIT0_IRQn); //使能PIT0中断
set_vector_handler(UART4_RX_TX_VECTORn,uart4_test_handler); //设置中断复位函数到中断向量表里
START_LOGO(); //启动页面
VIEW_LOGO(); //基本菜单
EnableInterrupts; //总中断允许
/***************************************************************
名称:循环函数
输入:
输出:
描述:
:
****************************************************************/
while(1)
{
CCD_hand(); //CCD数据采集与处理
BAT_get(); //电池信息采集
Serive_Key(); //按键服务函数
DATA_view(); //界面数据显示
//UART_send(); //串口发送数据
}
}
/***************************************************************
名称:定时器中断函数
输入:
输出:
描述:
:
****************************************************************/
void PIT0_IRQHandler(void)
{
/*********************************************
*名称:各控制变量自增运算
********************************************/
SENSOR_time ++; //传感器数据更新控制变量
CCD_time ++; //CCD中断时间控制变量
CODE_time ++; //编码器采集时间变量
SENSOR_get_time ++; //获取CCD数据控制变量
CCD_get_time ++; //获取传感器数据控制变量
CODE_get_time ++; //获取编码器数据控制变量
CONTROL_time ++; //控制计算时间变量
MOTOR_time ++; //电机控制时间变量
LED_time ++; //LED闪烁时间变量
INF_time ++; //灯塔采集时间变量
KEY_time ++; //按键采集时间变量
SEND_time ++; //车辆信息发送时间变量
count_time ++; //运行时间计数变量
/*********************************************
*名称:传感器数据更新时间
********************************************/
if(SENSOR_time >= SENSOR_time_count)
{
MMA8451_read_value(); //采集加速度计
L3G4_read_value(); //采集陀螺仪
ANGLE_read(); //直立数据采集
SENSOR_time = 0; //变量清零
}
/*********************************************
*名称:CCD曝光时间
********************************************/
if(CCD_time >= CCD_time_count)
{
tsl1401_time_isr(); //控制CCD曝光
DIR_middle_read(); //方向数据采集
CCD_time = 0; //变量清零
}
/*********************************************
*名称:编码器统计时间
********************************************/
if(CODE_time >= CODE_time_count)
{
CODE_measure(); //采集编码器
GO_read(); //速度数据采集
CODE_time = 0; //变量清零
}
/*********************************************
*名称:直立相关计算
********************************************/
if(SENSOR_get_time >= SENSOR_get_time_count)
{
ANGLE_linear(); //直立数据线性化
ANGLE_Calaulate(MMA8451_ANGLE_now,L3G4_ANGLE_now);
//直立姿态计算
SPEED_ANGLE_calculate(); //直立速度计算
SENSOR_get_time = 0; //变量清零
}
/*********************************************
*名称:方向相关计算
********************************************/
if(CCD_get_time >= CCD_get_time_count)
{
DIR_middle_linear(); //方向数据线性化
DIR_middle_Calaulate(DIR_middle_now);
//方向姿态计算
SPEED_DIR_middle_calculate(); //方向速度计算
CCD_get_time = 0; //变量清零
}
/*********************************************
*名称:速度相关计算
********************************************/
if(CODE_get_time >= CODE_get_time_count)
{
GO_linear(); //速度数据线性化
GO_Calaulate(GO_L_now,GO_R_now); //速度姿态计算
SPEED_GO_calculate(); //前进速度计算
CODE_get_time = 0; //变量清零
}
/*********************************************
*名称:控制数据计算
********************************************/
if(CONTROL_time >= CONTROL_time_count)
{
SPEED_AFINAL_calculate(); //全局速度计算
CONTROL_time = 0; //变量清零
}
/*********************************************
*名称:电机控制
********************************************/
if(MOTOR_time >= MOTOR_time_count)
{
PWM_reverse(); //PWM数据反向
MOTOR_control(); //电机控制
MOTOR_time = 0; //变量清零
}
/*********************************************
*名称:LED闪烁
********************************************/
if(LED_time >= LED_time_count)
{
LED_change ++;
switch(LED_change)
{
case 1:led_turn(LED3);led_turn(LED0);break; //翻转LED
case 2:led_turn(LED0);led_turn(LED1);break; //翻转LED
case 3:led_turn(LED1);led_turn(LED2);break; //翻转LED
case 4:led_turn(LED2);led_turn(LED3);break; //翻转LED
}
if(LED_change == 4)
{
LED_change = 0;
}
LED_time = 0; //变量清零
}
/*********************************************
*名称:灯塔检测
********************************************/
if(INF_time >= INF_time_count)
{
if(INF_static == 8) //如果灯塔标志位为停止位
{
RUN_static = 0; //则车辆停止(目前仅为停止控制PWM 应该为滑行)
}
INF_time = 0; //变量清零
}
/*********************************************
*名称:按键检测
********************************************/
if(KEY_time >= KEY_time_count)
{
Check_Key(); //按键扫描
KEY_time = 0; //变量清零
}
/*********************************************
*名称:车辆信息无线发送
********************************************/
if(SEND_time >= SEND_time_count)
{
UART_send(); //发送车辆状态信息
SEND_time = 0; //变量清零
}
/*********************************************
*名称:运行状态设定
********************************************/
if(count_time >= count_time_count)
{
if(start_static == 1) //如果开始允许位为 1
{
RUN_start_time--; //倒计时开始自减
if(RUN_start_time < 0) //判断倒计时是否 < 0
{
RUN_start_time = 0; //则 设置倒计时为 0
}
if(RUN_start_time == 0) //若倒计时为0
{
RUN_time = 0; //运行时间设置为 0
RUN_static = 1; //运行允许位设置为 1
start_static = 0; //开始允许位设置为 0
RUN_start_time = 5; //倒计时归 0
}
}
if(RUN_static == 1) //若运行允许位为 1
{
RUN_time ++; //运行时间自加
if(RUN_time%3 == 0)
{
// SPEED_goal = SPEED_CODE[SPEED_change];
// SPEED_change++;
// if(SPEED_change == 8)
// {
// SPEED_change = 0;
// }
}
}
count_time = 0;
}
/*********************************************
*名称:清除标志位
********************************************/
PIT_Flag_Clear(PIT0); //清除中断标志位
}
/***************************************************************
名称:main.h
输入:
输出:
描述:
:
****************************************************************/
#ifndef _MAIN_H_
#define _MAIN_H_
#define SENSOR_time_count 1 //传感器数据更新时间
#define CCD_time_count 10 //CCD数据更新时间 !!! 未使用
#define CODE_time_count 50 //编码器数据更新时间
#define SENSOR_get_time_count 5 //传感器计算周期
#define CCD_get_time_count 10 //CCD计算周期
#define CODE_get_time_count 50 //编码器计算周期
#define CONTROL_time_count 5 //姿态计算周期
#define MOTOR_time_count 5 //电机控制周期
#define LED_time_count 100 //LED闪烁周期
#define INF_time_count 10 //灯塔检测周期
#define KEY_time_count 10 //按键检测周期
#define count_time_count 1000 //计时计数周期
extern uint8 SEND_time_count ; //车辆数据无线发送周期
extern uint8 SENSOR_time ; //传感器数据更新控制变量
extern uint8 CCD_time ; //CCD中断时间控制变量
extern uint8 CODE_time ; //编码器采集时间变量
extern uint8 SENSOR_get_time ; //获取传感器数据控制变量
extern uint8 CCD_get_time ; //获取CCD数据控制变量
extern uint8 CODE_get_time ; //获取编码器数据控制变量
extern uint8 CONTROL_time ; //控制计算时间变量
extern uint8 MOTOR_time ; //电机控制时间变量
extern uint8 LED_time ; //LED闪烁时间变量
extern uint8 INF_time ; //灯塔采集时间变量
extern uint8 KEY_time ; //按键采集时间变量
extern uint8 SEND_time ; //车辆信息发送时间变量
extern uint16 count_time ; //运行时间计数变量
#endif
个人能力有限,请多指点。
|
|