出租车计费系统之电路的设计与实现(5)

2019-03-29 14:05

长春师范学院毕业论文 第一章 1引言

//

}

}

}

if(ui_KeyCount > C_LKeyLimit) { } else { }

ui_KeyCount++;

ui_KeyScanState = C_KeyStateAfterLKey; ui_KeyState = C_LKeyState;

else { }

ui_KeyScanState = C_KeyStateFirst;

else { } break;

if(ui_KeyCount > C_DebounceLimit) {

if(C_Null == DrvGetKeyID()) {

ui_KeyScanState = C_KeyStateFirst; ui_KeyScanState = C_KeyStateReleaseDebounce; ui_KeyCountBK = ui_KeyCount; ui_KeyCount = 0;

case C_KeyStateReleaseDebounce:

18

长春师范学院毕业论文 第一章 1引言

}

}

if(C_SKeyState == ui_KeyState)

ui_KeyState = C_SReleaseKeyState; ui_KeyState = C_LReleaseKeyState; else if(C_LKeyState == ui_KeyState)

else { }

ui_KeyCount = ui_KeyCountBK; ui_KeyScanState = C_KeyStateRepeat;

else { } break;

if(++ui_RepeatCount >= C_RepeatTim) { }

if(C_Null == DrvGetKeyID()) { }

else if(DrvGetKeyID() != ui_KeyID) {

ui_KeyScanState = C_KeyStateFirst;

ui_KeyScanState = C_KeyStateReleaseDebounce; ui_RepeatCount = 0; ui_RepeatEvent = 1; ui_KeyCount++;

case C_KeyStateAfterLKey:

19

长春师范学院毕业论文 第一章 1引言

}

}

} break; break;

default:

unsigned int KeyScan_GetKey(unsigned int *KeyType); 语法格式:入口参数:按键类型 出口参数:键值 返回值:键值

功 能:该函数将返回当前按键的键值,并通过入口参数 KeyType 返回该按键的类型。

unsigned int KeyScan_GetKey(unsigned int *KeyType) { }

unsigned int Key;

if(C_NullKey == ui_KeyState)

Key = C_Null; Key = ui_KeyID; else

*KeyType = ui_KeyState;

if(C_KeyStateFirst == ui_KeyScanState) { }

return(Key);

ui_KeyID = C_Null; ui_KeyState = C_NullKey;

20

长春师范学院毕业论文 第一章 1引言

3.4 计价管理程序

本系统的核心是对传感器脉冲进行计数,并转换为公里数,进而根据规则计算行驶费用,同时,还需要对行驶速度进行监测,判断当前车辆是否处于低速运行状态,以实现对低速运行状态的计时,计算等待费用。

3.4.1 PWM 管理程序

计价管理程序包括如下几个组成部分:PWM 管理程序、里程计量程序、时间管理程序、费用管理程序、用户界面控制程序等,各部分共同协调工作,完成计价管理的核心工作以及用户界面的管理工作。3.4.1 PWM 管理程序

本系统中,使用了 TimerB 产生 PWM 波,模拟实际的出租车上的里程传感器脉冲。改变 PWM 的频率,就相当于改变了车速,对 PWM 波的脉冲进行计数,等同于对里程传感器的脉冲进行计数。

对 PWM 的管理包括:启动 PWM、增大 PWM 频率、减小 PWM 频率、停止 PWM 等。

系统中为 TimerB 设置了 96K的时钟源,以产生一定频率范围的 PWM 波,改变 TimerB 的计数初值,将会改变 PWM 的频率,从而达到管理 PWM 频率的目的。

3.4.2 里程计量程序

本系统中使用了外部中断 1 来实时检测由 IOB2 输入的脉冲。在外部中断服务程序中对中断次数进行计数,便可以统计输入脉冲的数量。

一般情况下,运行一段时间后输入单片机的脉冲数量会比较大,容易导致计数结果溢出。故程序中使用了两个变量对脉冲进行计数。uiPulseNum 变量用来记录中断次数(脉冲个数),当达到一公里对应的脉冲数量后,使另外一个记录公里数的变量 uiDistance 加一,并使 uiPulseNum归零重新计数。这样,便将公里数的整数部分和小数部分分开统计,使结果不容易溢出,也便于结果转换。

另外,程序中使用了 2Hz 时基中断用来计算车辆的行驶速度。统计 0.5s内

21

长春师范学院毕业论文 第一章 1引言

的脉冲数量,即可以得到车辆的行驶速度。这一速度将提供给费用管理程序用来判断是否处于低速等待状态。

3.4.3 时间管理程序

系统使用 2Hz 时基中断实现计时。中断服务程序流程如图 3.3 所示。其中,2Hz 计数器 ulTimer 用来为其他模块提供两个 2Hz 的计数器以方便的实现计时等操作。

图 3.3 时钟服务程序流程图

3.4.4 费用管理程序

费用管理程序的作用是监测系统时间、行驶里程和低速等待时间,并根据一定规则换算成费用(费用的具体计算过程请参考出租车计价器礼包的方案简介,

22


出租车计费系统之电路的设计与实现(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:陈情表教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: