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

📄 main1533.c

📁 出 租 车 计 价 器 源 码 LCM12864 24C02 AT89C51
💻 C
📖 第 1 页 / 共 2 页
字号:
					if(setPriceMod==0)
					{
						LCD12864_string(1,1,"1.晚上");
						LCD12864_string(6,1,arr_nightPrice);
						setPriceMod=1;

					}
					else if(setPriceMod==1)
					{
						LCD12864_string(1,1,"1.白天");
						LCD12864_string(6,1,arr_dayPrice);
						setPriceMod=0;
					}
					tpKEY=0;
				}
			}
			if(KEY_2==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_2==0);
				DelayM(20);
				if(tpKEY==1)
				{
					if(setPriceMod==0)
					{

						dayPrice+=0.1;
						x24c02_write(2,dayPrice);
                                        //        dayPrice=1;
					//	dayPrice=x24c02_read(2);
                                                x24c02_write(2,2);
                                        //        dayPrice=1;
					//	dayPrice=x24c02_read(2);
					//	ChangeDayPrice();
						LCD12864_string(6,1,arr_dayPrice);
					}
					else if(setPriceMod==1)
					{
						nightPrice+=0.1;
						x24c02_write(3,nightPrice);
						ChangeNightPrice();
						LCD12864_string(6,1,arr_nightPrice);

					}
				}
				tpKEY=0;
			}
			if(KEY_3==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_3==0);
				DelayM(20);
				if(tpKEY==1)
				{
					if(setPriceMod==0)
					{

							dayPrice-=0.1;
							if(dayPrice<0)
								dayPrice=0;
							x24c02_write(2,dayPrice);
							ChangeDayPrice();
							LCD12864_string(6,1,arr_dayPrice);

					}
					else if(setPriceMod==1)
					{

							nightPrice-=0.1;
							if(nightPrice<0)
								nightPrice=0;
							x24c02_write(3,nightPrice);
							ChangeNightPrice();
							LCD12864_string(6,1,arr_nightPrice);

					}
				}
				tpKEY=0;
			}


			if(KEY_4==0)
			{
				DelayM(20);
				tpKEY=1;
				while(KEY_4==0);
				DelayM(20);
				if(tpKEY==1)
				{
					tpKEY=0;
					ListMenu();
					return;
				}
			}
		}


}
void ShowSetWheel()
{
	uchar tpKEY=0;
	SetWheelMenu();
	ChangeWheelPerimeter();
	LCD12864_string(5,1,arr_wheelPerimeter);
	while(1)
	{
		 	if(KEY_1==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_1==0);
				DelayM(20);
				if(tpKEY==1)
					tpKEY=0;

			}
			if(KEY_2==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_2==0);
				DelayM(20);
				if(tpKEY==1)
				{

						wheelPerimeter++;
						ChangeWheelPerimeter();
						LCD12864_string(5,1,arr_wheelPerimeter);
				}
				tpKEY=0;
			}
			if(KEY_3==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_3==0);
				DelayM(20);
				if(tpKEY==1)
				{
					if(wheelPerimeter>0)
						wheelPerimeter--;
					ChangeWheelPerimeter();
					LCD12864_string(5,1,arr_wheelPerimeter);
				}
				tpKEY=0;
			}


			if(KEY_4==0)
			{
				DelayM(20);
				tpKEY=1;


				while(KEY_4==0);
				DelayM(20);
				if(tpKEY==1)
				{
					tpKEY=0;
					x24c02_write(5,wheelPerimeter);
					ListMenu();
					return;
				}
			}
		}
}

void ReSet()
{
	setPriceMod=0;//0设置白天,1设置晚上
	priceMod=0;//0按白天计价,1按晚上计价
	isBilling=0;
	dayPrice=5.5, nightPrice=6.5;	//价格
	distance=0;//里程
	waitDistance=0;
	wheelPerimeter=100;//车轮周长cm
	circle=0; //圈数
	//kCircle=0;//千圈数
	hCircle=0;//百圈数
	totalCost=0;//总价格
	//waitPrice=0;//
	waitTime=0;//等待时间
	tpCircle=0;
	_testWait=0;
	timeMs=0;


	x24c02_write(1,0);
	x24c02_write(2,5.5);
	x24c02_write(3,6.5);
	x24c02_write(4,0);
	x24c02_write(5,100);
	x24c02_write(6,0);
	x24c02_write(7,0);
        
        
	CLERADISPLAY
	LCD12864_string(3,2,"重置完成");
	DelayM(1000);

	MainMenu();

}
void ShowList()
{
	uchar tpKEY;
	ListMenu();
	while(1)
	{
			if(KEY_1==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_1==0);
				DelayM(20);
				if(tpKEY==1)
					ShowSetPrice();	  //设置价格

			}
			if(KEY_2==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_2==0);
				DelayM(20);
				if(tpKEY==1)
					ShowSetWheel();		  //设置轮胎周长
				tpKEY=0;

			}
			if(KEY_3==0)
			{
				DelayM(20);
				tpKEY=1;

				while(KEY_2==0);
				DelayM(20);
				if(tpKEY==1)
					ReSet();		  //设置轮胎周长
				tpKEY=0;
			}


			if(KEY_4==0)
			{
				DelayM(20);
				tpKEY=1;
				while(KEY_4==0);
				DelayM(20);
				if(tpKEY==1)
				{
					CLERADISPLAY
					MainMenu();
					tpKEY=0;
					return;
				}
			}

	}
}
void Billing()
{
	circle=0;
	hCircle=0;
	isBilling=1;   //开始计价
	x24c02_write(1,isBilling);
//	uchar tpKEY=0;
	BillingMenu();
	LCD12864_string(4,4,"计  价");

	while(1)
	{
		distance=(float)wheelPerimeter*hCircle/10000+waitDistance;
		x24c02_write(5,wheelPerimeter);
		x24c02_write(6,hCircle);
		x24c02_write(7,waitDistance);
		if(priceMod==0)
		{
			totalCost=distance*dayPrice;
		}
		else if(priceMod==1)
		{
			totalCost=distance*nightPrice;
		}
		ChangeTotalCost();
		ChangeDistance();
		BillingData();
		if(KEY_2==0)
		{
			DelayM(20);
			tpKEY=1;
			while(KEY_2==0);
			DelayM(20);
			if(tpKEY==1)
			{
				tpKEY=0;
				if(isBilling==1)
				{	isBilling=0;LCD12864_string(4,4,"已停止");}
				else if(isBilling==0)
				{	isBilling=1;LCD12864_string(4,4,"计  价");}
				x24c02_write(1,isBilling);

				//MainMenu();

			}
		}
		if(KEY_4==0)
		{
			DelayM(20);
			tpKEY=1;
			while(KEY_4==0);
			DelayM(20);
			if(tpKEY==1)
			{
				tpKEY=0;
				if(isBilling==0)
				{
					MainMenu();
					return;
	
					//MainMenu();
				}

			}
		}
	}
}

