/**************************************************************************
Menu
File Name: Menu.c
Author: Lin Qian
Created: 2008/04/28
Modified: NO
Revision: 1.0
***************************************************************************/
#define __MENU
#include "INC\\main.h"
#undef __MENU
// 画面模式 ******************************
#if Menu_en
void Menu (void)
{
// --- 变量定义 ---
static lastMenu = MENU_MAIN; // 记录画面状态有否更改
uchar numINT;
// --- Operation ---
if( PopMenu_en == 1 ) // 弹出画面
if( holdMenu > 0 ) // 画面维持判断
holdMenu--;
else
{
MenuMode = lastMenuMode;
PopMenu_en = 0;
}
if( lastMenu == MenuMode ) // 画面模式无更改
{ //--- 根据画面模式刷新画面内的动态数据 ---
switch( MenuMode )
{
case MENU_MAIN: // 主画面
//--- 刷新里程数和总价 ---
ShowDist(); // 显示里程数
CostCal(); // 计算总价
ShowCost(); // 显示总价
SelectUnitPrice(); // 选择单价
break;
case MENU_ADJUST_DAY_PRICE: // 调整白天价格画面
numINT = DayPrice / 10;
IntToStr(numINT, &TempBuffer[0], 2, CLEAR0);
TempBuffer[2] = '.';
IntToStr(DayPrice % 10, &TempBuffer[3], 1, CLEAR0);
LCD_GotoXY(5, 2);
LCD_Print(&TempBuffer[0]);
break;
case MENU_ADJUST_NIGHT_PRICE: // 调整夜晚价格画面
numINT = NightPrice / 10;
IntToStr(numINT, &TempBuffer[0], 2, CLEAR0);
TempBuffer[2] = '.';
IntToStr(NightPrice % 10, &TempBuffer[3], 1, CLEAR0);
LCD_GotoXY(5, 2);
LCD_Print(&TempBuffer[0]);
break;
case MENU_ADJUST_CLOCK_HOUR: // 调整实时时钟Hour画面
IntToStr(ClockHour, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(7, 2);
LCD_Print(&TempBuffer[0]);
break;
case MENU_ADJUST_CLOCK_MIN: // 调整实时时钟Min画面
IntToStr(ClockMin, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(7, 2);
LCD_Print(&TempBuffer[0]);
break;
default: break;
}
}
else // 画面模式有更改
{
switch( MenuMode )
//--- 根据画面模式载入新的画面 ---
{
case MENU_MAIN: // 主画面
LoadMenu_Main();
break;
case MENU_ADJUST_CLOCK_HOUR: // 调整实时时钟Hour画面
LoadMenu_AdjustClock("RTC. Hour: ");
break;
case MENU_ADJUST_CLOCK_MIN: // 调整实时时钟Min画面
LoadMenu_AdjustClock("RTC. Min: ");
break;
case MENU_ADJUST_DAY_PRICE: // 调整白天价格画面
LoadMenu_AdjustPrice("Day Price: "); // 装载调整画面
break;
case MENU_ADJUST_NIGHT_PRICE: // 调整夜晚价格画面
LoadMenu_AdjustPrice("Night Price: "); // 装载调整画面
break;
default: break;
}
}
//---------------------------------------------------------
lastMenu = MenuMode; // 更新画面状态记录
}
#endif
// 装载主画面 ******************************
#if LoadMenu_Main_en
void LoadMenu_Main (void)
{
//--- 静态画面 ---
LCD_GotoXY(0,0);
LCD_Print(" - : - Sec: ");
LCD_GotoXY(0,1);
LCD_Print("DST: km ");
LCD_GotoXY(0,2);
LCD_Print("$ UNT:$ ");
LCD_GotoXY(0,3);
LCD_Print("STOP: : : ");
//--- 动态参数填充 ---
ShowRTC(); // 显示实时时钟
ShowDist(); // 显示里程数
ShowCost(); // 显示总价
ShowUnitPrice(); // 显示单价
ShowStopTimer(); // 显示停车计时
}
#endif
// 装载"调整实时时钟"画面 ******************************
#if LoadMenu_AdjustClock_en
void LoadMenu_AdjustClock (uchar *title)
// title: 调整项目字符串地址.
{
//--- 静态画面 ---
LCD_GotoXY(0,0);
LCD_Print(" --- ADJUST --- ");
LCD_GotoXY(0,1);
LCD_Print(title);
LCD_GotoXY(0,2);
LCD_Print(" << >> ");
LCD_GotoXY(0,3);
LCD_Print(" ");
}
#endif
// 装载"调整单价"画面 ******************************
#if LoadMenu_AdjustPrice_en
void LoadMenu_AdjustPrice (uchar *title)
// title: 调整项目字符串地址.
{
//--- 静态画面 ---
LCD_GotoXY(0,0);
LCD_Print(" --- ADJUST --- ");
LCD_GotoXY(0,1);
LCD_Print(title);
LCD_GotoXY(0,2);
LCD_Print(" $ /km ");
LCD_GotoXY(0,3);
LCD_Print(" ");
}
#endif
// 装载"操作成功"画面 ******************************
#if LoadMenu_Succeed_en
void LoadMenu_Succeed (uchar *title)
// title: 项目字符串地址.
{
lastMenuMode = MenuMode; // 记录前一画面模式
MenuMode = MENU_SUCCEED;
PopMenu_en = 1; // 弹出画面允许
holdMenu = POP_MENU_TIME; // 设定画面维持时间
//--- 静态画面 ---
LCD_GotoXY(0,0);
LCD_Print(" ");
LCD_GotoXY(0,1);
LCD_Print(title);
LCD_GotoXY(0,2);
LCD_Print(" SUCCEED! ");
LCD_GotoXY(0,3);
LCD_Print(" ");
}
#endif
// 显示里程数 ******************************
#if ShowDist_en
void ShowDist (void)
{
uint numINT; // 数字的整数部分
uchar numFRAC; // 数字的小数部分
// 以km为单位, 换算里程数的整数部分和小数部分
numINT = Dist / 10;
numFRAC = Dist % 10;
IntToStr(numINT, &TempBuffer[0], 3, CLEAR0);
TempBuffer[3] = '.';
IntToStr(numFRAC,&TempBuffer[4], 1, CLEAR0);
// 将字符串内容发送至LCD显示
LCD_GotoXY(4,1);
LCD_Print(&TempBuffer[0]);
}
#endif
// 显示总价 ******************************
#if ShowCost_en
void ShowCost (void)
{
uint numINT; // 数字的整数部分
uchar numFRAC; // 数字的小数部分
// 以元为单位, 换算总价的整数部分和小数部分
numINT = Total / 10;
numFRAC = Total % 10;
if( numINT < 10 ) // 根据整数部分长度转换缓存内容
{
IntToStr(numINT,&TempBuffer[0],1,CLEAR0);
TempBuffer[1] = '.';
IntToStr(numFRAC,&TempBuffer[2],1,CLEAR0);
TempBuffer[3] = ' ';
TempBuffer[4] = ' ';
TempBuffer[5] = '\0';
}
else if( numINT < 100 )
{
IntToStr(numINT,&TempBuffer[0],2,CLEAR0);
TempBuffer[2] = '.';
IntToStr(numFRAC,&TempBuffer[3],1,CLEAR0);
TempBuffer[4] = ' ';
TempBuffer[5] = '\0';
}
else
{
IntToStr(numINT,&TempBuffer[0],3,CLEAR0);
TempBuffer[3] = '.';
IntToStr(numFRAC,&TempBuffer[4],1,CLEAR0);
}
// 将字符串内容发送至LCD显示
LCD_GotoXY(1,2);
LCD_Print(&TempBuffer[0]);
}
#endif
// 显示实时时钟 ******************************
#if ShowRTC_en
void ShowRTC (void)
{
// 实时时钟Hour
IntToStr(ClockHour, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(2,0);
LCD_Print(&TempBuffer[0]);
// 实时时钟Min
IntToStr(ClockMin, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(5,0);
LCD_Print(&TempBuffer[0]);
// 实时时钟Sec
IntToStr(ClockSec, &TempBuffer[0], 2, CLEAR0);
LCD_GotoXY(14,0);
LCD_Print(&TempBuffer[0]);
}
#endif
// 显示单价 ******************************
#if ShowUnitPrice_en
void ShowUnitPrice (void)
{
uchar numINT;
numINT = UnitPrice / 10;
if( numINT < 10 )
{// 一位整数
IntToStr(numINT, &TempBuffer[0], 1, CLEAR0);
TempBuffer[1] = '.';
IntToStr(UnitPrice % 10, &TempBuffer[2], 1, CLEAR0);
}
else
{// 两位整数
IntToStr(numINT, &TempBuffer[0], 2, CLEAR0);
TempBuffer[2] = '.';
IntToStr(UnitPrice % 10, &TempBuffer[3], 1, CLEAR0);
}
// 将字符串内容发送至LCD显示
LCD_GotoXY(12, 2);
LCD_Print(&TempBuffer[0]);
}
#endif
// 显示停车计时 ******************************
#if ShowStopTimer_en
void ShowStopTimer (void)
{
// 停车计时Hour
IntToStr(StopHour, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(6,3);
LCD_Print(&TempBuffer[0]);
// 停车计时Min
IntToStr(StopMin, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(9,3);
LCD_Print(&TempBuffer[0]);
// 停车计时Sec
IntToStr(StopSec, &TempBuffer[0], 2, RESERVE0);
LCD_GotoXY(12,3);
LCD_Print(&TempBuffer[0]);
}
#endif
// 显示速度 ******************************
#if ShowSpeed_en
void ShowSpeed (void)
{
static lastSpeed = 1;
if( lastSpeed != Speed ) // 当速度发生改变时, 刷新速度
{
lastSpeed = Speed;
// SendDigitLED(Speed, 3); // 刷新数码管中的速度
}
}
#endif
//************************************************************
Taxi_System.rar_proteus taxi_proteus出租车_taxi_出租车 proteus_计费仿真
版权申诉
167 浏览量
2022-09-22
17:42:47
上传
评论
收藏 63KB RAR 举报
刘良运
- 粉丝: 67
- 资源: 1万+
最新资源
- cutcamera1715961370938.png
- 基于MATLAB的图像处理课程设计报告.doc
- tensorflow-gpu-2.6.0-cp38-cp38-manylinux2010-x86-64.whl
- mmexport1715960553858.png
- tensorflow-gpu-2.6.0-cp37-cp37m-manylinux2010-x86-64.whl
- 通过 .NET 应用程序中的源代码查找 SQL 注入
- 电子设计竞赛2007年B题 无线识别装置.doc
- Wox全局搜索工具,一款win下的全局搜索软件
- 使用高级集群管理 (ACM) 模板来管理用户、组和命名空间
- 电子设计竞赛2007年A题 音频信号分析仪.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