当前位置:文档之家› 51出租车计价器程序

51出租车计价器程序

#include
#include
#include "Delay.h"
#include "LED8.h"
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit BEEP=P1^4;
sbit KEY5=P1^5;

bit TypeFlag=0; //显示类型 0-时钟 1-日期
bit SetFlag=0;
bit SetTimeFlag=0;
bit LongKeyFlag=0;
bit StopFlag=0;
bit LookFlag=0;

uint Clk=0;
uint Money=12; //总价
long Run=0; //里程
uint Speed=0;

uchar SetNum=0;
uchar SetNum1=0;//调节时间

uchar Price1=12; //起步价 12元 2公里范围
uchar Price2=3; //单价 3元 /公里
uchar Price3=1; //等待价格 1元 /2分钟
char StartHour=0;
char StartMin=0;
char StopHour=0;
char StopMin=0;
char Hour, Min, Sec;
uchar Mode=0; //模式0 计价器模式 模式1 - 时钟模式
uint Circ=2;//R16轮胎周长 2米
uchar PauseMin=0;//等待分钟
uchar PauseSec=0;


void BeepON()
{
BEEP=0;
DelayMS(100);
BEEP=1;
}
void DisplayTime()
{
arrTime[0]=Hour/10;
arrTime[1]=Hour%10;
arrTime[2]=29; //-
arrTime[3]=Min/10;
arrTime[4]=Min%10;
arrTime[5]=29; //-
arrTime[6]=Sec/10;
arrTime[7]=Sec%10;
}
void DisplayStartTime() //显示上车时间
{
arrStartTime[0]=5; //S-
arrStartTime[1]=29;
arrStartTime[2]=StartHour/10;
arrStartTime[3]=StartHour%10;
arrStartTime[4]=29;
arrStartTime[5]=StartMin/10;
arrStartTime[6]=StartMin%10;
arrStartTime[7]=30;
}
void DisplayStopTime() //显示下车时间
{
arrStopTime[0]=14; //E-
arrStopTime[1]=29;
arrStopTime[2]=StopHour/10;
arrStopTime[3]=StopHour%10;
arrStopTime[4]=29;
arrStopTime[5]=StopMin/10;
arrStopTime[6]=StopMin%10;
arrStopTime[7]=30;
}
void DisplayRun()
{
arrDisplay[0]=21; //L里程 换算成公里
arrDisplay[1]=Run/100000;
arrDisplay[2]=Run%100000/10000;
arrDisplay[3]=Run%10000/1000;
arrDisplay[4]=29; //-总价
arrDisplay[5]=Money/100;
arrDisplay[6]=Money%100/10;
arrDisplay[7]=Money%10;
}

void DisplayPause() //显示等待分钟
{
arrDisplay[0]=25;
arrDisplay[1]=29;
arrDisplay[2]=PauseMin/100;
arrDisplay[3]=PauseMin%100/10;
arrDisplay[4]=PauseMin%10;
arrDisplay[5]=29;
arrDisplay[6]=PauseSec/10;
arrDisplay[7]=PauseSec%10;
}

