长春师范学院毕业论文 第一章 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