void SetMod()
{

	if(priceMod==0)
	{
		LCD12864_string(7,4,"夜晚");
		priceMod=1;
	}
	else if(priceMod==1)
	{
	 	LCD12864_string(7,4,"白天");
		priceMod=0;
	}
	x24c02_write(4,priceMod);
}
void Inital()
{
		TMOD=0x20; 						 //定时器器1 方式2
		TH1=TIME1H;

		TR1=1;							 //启动定时器1
		ET1=1;							 //允许定时器1中断

		EX1=1;							 //外部中断允许
      	IT1=0;							 //外部中断  0下降沿触发。
        								 //外部中断  1下降沿触发。
		EA=1;							 //CPU开中断

		Mcu_init();


		lastAddr=x24c02_read(0);
		isBilling=x24c02_read(1);
		dayPrice=x24c02_read(2);
		nightPrice=x24c02_read(3);
		priceMod=x24c02_read(4);
		if(priceMod!=0&&priceMod!=1)
			priceMod=0;
		wheelPerimeter=x24c02_read(5);
		hCircle=x24c02_read(6);
		waitDistance=x24c02_read(7);

		ChangeWheelPerimeter();
		ChangeDayPrice();
		ChangeNightPrice();

		if(isBilling==0)
		{
			hCircle=0;
			waitDistance=0;
		}
		else if(isBilling==1)															
		{
			Billing();
		}

}


void IncHCircle() interrupt 2
{
	if(isBilling==1)
	{
		if(circle==200)
		{
			//ChangeKCircle();
			//LCD12864_string(1,1,arr_kCircle);
			hCircle++;
			circle=0;

		}
		circle++;

	}
}

void TestWait() interrupt 3 //定时器1中断
{
//	if(isBilling==1)
//	{
//		if(timeMs==10000)
//		{timeMs=0;waitDistance++;}
//
//		timeMs++;
//	}


	if(isBilling==1)
	{

		if(timeMs==0)
		{
			tpCircle=circle;
		}
		if(timeMs==10000)
		{
			if(tpCircle==circle)
			{
				//if(_testWait>=10) _testWait=10;
				//else
					_testWait++;
			}
			if(tpCircle!=circle)
			{
				_testWait=0;
			}
			if(_testWait>5)
			{
				waitTime++;
				if(waitTime%300==0) //300 5分钟
					waitDistance++;
			}
			timeMs=0;
		}


		timeMs++;

	}
}
void main()
{
		Inital();
   	    CLERADISPLAY
		MainMenu();
		while(1)
        {

        	if(KEY_1==0)
			{
				DelayM(20);
				tpKEY=1;
				while(KEY_1==0);
				DelayM(20);
				if(tpKEY==1)
				{
					ShowList();
					tpKEY=0;
				}
			}
			if(KEY_2==0)
			{
				DelayM(20);
				tpKEY=1;
				while(KEY_2==0);
				DelayM(20);
				if(tpKEY==1)
				{
					Billing();
					tpKEY=0;
				}
			}
			if(KEY_3==0)
			{
				DelayM(20);
			//	ReSet();
				while(KEY_3==0);
				DelayM(20);
			}


			if(KEY_4==0)
			{
				DelayM(20);
				tpKEY=1;
				while(KEY_4==0);
				DelayM(20);
				if(tpKEY==1)
				{
					SetMod();
					tpKEY=0;
				}
			}
			//菜单
			//计费 再按停止计费
			//复位 ,系统复位(长按)
			//白天模式(默认),晚上模式(按)


	}
}

⌨️ 快捷键说明

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