void KeyScan()
{
if(KEY1==0)
{
DelayMS(5);
if(KEY1==0)
{
PressFlag=1;
PressSec=0;
LongKeyFlag=0;
while(KEY1==0)
{
if((PressSec>=2)&&(SetFlag==0)&&(SetTimeFlag==0))
{
BeepON();
PressFlag=0;
PressSec=0;
LongKeyFlag=1;
SetTimeFlag=1;

DisplayTime();
DisNum=1;
SetNum1=1;
}
}
if(LongKeyFlag==0)
{
BeepON();
if(SetTimeFlag==0)
{
if(SetFlag==0)
{
SetFlag=1;
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;

arrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;

}
SetNum++; //SetNum=1起步价 =2单价 =3等待价
if(SetNum==3)
{
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
}
if(SetNum>3)
{
SetNum=0;
SetFlag=0;
DisplayRun();
}
}
else
{
SetNum1++;
if(SetNum1>3)
{
SetNum1=0;
SetTimeFlag=0;
}
}
}
}
}
if(KEY2==0)
{
DelayMS(5);
if(KEY2==0)
{
while(KEY2==0); //增加
BeepON();
if(SetFlag==1)
{
switch(SetNum)
{
case 1: //增加起步价 默认12元
Price1++;
if(Price1>200)
{
Price1=200;
}
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;
break;
case 2: //增加单价 默认3元
Price2++;
if(Price2>200)
{
Price2=200;
}
arrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;
break;
case 3: //增加等待价 默认1元
Price3++;
if(Price3>200)
{
Price3=200;
}
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
break;
}
}
if(SetTimeFlag==1)
{
switch(SetNum1)
{
case 1: //秒 增加
Sec++;
if(Sec>59)
{
Sec=0;
}
DisplayTime();
break;
case 2: //分 增加
Min++;
if(Min>59)
{
Min=0;
}
DisplayTime();
break;
case 3: //时 增加
Hour++;
if(Hour>23)
{
Hour=0;
}
DisplayTime();
break;
}
}
if((SetFlag==0)&&(SetTimeFlag==0)) //不在设置状态下 第二功能 开始/停止
{
if(StartFlag==0)
{
StartFlag=1;//开始标志
StartHour=Hour;
StartMin=Min;
StopFlag=0;

Run=0;
Money=Price1;
}
else
{
StartFlag=0;
StopHour=Hour;
StopMin=Min;
StopFlag=1;
}
}
}
}
if(KEY3==0)
{
DelayMS(5);
if(KEY3==0)
{
while(KEY3==0); //减少
BeepON();
if(SetFlag==1)
{
switch(SetNum)
{
case 1: //减少起步价 默认12元
Price1--;
if(Price1<1)
{
Price1=1;
}
arrDisplay[0]=10; //A
arrDisplay[1]=Price1/100;
arrDisplay[2]=Price1%100/10;
arrDisplay[3]=Price1%10;
break;
case 2: //增加单价 默认3元
Price2--;
if(Price2<1)
{
Price2=1;
}
a

rrDisplay[4]=11; //B
arrDisplay[5]=Price2/100;
arrDisplay[6]=Price2%100/10;
arrDisplay[7]=Price2%10;
break;
case 3: //增加等待价 默认1元
Price3--;
if(Price3<1)
{
Price3=1;
}
arrDisplay[0]=12; //C
arrDisplay[1]=Price3/100;
arrDisplay[2]=Price3%100/10;
arrDisplay[3]=Price3%10;
arrDisplay[4]=30;
arrDisplay[5]=30;
arrDisplay[6]=30;
arrDisplay[7]=30;
break;
}
}
if(SetTimeFlag==1)
{
switch(SetNum1)
{
case 1: //秒 减少
Sec--;
if(Sec<0)
{
Sec=59;
}
DisplayTime();
break;
case 2: //分 减少
Min--;
if(Min<0)
{
Min=59;
}
DisplayTime();
break;
case 3: //时 减少
Hour--;
if(Hour<0)
{
Hour=23;
}
DisplayTime();
break;
}
}


}
}
if(KEY4==0)
{
DelayMS(5);
if(KEY4==0) //确认
{
while(KEY4==0);
BeepON();

if((SetTimeFlag==0)&&(SetFlag==0))
{
DisNum++;
if(StopFlag==0)
{
if(DisNum>1)
{
DisNum=0;
}
}
else
{

if(DisNum==2)
{ //显示上车时间
DisplayStartTime();
}
if(DisNum==3)
{ //显示下车时间
LookFlag=0;
DisplayStopTime();
}

if(DisNum>3)
{
DisNum=0;
}
}

}
if(SetFlag==1)
{
SetFlag=0;
SetNum=0;
DisplayRun();
}
if(SetTimeFlag==1)
{
SetTimeFlag=0;
SetNum1=0;
DisplayTime();
}

}
}
if(KEY5==0)
{
DelayMS(5);
if(KEY5==0) //暂停
{
while(KEY5==0);
BeepON();
if(StartFlag==1)
{
if(PauseFlag==0)
{
PauseFlag=1;
PauseMin=0;
DisplayPause();
}
else
{
PauseFlag=0;
}
}
}
}
}
void Clock()
{
if(SetTimeFlag==0)
{
Sec++;
if(Sec>59)
{
Sec=0;
Min++;
if(Min>59)
{
Min=0;
Hour++;
if(Hour>23)
{
Hour=0;
}
}
}
DisplayTime();
}
}
void main(void)
{
InitTimer();
DisNum=0; //显示HELLO
TR0=1;
TR1=1; //启动计数器T1
DisplayRun();
while(1)
{
KeyScan();

if(TimeFlag==1)
{
TimeFlag=0;

Clock();

if(PauseFlag==1)
{
PauseSec++;
if(PauseSec>59)
{
PauseSec=0;
PauseMin++;
}
DisplayPause();
}
if(StartFlag==1)
{
Clk=TH1*256+TL1;
Run=Run+Clk*Circ; //里程= 圈速 * 周长 单位米
if((Run/1000)>2)
{
Money=Price1+(Run/1000-2)*Price2; //总价=起步价 + 单价*里程
}
else
{
Money=Price1;
}
if(PauseFlag==1)
{
Money=Money+Price3; //等待 费
}

TL1=0;
TH1=0;
if((SetFlag==0)&&(PauseFlag==0))
{
Displa

yRun();
}
}

}
}
}













相关主题
文本预览
相关文档 最新文档