📄 distance.c
字号:
//======================================================
// 文件名称: Distance.c
// 功能描述: 里程计量程序
// 维护记录: 2006-10-12 v1.0 by lijian
//======================================================
#include "Cal.h"
#include "Distance.h"
#include "SetInterruptStatus.h"
#include "ConstValues.h"
// 下面的变量保存在Flash中
unsigned int c_uiPulsePerKM; // 每公里对应的传感器脉冲数
unsigned int uiDistance; // 记录公里数
unsigned int uiPulseNum; // 记录不足一公里的脉冲数
unsigned long int ulPulseForSpeed; // 用于计算速度的脉冲数临时变量
unsigned int uiSpeed; // 速度
unsigned long int ulRunTime; // 行驶时间
//=============================================================
// 语法格式: void Dis_Init(void)
// 实现功能: 里程计量初始化
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_Init(void)
{
c_uiPulsePerKM = C_PulsePerKM; // 读取Flash保存的控制参量
uiDistance = 0;
uiPulseNum = 0;
uiSpeed = 0;
*P_IOB_Dir &= ~C_Bit2; // 初始化IOB2用于打开外部中断1
*P_IOB_Attrib &= ~C_Bit2;
*P_IOB_Buffer |= C_Bit2;
}
//=============================================================
// 语法格式: void Dis_StartMessure(void)
// 实现功能: 启动里程计量
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_StartMessure(void)
{
SetINTStatus(C_IRQ3_EXT1); // 打开外部中断1
uiDistance = 0;
ulPulseForSpeed = 0;
uiPulseNum = 0;
Cal_StartTimer(0); // 启动0.5s计数器0,用于计算行驶时间
__asm("IRQ ON");
}
//=============================================================
// 语法格式: void Dis_StopMessure(void)
// 实现功能: 停止里程计量(但不清除行驶里程记录)
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_StopMessure(void)
{
ClearINTStatus(C_IRQ3_EXT1); // 关闭外部中断1
}
//=============================================================
// 语法格式: void Dis_ClearDistance(void)
// 实现功能: 清除行驶里程记录
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_ClearDistance(void)
{
uiDistance = 0;
uiPulseNum = 0;
uiSpeed = 0;
Cal_ClearTimer(0);
}
//=============================================================
// 语法格式: float Dis_GetDistance(void)
// 实现功能: 得到当前行驶里程
// 参数: 无
// 返回值: 行驶里程(单位:公里)
//=============================================================
float Dis_GetDistance(void)
{
return((float)uiDistance + (float)((float)uiPulseNum / (float)c_uiPulsePerKM));
}
//=============================================================
// 语法格式: unsigned int Dis_GetSpeed(void)
// 实现功能: 得到当前行驶的近似速度
// 参数: 无
// 返回值: 行驶速度(单位:公里/小时)
//=============================================================
unsigned int Dis_GetSpeed(void)
{
return uiSpeed;
}
//=============================================================
// 语法格式: unsigned long int Dis_GetRunTime(void)
// 实现功能: 得到当前行驶时间
// 参数: 无
// 返回值: 行驶时间(单位:秒)
//=============================================================
unsigned long int Dis_GetRunTime(void)
{
return (Cal_ReadTimer(0) >> 1);
}
//=============================================================
// 语法格式: void Dis_In_IRQ_DistanceServiceLoop(void)
// 实现功能: 里程计量中断服务程序(需要安置在外部中断1中)
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_In_IRQ_DistanceServiceLoop(void)
{
ulPulseForSpeed++;
if(++uiPulseNum == c_uiPulsePerKM)
{
uiPulseNum = 0;
uiDistance++;
}
}
//=============================================================
// 语法格式: void Dis_In_IRQ_DistanceServiceLoop(void)
// 实现功能: 速度测量中断服务程序(需要安置在2Hz时基中断中)
// 参数: 无
// 返回值: 无
//=============================================================
void Dis_In_IRQ_SpeedServiceLoop(void)
{
uiSpeed = (unsigned int)((7200 * ulPulseForSpeed) / c_uiPulsePerKM);
ulPulseForSpeed = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -