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

📄 menu.c

📁 用KEIL开发的出租车计费系统
💻 C
字号:
/**************************************************************************
  
						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

//************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -