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

📄 distance.c

📁 此程序为出租车计价器
💻 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 + -